2016-05-12 18 views
1

我想知道是否有可能注入一個JavaScript文件而不是隻是代碼語句。使用inspectedWindow.reload注入JavaScript文件

例如(什麼工作):

chrome.devtools.inspectedWindow.reload({ 
    ignoreCache: true, 
    injectedScript: 'console.log("Hello World!")' 
}); 

,但我想看看我是否能注入.js文件(不工作):

chrome.devtools.inspectedWindow.reload({ 
    ignoreCache: true, 
    injectedScript: 'file.js' 
}); 

回答

2

沒有,這個API沒有按不容許,但寫封包並不難:

  1. 請求file.js使用XHR。
  2. 致電reload,回覆爲injectedScript

例如:

function reloadWithFile(scriptFile) { 
    var xhr = new XMLHttpRequest(); 
    xhr.addEventListener("load", function(evt) { 
    chrome.devtools.inspectedWindow.reload({ 
     ignoreCache: true, 
     injectedScript: xhr.responseText 
    }); 
    }); 
    xhr.open("GET", chrome.runtime.getURL(scriptFile)); 
    xhr.send(); 
} 

通過連接它們注入多個文件被留給讀者作爲練習(Promises可能是有益的)。

1

我認爲這不是或不可能做到。但還有其他解決方法,如使用content.js或使用background.js chrome.tabs.executeScript()注入文件。你可能想要檢查using a content script js filebackground.js

+1

我想到了,但問題在於'reload()'的作用。它有效地執行一次性注入'run_at:「document_start」'內容腳本。由於涉及到時間因素,實現起來會非常棘手 - 在導航提交之前,您無法在「新建」頁面上執行「執行腳本」,並且在那段時間注入頁面自己的腳本之前可能爲時已晚。 – Xan

+0

感謝您指出我錯過的一些信息,並對您的答案進行投票 –