【问题标题】:On-site Javascript is not working in Electron but anywhere else现场 Javascript 在 Electron 中不起作用,但在其他任何地方都不起作用
【发布时间】:2018-10-21 07:30:06
【问题描述】:

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

应该(并且确实)通常适用于每个浏览器的 Javascript 不适用于 Electron,因为它会引发错误,与该特殊情况下的 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)

我首先在这里问这个问题,因为我觉得它在 Electron 之外的任何其他地方都可以工作,这对我来说似乎很奇怪。我可以将任何特殊选项传递给BrowserWindow 设置以使其工作吗?

如果你想摆弄源代码,你可以找到它here。

【问题讨论】:

  • 您能否使用导致脚本的非缩小版本并告诉我们究竟是哪一行引发了错误?

标签: javascript electron


【解决方案1】:

只要做:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 1970-01-01
      • 2018-04-02
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2021-08-01
      • 2017-01-01
      相关资源
      最近更新 更多