Google chrome extension 使用inspectedWindow.reload插入javascript文件

Google chrome extension 使用inspectedWindow.reload插入javascript文件,google-chrome-extension,google-chrome-devtools,Google Chrome Extension,Google Chrome Devtools,我想知道是否有可能在任何情况下注入一个javascript文件,而不仅仅是代码语句 例如(什么有效): 但我想看看是否可以插入一个.js文件(不起作用): 不,此API不允许这样做,但编写一个包装器并不难: 使用XHR请求file.js 调用reload,响应为injectedScript 例如: function reloadWithFile(scriptFile) { var xhr = new XMLHttpRequest(); xhr.addEventListener("load

我想知道是否有可能在任何情况下注入一个javascript文件,而不仅仅是代码语句

例如(什么有效):

但我想看看是否可以插入一个.js文件(不起作用):


不,此API不允许这样做,但编写一个包装器并不难:

  • 使用XHR请求
    file.js
  • 调用
    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();
    }
    

    通过连接多个文件来注入多个文件只是一个练习(可能会有帮助)。

    我认为这不可能或还不可能做到。但还有其他解决方法,如使用
    content.js
    或使用
    background.js
    chrome.tabs.executeScript()插入文件。您可能想检查一下,我想到了这一点,但问题在于
    reload()
    的功能。它有效地在“文档开始”内容脚本中一次性注入
    运行。这将是非常棘手的实现,因为涉及到时间安排-在提交导航之前,您无法在“新”页面上执行
    executeScript
    ,我的时间可能太晚了,无法在页面自己的脚本之前进行注入。感谢您指出我错过的一些信息,并投票给您的答案
    chrome.devtools.inspectedWindow.reload({
      ignoreCache: true,
      injectedScript: 'file.js'
    });
    
    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();
    }