javascript - browser.find 对于 Firefox 附加组件不断返回未定义

标签 javascript firefox

我正在尝试编写一个基本的 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/

相关文章:

javascript - 如何在不使用脚本标签的情况下注入(inject) javascript?

javascript - 如何在javascript中获取mp3文件信息的持续时间,标题,图像等

javascript - 检测 Firefox 中的自动填充输入

c# - 如何检查浏览器是否在网络应用程序中启用了 cookie?

Javascript 日期时间比较返回 false 但分支 stmt 仍然执行

javascript - Twemoji 解析字符串并将表情符号更改为等效代码

google-chrome - Kerberos 授权不适用于 Chrome 和 FireFox,但适用于 IE

firefox - Selenium IDE : How to detect secure cookies on page loaded with http://?

c++ - 顺序调用 NPN_PluginThreadAsyncCall

javascript - Apache Cordova Visual Studio 2015 iframe