折腾Electron对JQuery的支持-创新互联

最近在了解Electron框架写应用,偶然发现在html中使用这种方式引入JQuery,明明引入了,程序中却始终报错显示:Uncaught ReferenceError: $ is not defined。

目前创新互联公司已为上千家的企业提供了网站建设、域名、网络空间、网站托管、企业网站设计、凤台网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

经查阅资料,发现不仅JQuery不能用,RequireJS、Meteor、AngularJS也不能使用。

    原因是Electron 在运行环境中引入了 Node.js,默认启用了Node.js的require模块,而这些框架为了支持commondJS标准,当Window中存在require时,会启用模块引入的方式。所以在 DOM 中有一些额外的变量,比如module、exports和require。这导致了许多库不能正常运行,因为它们也需要将同名的变量加入运行环境中。

解决方法有很多,官方的解决方法是1、2:

    1、禁用Node.js:若不使用Node.js则通过在主进程中禁用Node.js来解决。

    // 在主进程中

    var mainWindow = new BrowserWindow({

      webPreferences: {

        nodeIntegration: false

      }

    });

     2、变量重命名:假如依然需要使用 Node.js 和 Electron 提供的 API,则需要在引入那些库之前将这些变量重命名。

    

      

      

    

    这样,就可以用nodeRequire来使用node模块,又能使用jQUery了,但这种方法不适合web项目,在web里将无法正常浏览。

     3、采用Node.js的require引入:(有些时候不要带后缀名.js)

    

    4、自定义$、jQuery变量

      

        

    5、

        

     

     

     

     

     

     

        6、去掉框架中的模块引入判断代码:针对JQuery

        将JQuery中的如何代码

    !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}

        改为

        !function(a,b){b(a)}

我个人还是比较喜欢使用第三种,简单代码少

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:折腾Electron对JQuery的支持-创新互联
文章来源:http://hbruida.cn/article/ddccsj.html