javascript-Chrome扩展:加载时content.js和background.js之间的通信
编辑:使用作为参考的修改代码。还是不走运 我正在尝试编写一个使用chrome.*API调用的chrome扩展名,并将部分结果保存到一个文件中。我想自动化从页面加载到文本文件下载的所有过程,因此,我不想使用browser.onclick()事件。 我目前的尝试没有效果 我需要做哪些更改 以上述答案为参考,我尝试了以下几点: manifest.jsonjavascript-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"
{
"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,我可以将其保存在一个文件中。实现这一目标的正确方法是什么?