Javascript browser.find继续返回未定义的firefox加载项

Javascript browser.find继续返回未定义的firefox加载项,javascript,firefox,Javascript,Firefox,我正在尝试编写一个基本的firefox插件,在网页上查找单词。 我已经将其封装在一个匿名函数中,它位于addon.js中。 我一直收到未定义browser.find的错误。浏览器只是一个引用浏览器的变量吗?如果是,如何创建该引用?Thx addon.js (function () { function found(results) { console.log(`There were: ${results.count} matches.`); if (results.count &g

我正在尝试编写一个基本的firefox插件,在网页上查找单词。 我已经将其封装在一个匿名函数中,它位于addon.js中。 我一直收到未定义browser.find的错误。浏览器只是一个引用浏览器的变量吗?如果是,如何创建该引用?Thx

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);

})();
browser.runtime.sendMessage({
    cmd: "find",
    toFind: "P"
}, function(msg){
    console.log(msg)
});
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函数的一部分。 你可以找到一个完整的清单

您可以使用后台脚本实现此功能。 加载内容脚本后,您可以向后台脚本发送消息,以触发搜索并突出显示结果

以下是一个例子:

manifest.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"
   ]
}
background.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

(function () {

  function found(results) {
  console.log(`There were: ${results.count} matches.`);
  if (results.count > 0) {
    browser.find.highlightResults();
  }
}

   browser.find.find("P").then(found);

})();
browser.runtime.sendMessage({
    cmd: "find",
    toFind: "P"
}, function(msg){
    console.log(msg)
});

泰特斯。我仍然有点不确定:内容和背景脚本之间的区别我已经阅读了文档。此外,我还通过更改清单和browser.find.findA使后台脚本正常工作。findA返回“关于:调试”页面上的所有字母A,但不返回任何其他选项卡上的字母A。我确实在权限中添加了选项卡,但没有效果。thx@Mike“查找”搜索单个选项卡,如果要搜索特定选项卡,则必须向函数传递第二个参数,并使用指定该参数的选项。您可以查看以了解更多详细信息。