Electron内调用网页出现 $ is not defined 或者 jQuery is not defined

打包了一个electron应用,引入一个部署好的网页。意外发现,之前在浏览器好好的功能,此刻在electron内部却出现报错:

"$ is not defined"\"jQuery is not defined"\ "Luckysheet is not defined" .....

总之,报了一大堆错误,全部找不到对应的模块。

后来查了资料,才知道在使用electron的时候,开启了node环境:

复制代码
// 创建window时,开启了node环境
// 所以之前浏览器环境好好的功能在这里完全没用了

// 因为nodejs是commonjs规范,而jquery并非通过require引入的,所以在node环境中找不到了


win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
          
          nodeIntegration: true   // 开启了node环境
          
        },
        icon: path.join(__dirname, "./favicon.ico"),
      });

那么知道问题出在哪里,就可以解决了。

解决方案:

第一, 关闭node环境。

直接将上边的参数设置为false。但是注意 ,一旦设置为false,你的应用将不再支持nodejs环境,你如果编写了nodejs程序或者使用了nodejs进程通信,这些功能将受到影响

第二,使用commonjs规范引入jquery。

复制代码
1. 安装依赖
npm i jQuery

2. 引入依赖(在index.html中)
<script>window.$ = window.jQuery = require('jquery');</script>

如果觉得以上两种,都不太好用。那么第三种是终极解决方案。

第三,终极解决。

复制代码
<!-- 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>

最后,将我查找资料的几个有用的链接放在这里,需要的可以查看:

Electron: jQuery is not defined - Stack Overflow

jQuery isn't set globally because "module" is defined · Issue #254 · electron/electron · GitHub

相关推荐
gis开发之家3 分钟前
《Vue3 从入门到大神40篇》Vue3 源码详解(十):diff 算法全解析 —— 为什么 Vue3 比 Vue2 更快?
javascript·算法·typescript·前端框架·vue3·vue3源码
海带紫菜菠萝汤1 小时前
WebCodecs API 实战:浏览器原生视频编解码的原理与性能测试
前端·javascript·音视频·视频编解码
前端炒粉3 小时前
简易实现ssr
开发语言·前端·javascript
薛定谔的猫-菜鸟程序员3 小时前
基于 Electron 的本地短视频解析与下载工具:架构设计与工程实践
java·electron·音视频
meilindehuzi_a4 小时前
Node.js + LangChain.js + Milvus 实战:从 EPUB 入库到《天龙八部》RAG 问答系统
javascript·langchain·node.js
勇往直前plus4 小时前
Vue3(篇四)单页面应用到路由管理
javascript·typescript·前端框架·vue
不简说6 小时前
JS 代码技巧 vol.9 — 20 个设计模式在真实项目里的应用
前端·javascript·github
勇往直前plus6 小时前
Vue3(篇三) Element Plus
前端·javascript·typescript·vue
Revolution616 小时前
数组本身没有 map,为什么还能直接调用:原型链怎样查找属性
前端·javascript·面试
cdcdhj6 小时前
vue3中的watchEffect()监听,什么时候监听,什么时候清理,什么时候停止
前端·javascript·vue.js