现场Javascript不能在Electron中工作,但可以在其他任何地方工作

On-site Javascript is not working in Electron but anywhere else

本文关键字:其他 但可以 任何 地方工作 Javascript 不能 Electron 现场 工作      更新时间:2023-09-26

我昨天为一个站点写了一个小的桌面包装器(它实际上只是加载一个网站),作为一个使用Electron的练习,但是我注意到以下事情:

Javascript,这应该(并且确实)通常在每个浏览器上工作,但不能在电子上工作,因为它抛出一个错误,在那个特殊情况下与Javascript相关。

[2268:0812/115601:INFO:CONSOLE(18)] "Uncaught TypeError: Cannot read property 'on' of undefined", source: https://twist.moe/public/lib/snap.svg-min.js (18)

我在这里先问这个问题,因为它似乎很奇怪,它在其他地方工作,但在电子。是否有任何特殊的选项,我可以传递给BrowserWindow设置,可能使其工作?

如果您想摆弄源代码,可以在这里找到。

Just do:

window = new BrowserWindow({ webPreferences: { nodeIntegration: false } })

电子浏览器窗口中的JavaScript环境与在Chrome/FF/IE等正常实例中运行的环境不完全相同。一个巨大的区别是,BrowserWindow集成了node.js。由于启用了节点集成,因此节点拥有的某些功能可能与为普通浏览器编写的JavaScript发生冲突。看看这个线程的例子:我如何在一个电子应用程序中使用Dojo Toolkit ?在这个例子中,Dojo使用了"require",这在普通浏览器中工作得很好。然而,当直接加载到Electron BrowserWindow中时,它会失败,因为require已经通过节点集成定义,并且具有不同的功能。我不能确定像这样的东西是什么导致你的确切问题,但它很可能是原因,如果它在一个正常的浏览器工作正常。

如果你想从web上加载一个页面,最好使用Electron的webview元素。在加载webview之前,你可以运行一个脚本来设置全局变量,这些变量可以被应用程序用于富桌面集成。直接将网页从互联网加载到BrowserWindow中是相当危险的,因为使用node.js,网页将拥有"打开王国的钥匙",可以这么说,可以自行决定打开和编辑文件。使用webview元素可以让你更好地控制页面可以做什么或不可以做什么。

相关文章: