javascript - Firefox Addon Builder 首选项 - 服务对我不起作用 - 为什么?

标签 javascript html firefox firefox-addon firefox-addon-sdk

我正在尝试在 Firefox Add-on Builder 中创建一个按钮来更改搜索栏使用的 URL。为了更改 URL,我有一个面板,可以显示单击按钮的时间,面板中有一系列按钮。

在第二个 .js 文件(不是 main.js)中,我有应该更改 keyword.url 的函数使用 preferences-service 模块的功能。

这是我用来执行此操作的代码:

function changekeywordurl(url) {
    alert('Search Engine Changed');
    require("preferences-service").set('keyword.url', url);
}

面板的 HTML 是:

<button onclick="changekeywordurl('http://search.yahoo.com/search?p=')">Yahoo</button>

抱歉,如果我犯了一个非常愚蠢的错误;这是我的第一次尝试,也是一个附加组件。

最佳答案

您的扩展程序加载的 HTML 页面没有任何特殊权限 - 它们就像常规网页一样。特别是,函数 require() 未在此上下文中定义。您需要做的是将内容脚本加载到面板中,因为内容脚本可以与扩展程序进行通信。该内容脚本可能如下所示:

// Add event listener in the content script, the page cannot "see" content script
// functions
var buttons = document.getElementsByClassName("searchButton");
for (var i = 0; i < buttons.length; i++)
  buttons[i].addEventListener("click", changekeywordurl, false);

// Send a message to the extension if a button is clicked
function changekeywordurl(event)
{
  var button = event.target;
  self.postMessage(button.getAttribute("_keywordURL"));
}

页面中的按钮将如下所示:

<button _keywordURL="http://search.yahoo.com/search?p="></button>

然后您的扩展程序可以监听来自内容脚本的消息并使用必要的 SDK 模块。

关于javascript - Firefox Addon Builder 首选项 - 服务对我不起作用 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306337/

相关文章:

javascript - AngularJS 谷歌地图点击事件不会在 ios 设备 ipad 和 iphone 中触发

来自 w3schools 的 Javascript 可点击下拉菜单不适用于 jsfiddle。为什么?

firefox - Firebug 2.0 与 FF 30 无法设置断点

javascript - 使用 jQuery 使用数组在一个 cookie 中设置/检索多个键/值对

javascript - 我需要使用正则表达式获取正文背景颜色

javascript - 无论如何设置一个变量等于每次访问变量时调用的函数

javascript - 当父级显示 : block; 时,将子级 <div> 在父级 <div> 中垂直居中

javascript - 在 html5 视频播放按钮上添加事件

html - Firefox 缩放机制未按预期工作?

html - Firefox 中的 Padding Left 怪癖