Electron预加载脚本对于webview无效?

5

我有一个 WebView,我是这样加载的:

<webview id="link-view"
        src="http://url.espace.com/"
        preload="./preload.js"
        autosize="on"
        partition="persist:link"></webview>

在preload.js文件中:我有以下内容
console.log("test");

这个甚至都不起作用。

有人能解释一下吗?


尝试使用preload.js替代./preloads.js - PatNowak
1
对于从Google来的用户,请确保在动态创建webview时使用setAttribute。这让我有点困惑,因为它在旧版本的Electron中仍然有效。所以,不要使用webview.preload = './preload.js',而是使用webview.setAttribute('preload', './preload.js')。 - Maciej Krawczyk
3个回答

10

我刚刚尝试了相同的情况,结果如预期。

你是否已经打开了<webview>开发工具?由于<webview>有自己的开发工具,这是我能想到的唯一原因导致预加载脚本未显示console.log输出。你可以通过以下方式打开它们:

var webview = document.getElementById("link-view");
webview.openDevTools();

或者你的脚本路径不正确,但我怀疑这一点,因为你似乎对此很确定。


1
如果这对任何人都不起作用,那么很可能是预加载脚本本身出现了错误,这个错误不会在应用程序开发工具中显示,而是在Webview中显示。 - avisk

4
使用最新的Electron 2.0.0(在撰写本文时为beta-5),preload属性要求使用file:(或asar:)协议后跟绝对路径。像./preload.js这样的路径似乎不再起作用,并引发异常:Only "file:" protocol is supported in "preload" attribute.

2
这解决了我的问题,在使用react.js的electron 3.0.0-beta.4中。
<webview src={'http://example.com'} preload={`file://${__dirname}/preload.js`}/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接