我在 Firefox SDK 应用中使用pageMod()
,我希望转换为 Webextension 。
我在我的背景js文件中声明:
var pageMod = require("sdk/page-mod");
我在manifest.json
"content_scripts": [
{
"matches": ["*://*.mytestsite.com/*"],
"js": ["background.js"]
}
]
但是我在我的pageMod()
脚本中调用background
,我有很多附件和其他内容。我不知道我怎么能改变这个。
例如我想转换的内容:
pageMod.PageMod({
include: "*.mytestsite.com",
contentScriptFile: [self.data.url("jquery-2.0.3.min.js"), self.data.url("jquery-ui.min.js"), self.data.url("site_modal_min.js"), self.data.url("timerreview.js")],
onAttach: function onAttach(worker) {
如何使用 Webxtension
进行PageMod()
调用
答案 0 :(得分:0)
请注意,在manifest.json中,您不能在content_scripts标记内包含background.js。你会这样做(假设你的域匹配选择器是正确的):
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["*://*.mytestsite.com/*"],
"js": ["timerreview.js", "jquery.js"]
}
]
如果要进行通信(变量等),请使用后台脚本和内容脚本之间的消息传递。这特别有用,因为大多数WebExtensions API仅适用于后台脚本。
在内容脚本中,添加:
// Listen for messages from the background script
browser.runtime.onMessage.addListener(onMessage);
function onMessage(message) {
switch(message.action)
case "testAction":
testAction(message.data);
break;
default:
break;
}
}
function sendMessage(action, data){
browser.runtime.sendMessage({"action": action, "data": data});
}
在后台脚本中,添加:
// listen for messages from the content or options script
browser.runtime.onMessage.addListener(function(message) {
switch (message.action) {
case "actionFromContent":
doSomething(); // message.data is not needed
break;
default:
break;
}
});
// See also https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/Tabs/sendMessage
function sendMessage(action, data){
function logTabs(tabs) {
for (tab of tabs) {
browser.tabs.sendMessage(tab.id, {"action": action, "data": data}).catch(function(){
onError("failed to execute " + action + "with data " + data);
});
}
}
browser.tabs.query({currentWindow: true, active: true}).then(logTabs, onError);
}
function onError(error){
console.error(error);
}
现在你可以使用:
sendMessage("actionFromContent") from within the content script to send a message to the background script
sendMessage("testAction", "someData") from within the background script to the active content script (the active tab)