如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

electron基于node是个不争的事实,而jquery在市面上的普及度,也是有目共睹的。虽然近些年来,被react、vue们抢了不少市场。但是,姜还是老的辣,jquery的普及度还是不可小觑的。

在本文的经验分享中,苏南大叔将要描述的是:electronjquery的冲突何在,如何让两者和平共处。

症状描述

本文还是以改造版的quick-start项目为例,加载的网站还是 https://electron.org.cn 。electron使用BrowserWindow加载url,nodeIntegration参数不设置(默认为true)。网站代码内使用了jquery

下面的对比图中,左侧是chorme正常加载,右侧是通过electron加载。

electron与jquery不得不说的故事 - 030

electron与jquery不得不说的故事(图10-1)

那么我们可以明显看到,electron加载的网页,提示jquery is not definednodeIntegration 默认值是true,意思就是为页面中注入node相关能力。但是这个node相关的代码的加载方式和jquery冲突。

方案一:还原网页的本来面目,去除node功能加持

如果你不能修改被加载网页的代码的话,那么本条目是你的解决方案。见下图。

electron与jquery不得不说的故事 - 031

electron与jquery不得不说的故事(图10-2)

方案代码就是:

webPreferences:{
  nodeIntegration:false
}

我们可以手动关闭nodeIntegration

方案二,和平共处,jquery做妥协

这个和平共处方案比较不错,需要修改页面代码。但是不用修改node的函数名。主进程中的nodeIntegration,我们还是保持开启。在渲染进程里面,我们换成下面的方式加载jquery.js。而不是使用传统的加载方式。

window.$ = window.jQuery = require("./jquery.js");

这种方案需要注意的就是:jquery.js需要放置在本地,而不能加载网络地址。然后,路径必须写相对路径。路径中的./是不能省略的。否则,就会提示找不到模块。

electron与jquery不得不说的故事 - 005

electron与jquery不得不说的故事(图10-3)

方案三,和平共处,node做妥协

本解决方案适用于,你能修改项目源码的情况。main.js中开启nodeIntegration(或者使用默认值),而渲染页面中,对node相关模块进行处理。

main.js:

webPreferences:{
  nodeIntegration:true
}

渲染页面:

newsn.net:这里是【评论】可见内容

方案三,效果展示截图

为了更好的演示本方案,这个修改版的quick-start暂时还原其本来面目。下面的对比图将演示:开启nodeIntegration,如何影响页面中使用node相关功能函数。

electron与jquery不得不说的故事 - 032

electron与jquery不得不说的故事(图10-4)

electron与jquery不得不说的故事 - 033

electron与jquery不得不说的故事(图10-5)

相关的调用代码是这样的。

electron与jquery不得不说的故事 - 034

electron与jquery不得不说的故事(图10-6)

为了演示和jquery的冲突关系,苏南大叔增加了jquery相关的代码。如下图:

electron与jquery不得不说的故事 - 035

electron与jquery不得不说的故事(图10-7)

不开启nodeIntegration的话,则显示为node相关函数错误。

electron与jquery不得不说的故事 - 036

electron与jquery不得不说的故事(图10-8)

开启nodeIntegration之后,不对代码进行改造,则显示为jquery相关函数错误。

electron与jquery不得不说的故事 - 037

electron与jquery不得不说的故事(图10-9)

开启nodeIntegration之后,再对页面中的代码进行改造,两者和平共处。

electron与jquery不得不说的故事 - 038

electron与jquery不得不说的故事(图10-10)

总结

对于大多数情况来说,方案二或者方案三,应该是你最好的解决方案。当然,本文的两个解决方案,不仅仅适用于jquery,还适用于其他的常见js类库,例如:RequireJS 或者 AngularJS 等等。

想get到苏南大叔带来的更多electron实战技巧吗?请点击这里:https://newsn.net/tag/electron/

  【jquery】秘籍文章入口,仅传授于有缘之人  jquery    electron

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

打赏任意金额,发送截图到邮箱 shang@newsn.net ,可以领取精选回馈如下(任选其一):
  • 《前端视频教程大礼包》一套
  • 《wordpress精选皮肤》一套
  • 《dedecms织梦精选模板》一套
感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!

岁月静好

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/electron-jquery.html
上一篇好文:如何理解cookie的httponly属性
下一篇好文:如何保证electron只启动一个实例

如果您转载了本文章,出于某种原因,并没有注明作者或者出处。
在这里,苏南大叔也表示理解和支持。因为苏南大叔深深地明白:
您会在合适的时机,合适的地方,给本博客一个外链。对吧?
您若开心,便是安好!岁月静好,但愿世界和平,没有纷争~