0

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

对不起,如果我犯了一个非常愚蠢的错误;这是我的第一次尝试和附加组件。

4

1 回答 1

2

您的扩展加载的 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 模块。

于 2012-04-25T05:39:23.860 回答