【发布时间】:2016-10-25 05:40:38
【问题描述】:
我刚刚开始学习如何在 Firefox 中创建自己的插件。我正在使用 webExtensions,尽管我发现很难获得全面的文档(我认为因为它仍然是一个新的实现?)。代码似乎一切正常,它在 executeScript 调用后完成了一个“onExecuted”函数。但是我注入的脚本(output.js)似乎没有触发。运行代码后,我在 javascript 控制台中收到以下错误:“没有匹配的消息处理程序”。我不确定注入的脚本是否应该是一个自包含的 js 文件,或者它是否只是 js 命令的集合。我也尝试了后者(只是一个简单的消息框),但也没有用。
我的代码: manifest.json:
{
"manifest_version": 2,
"name": "ExportTabs",
"version": "0.9",
"description": "Export/Import Tabs",
"icons": {
"48": "icons/export48.png"
},
"permissions": [
"tabs",
"activeTab",
"<all_urls>"
],
"applications": {
"gecko": {
"id": "938745934875@example.com"
}
},
"browser_action": {
"default_icon": "icons/export.png",
"default_popup": "popup/popup.html"
}
}
按下插件按钮时我的popup.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div>
<button onclick="save()">Save Tabs</button>
<button onclick="view()">View Tabs</button>
</div>
<script src="popup.js"></script>
</body>
</html>
popup.js 文件:
function save() {
chrome.tabs.create({"url": chrome.extension.getURL("popup/output.html")}, onCreated);
}
function onCreated(newTab) {
chrome.tabs.executeScript(newTab.id, {
file: "popup/output.js",
allFrames: true
}, onExecuted);
}
function onExecuted(result) {
alert("inside onExecuted");
}
新创建的标签的输出.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div>testing stuff</div>
<div id="output"></div>
</body>
</html>
上面页面的output.js:
//output.js
(function() {
alert("inside output.js");
})();
我应该补充一点,我有 noscript 插件,所以用“全局允许脚本”尝试了这个,它仍然给出了同样的错误。 为任何帮助干杯。
编辑:我尝试用code: 'alert("hello");', 替换executeScript 方法中的file: "popup/output.js",,但它仍然不起作用。
从 OP 发布的答案中移出的信息:
撞。我在另一个带有 ff50.something (测试版通道)的盒子上尝试了这段代码,并且注入甚至没有使“onExecuted”。但它不会抛出任何错误。基本上弹出窗口有效,然后没有任何反应。
【问题讨论】:
标签: javascript firefox-addon firefox-addon-webextensions