我正在尝试在 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/