现场Javascript在Electron中不起作用,但在其他地方

时间:2015-08-12 10:03:03

标签: javascript electron

昨天我为一个网站写了一个小的桌面包装器(它真的只是加载一个网站),作为Electron的一些练习,但我注意到了以下内容:

Javascript,应该(并且确实)通常在每个浏览器上工作都不适用于Electron,因为它会抛出一个错误,与特殊情况下的Javascript相关。

test: scala.util.Try[java.util.Date] = Success(Tue Oct 15 10:55:01 CEST 2002)

我首先在这里问这个问题,因为对我来说这似乎很奇怪,除了Electron之外,它在其他任何地方都有用。我可以将任何特殊选项传递给可能使其正常工作的test match { case Success(date) => // ok case Failure(exception) => // not ok } 设置吗?

如果您想弄清楚源代码,可以找到它here

2 个答案:

答案 0 :(得分:1)

Electron BrowserWindow中的JavaScript环境与Chrome / FF / IE等正常实例中的JavaScript环境并不完全相同。一个巨大的区别是BrowserWindow具有node.js集成。由于节点集成已打开,因此某些节点可能会与为普通浏览器编写的JavaScript冲突。看一下这个帖子,例如:How do I use Dojo Toolkit in an Electron application?。在该示例中,Dojo使用“require”,这在普通浏览器中工作正常。但是,当直接加载到Electron BrowserWindow时,它会失败,因为require已经通过节点集成定义并具有不同的功能。我无法确定这样的事情是导致您确切问题的原因,但如果它在普通浏览器中正常工作,则可能是原因。

如果您想从网页加载页面,最好使用Electron的webview元素。在加载webview之前,您可以运行脚本以允许您设置应用程序可用于富桌面集成的全局变量。将网页从互联网直接加载到BrowserWindow是非常危险的,因为使用node.js,网页将拥有“王国的钥匙”,可以自行决定打开和编辑文件。使用webview元素可以更好地控制页面可能执行或不执行的操作。

答案 1 :(得分:1)

只需:

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