electron和jquery,不同electron版本下的冲突引发因素对比
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔以前写过一篇文章,说在渲染进程中加载jquery
的话,会和electron
自带的node
能力冲突。产生jquery is not defined
的问题。链接如下:
那么,在目前的最新的electron@12
及electron@13
版本中,这个问题还是否存在呢?本文测试环境:win10
,jquery@3.6.0
,chrome@90.0.4430.212
。使用了electron fiddle@0.2.31
来切换electron
版本号进行测试。
概述
本实验中,会出现$ is not defined
的错误提示。这个错误提示和electron
开始nodeIntegration
有关。
- 对于
electron@5
(不包括)之前,nodeIntegration
是默认开启的,默认有冲突。 - 而从
electron@5
到electron@11
,nodeIntegration
是默认关闭的,默认没冲突。 - 而从
electron@12
开始,nodeIntegration
分化成两个概念,nodeIntegration
(默认关闭)和contextIsolation
(默认开启),默认没冲突。
网站代码情况
本地先起了一个网站www
容器,加载的网站页面里面,加载了个jquery@3.6.0
最新版,同时简单做了个jq
调用。代码如下:
<script src="static/jquery-3.6.0.min.js"></script>
<h1></h1>
<script>
$("h1").text("test")
</script>
页面在最新版的chrome@
里面是正常执行的。正常情况下显示如下:
发生错误情况下,显示:
Uncaught ReferenceError: $ is not defined
electron@3
到electron@4
默认情况下,开启了nodeIntegration
,问题重现。
关闭nodeIntegration
之后,没有问题。
electron@5
到electron@11
默认情况下,关闭了nodeIntegration
,没有问题。
开启nodeIntegration
之后,问题重现。
electron@12
及electron@13
默认情况下,关闭了nodeIntegration
,开启了contextIsolation
,没有问题。
单独开启nodeIntegration
(此时contextIsolation
默认开启)或者关闭nodeIntegration
, 都没有问题。
开启nodeIntegration
,同时关闭了contextIsolation
,问题重现。
解决方案
除了去调整nodeIntegration
和contextIsolation
两个概念外,和可以去修改渲染进程的代码。
if (typeof module === "object") {
window.jQuery = window.$ = module.exports;
}
当然,还有其他的渲染进程方案,可以参考下面的文字:
相关链接
- https://newsn.net/say/electron-jquery.html
- https://newsn.net/say/electron-fiddle.html
- https://newsn.net/say/electron-require-is-not-defined.html
- https://newsn.net/say/electron-require-is-not-defined-2.html
总结
在传统网页里面,是离不开jquery
的。那么,electron
和jquery
的重逢,也是命中注定的。但是,可喜的是:默认情况下,electron
是越来越兼容jquery
了。即使在特殊的不兼容情况下,也可以通过修改渲染进程中,jquery
前后左右的代码,来使得渲染进程中可以使用jquery
来。
更多electron
的相关文章,请点击苏南大叔的系列文章:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。