现场Javascript不能在Electron中工作,但可以在其他任何地方工作
On-site Javascript is not working in Electron but anywhere else
我昨天为一个站点写了一个小的桌面包装器(它实际上只是加载一个网站),作为一个使用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元素可以让你更好地控制页面可以做什么或不可以做什么。
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- ajax请求成功,但可以'我看不到我的数据
- Django可以'不能在设置中导入ckeditor,但可以在shell中导入
- async问题,JS Promise无法返回结果,但可以使用console.log
- Javascript赢得'不能在IE上编译,但可以在Chrome上运行
- onbeforeunload事件在我的代码中没有触发,但其他示例可以工作
- 主干.js视图不会在页面加载时显示,但可以在控制台中与 jQuery 配合使用
- 为什么无法根据谷歌地图地理编码geometry.bounds找到位置,但可以通过MongoDB中的geometry.vi
- DateRangePicker 不适用于“今天”,但可以使用其他选项
- DomElement.click() 事件在 chrome 中不起作用,但其他事件可以工作
- Firefox 不会播放声音,但可以在其他浏览器中运行
- JavaScript 用具有特定 ID 的正则表达式 img 标记替换,但其他属性可以是任何属性
- 我可以使用按钮来调用函数,但不能从搜索设置的if语句中调用,但可以调用任何其他函数
- 脚本不允许lightbox覆盖嵌入的Youtube视频(wmode=透明),但其他脚本可以工作
- 无法通过JavaScript发送数据库时间戳,但可以发送其他值
- Chrome无法下载,但其他浏览器可以.mp4上的HTML链接
- 现场Javascript不能在Electron中工作,但可以在其他任何地方工作
- Javascript用8和9替换字符串不起作用,但其他数字可以
- 美元.Post不能在最新的firefox中工作,但可以在所有其他浏览器中工作