Electron运行程序时HTML页面里Jquery代码没有运行?

新手上路,请多包涵

用浏览器运行Html页面没有任何问题,使用Electron运行时页面样式没有问题,但是Jquery方法没有执行,查完资料修改Jquery文件引用行代码为
<script>window.$ = window.jQuery = require("./js/jquery.min.js");</script>
但是依然没有效果。
也不知道electron如何进行调试?

阅读 9.2k
4 个回答

require里不要带文件后缀
require("./js/jquery.min.js") -> require("./js/jquery.min")

另外,electron里打开调试工具是BrowserWindow.openDevTools
具体的可以查官方文档

注意jquey的引用顺序,要放在第一位。

抱歉微挖坟,这个问题在国外已经讨论过了。我刚好路过搬运一下,好让日后版友能解决问题。
票数最多的留言提供的最简洁方案如下StackOverflow (by Dale Harders)

<!-- Insert this line above script imports  -->
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>

<!-- normal script imports etc  -->
<script src="scripts/jquery.min.js"></script>    
<script src="scripts/vendor.js"></script>    

<!-- Insert this line after script imports -->
<script>if (window.module) module = window.module;</script>

参见自 问题 #254 @ Github

而这主要原因据在下不专业理解是因为 HTML这个子程序请求 jQuery,
然而全域并没有安装,所以任凭你丟十二道金牌 electron 还是不会乖乖地响应的,
上面提供的方法是告诉 electron 老子今天用这个 jQuery 用不着你 Node 模组管,
劳资另立专供通道,YCYU-NOBB。根据原作者的说法所有第三方库均能依此补贴土法炼。
在下也是亲测屡试不爽,还请老爷放过少爷。 (・ω・`三´・ω・)

当然,全域安装 jQuery 也是可行的,用法即如一楼菊苣所言,全域插件不能带 .js 副档名。

如果是用 BrowserWindow 打开的不是自己开发的页面,也就是说无法修改 HTML 代码的。建议可以使用 preload 属性【在页面运行其他脚本之前预先加载指定的脚本】。举例如下:

main.js

mainWindow = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true,
      webSecurity: true,
      preload: path.resolve(path.join(__dirname, 'path/to/preload.js'))
    },
    width: 900,
    height: 900
  });

mainWindow.loadURL("https://externalsite.com");

preload.js

document.addEventListener("DOMNodeInserted", function(event) {
    if (!!window && !(!!window.$)) {
        window.$ = window.jQuery = require('path/to/jquery.js');
    }
});

参考资料:jQuery issue on render side

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏