我正在尝试编写一个基本的 Firefox 插件,可以在网页上查找单词。 我将其封装在一个匿名函数中,它位于 addon.js 中。 我不断收到 browser.find 未定义的错误。 “浏览器”只是一个对浏览器的引用的变量吗?如果是,我如何创建该引用?谢谢。
addon.js
(function () {
function found(results) {
console.log(`There were: ${results.count} matches.`);
if (results.count > 0) {
browser.find.highlightResults();
}
}
browser.find.find("P").then(found);
})();
manifest.json:
{
"manifest_version": 2,
"name": "add on test",
"version": "1.0",
"description": "testing add on",
"content_scripts": [
{
"matches": [ "*://*.mozilla.org/*" ],
"js": [ "addon.js" ],
"css": ["addon.css"]
}
],
"permissions": [
"notifications",
"activeTab",
"webNavigation",
"find"
]
}
最佳答案
不幸的是,find
不是内容脚本可以访问的 API 函数的一部分。
您可以找到这些的完整列表 HERE
您可以使用后台脚本来实现此功能。 当内容脚本加载后,您可以向后台脚本发送消息以触发搜索并突出显示结果。
这是一个例子:
list .json
{
"manifest_version": 2,
"name": "add on test",
"version": "1.0",
"description": "testing add on",
"background" : { "scripts": ["background.js"]},
"content_scripts": [
{
"matches": [ "*://*.mozilla.org/*" ],
"js": [ "addon.js" ],
"css": ["addon.css"]
}
],
"permissions": [
"find"
]
}
背景.js
function found(rsp, results) {
if (results.count > 0) {
browser.find.highlightResults();
}
rsp(`There were: ${results.count} matches.`);
}
browser.runtime.onMessage.addListener(function(req, sender, rsp){
if(req.cmd == "find"){
browser.find.find(req.toFind).then(found.bind(this, rsp));
return true;
}
});
addon.js
browser.runtime.sendMessage({
cmd: "find",
toFind: "P"
}, function(msg){
console.log(msg)
});
关于javascript - browser.find 对于 Firefox 附加组件不断返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48514889/