javascript-Chrome扩展:加载时content.js和background.js之间的通信

javascript-Chrome扩展:加载时content.js和background.js之间的通信,javascript,google-chrome,google-chrome-extension,google-chrome-devtools,Javascript,Google Chrome,Google Chrome Extension,Google Chrome Devtools,编辑:使用作为参考的修改代码。还是不走运 我正在尝试编写一个使用chrome.*API调用的chrome扩展名,并将部分结果保存到一个文件中。我想自动化从页面加载到文本文件下载的所有过程,因此,我不想使用browser.onclick()事件。 我目前的尝试没有效果 我需要做哪些更改 以上述答案为参考,我尝试了以下几点: manifest.json { "name":"Test Extension", "version":"0.0.1", "manifest_version"

编辑:使用作为参考的修改代码。还是不走运

我正在尝试编写一个使用chrome.*API调用的chrome扩展名,并将部分结果保存到一个文件中。我想自动化从页面加载到文本文件下载的所有过程,因此,我不想使用browser.onclick()事件。 我目前的尝试没有效果

我需要做哪些更改

以上述答案为参考,我尝试了以下几点:

manifest.json

{
   "name":"Test Extension",
   "version":"0.0.1",
   "manifest_version": 2,
   "description":"Description",
   "permissions":["tabs"],
   "background": {
    "scripts": ["background.js"]
    },
   "devtools_page": "devtools.html"
}
background.js

chrome.runtime.onConnect.addListener(function(devToolsConnection) {
    // assign the listener function to a variable so we can remove it later
    var devToolsListener = function(message, sender, sendResponse) {
        // Inject a content script into the identified tab
        chrome.tabs.executeScript(message.tabId,
            { file: message.scriptToInject });
    }
    // add the listener
    devToolsConnection.onMessage.addListener(devToolsListener);

    devToolsConnection.onDisconnect.addListener(function() {
         devToolsConnection.onMessage.removeListener(devToolsListener);
    });
}
//后台页面——Background.js

chrome.runtime.onConnect.addListener(function(devToolsConnection) {
    // assign the listener function to a variable so we can remove it later
    var devToolsListener = function(message, sender, sendResponse) {
        // Inject a content script into the identified tab
        chrome.tabs.executeScript(message.tabId,
            { file: message.scriptToInject });
    }
    // add the listener
    devToolsConnection.onMessage.addListener(devToolsListener);

    devToolsConnection.onDisconnect.addListener(function() {
         devToolsConnection.onMessage.removeListener(devToolsListener);
    });
}
devtools.js

var backgroundPageConnection = chrome.runtime.connect({
    name: "devtools-page"
});

backgroundPageConnection.onMessage.addListener(function (message) {
    // Handle responses from the background page, if any
});

chrome.devtools.network.onRequestFinished.addListener(
    function(request) {
        chrome.runtime.sendMessage({
            string: "Hi",
            tabId: chrome.devtools.inspectedWindow.tabId,
            scriptToInject: "content.js"
        });

     }
);
chrome.runtime.sendMessage({
    string: "Hi",
    tabId: chrome.devtools.inspectedWindow.tabId,
    scriptToInject: "content.js"
});
content.js

alert("Hello");

除非需要,否则请不要将jQuery加载到每个页面。jQuery是85kiB的最小化代码。这是一个沉重的负担,每一页都要负担。我们这些开着100个标签的人怎么办?虽然您可能真的需要jQuery,但您这样做更可能是为了不使用普通JavaScript而在自己的代码中保存几个/几百个字符。如果是这样,那么从用户的角度来看,这样做是一个非常糟糕的权衡。您的代码目前避免实际使用jQuery,因此不清楚为什么要加载它。您可以使用许多不同的东西来感知页面的当前状态,这两种方式都在您的应用程序中。请回答问题,准确描述您正试图完成的时间和/或等待
“完成”的原因,由于不清楚通过使用
选项卡.onUpdated
侦听器等待
'completed'
与您可能正在做的其他事情相比,您试图完成什么。我试图实现的是将所有HTTP请求的响应保存在一个文件中。其想法是使用devtools.network获取这些数据,然后将这些数据发送到content.js,我可以将其保存在一个文件中。实现这一目标的正确方法是什么?