我正在使用基于 Chrome 的 Firefox 的新 webExtensions 框架编写一个 webextension。所有示例扩展都在 Nightly 构建中工作,所以这就是我要测试的地方。我想要做的是在内容页面加载时运行一个脚本。这是我的 background.js 页面:
背景.js
"use strict";
function onCompletedFunc(details) {
var script = 'console.log("ok");';
console.log("Details are %o", details);
chrome.tabs.executeScript(details['tabId'], {
code: script,
runAt: 'document_end'
});
};
chrome.webRequest.onCompleted.addListener(onCompletedFunc,
{'urls': ['<all_urls>']},
['responseHeaders']);
//Does not work:
/*
chrome.webRequest.onCompleted.addListener(onCompletedFunc,
{'urls': ['<all_urls>'], 'types':["main_frame"]},
['responseHeaders']);
*/
这适用于每晚。我从背景页面获取详细信息列表(“详细信息是...”),并在内容页面的控制台上获取几行“ok”,每个资源对应一个加载的资源。它在 Chrome 中运行相同(清单文件略有不同)。
我想要的是第二种变体,它只在页面上运行一次。这在 Chrome 中运行良好。在 Nightly 中,它显示来自主框架的一条“详细信息”消息,但内容页面的控制台中没有显示任何内容。
我确定这是一个时间问题,但这里有什么问题?
manifest.json(删除 "applications":{...} 以与 Chrome 一起使用)
{
"description": "",
"manifest_version": 2,
"name": "execute_script",
"version": "1.0",
"applications": {
"gecko": {
"id": "user-agent-rewriter@mozilla.org",
"strict_min_version": "45.0"
}
},
"permissions": [
"webRequest", "webRequestBlocking", "<all_urls>"
],
"background": {
"scripts": ["background.js"]
}
}