2017-04-20 72 views
1

所以我使用Electron框架來構建一個應用程序來加載頁面並將自己的腳本注入到它中。然而,module在全球範圍內被定義和腳本jQuery沒有看到因爲這個如何在DOM完全加載之前在DOM頭插入腳本標記?

if (typeof module === "object" && typeof module.exports === "object") { 
    // set jQuery in `module` 
} else { 
    // set jQuery in `window` 
} 

這是因爲節點整合被打開,我要爲我注入腳本運行window對象。這個問題,結果是客戶端腳本無法正常工作,我看到這樣的錯誤

Uncaught ReferenceError: jQuery is not defined 
custom.min.js:1 Uncaught ReferenceError: jQuery is not defined 
homeOffer.min.js:1 Uncaught ReferenceError: $ is not defined 
main.js:48 Uncaught ReferenceError: $ is not defined 

如果我在客戶端頁面運行的任何腳本之前設置window.module = undefined,然後正常工作。

我想修改DOM,方法是在任何腳本運行之前插入一個腳本標記,它將module設置爲undefined

我有document對象的句柄,我嘗試下面的

document.addEventListener("DOMContentLoaded", function(event) { 
    var s = document.createElement("script"); 
    s.innerHTML = "console.log('hello from script'); window.module = undefined;"; 
    document.head.insertBefore(s, document.head.childNodes[0]); 
    console.log('dom loaded'); 
}); 

然而,問題是事件DOMContentLoaded因此它不會在DOM被解析,如果解僱,所有腳本運行爲此目的服務。

我的問題是有可能在任何腳本在客戶端頁面上運行之前運行我的腳本標記?

回答

1

嘗試:

  1. 創建像/script1.js

  2. 使用腳本的這行添加腳本文件:

    變種JQ =使用document.createElement( '腳本');

    jq.src =「http://www.example.com/script1.js」;

    document.getElementsByTagName('head')[0] .appendChild(jq);

    jQuery.noConflict();

像我添加jQuery腳本:

var jq = document.createElement('script'); 
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"; 
document.getElementsByTagName('head')[0].appendChild(jq); 
// ... give time for script to load, then type (or see below for non wait option) 
jQuery.noConflict(); 
相關問題