0

我有一个带有按钮的插件,可以打开一个带有几个按钮的面板。当一个按钮被按下时,它应该改变keyword.URL偏好,但事实并非如此。

这是main.js:

data = require("self").data

var panel = require("panel").Panel({
  height: 135,
  width: 260,
  contentURL: data.url("popup.html"),
  contentScriptFile: data.url("clicklisten.js"),
  onMessage: function(contentScriptMessage) {
    require("preferences-service").set('keyword.URL', contentScriptMessage);
  }
  //I think the problem is right there, but i have no idea why.
});

var button = require("widget").Widget({
  id: "search-engine-button",
  label: "Set search engine",
  contentURL: data.url("Refresh.ico"),
  panel: panel
});

这是 HTML 按钮的示例:

<button class="searchButton" id="addons" _keywordURL="https://addons.mozilla.org/en-US/firefox/search/?q=">Add-ons</button>

这是 clicklisten.js(内容脚本):

// Add event listener
var buttons = document.getElementByClassName("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"));
}

我觉得我已经尝试了我能想到的一切,但我无法让它发挥作用。

4

1 回答 1

1

在扩展程序中搜索错误时,检查错误控制台通常是一个很好的第一步。如果您按 Ctrl-Shift-J 打开它,您应该会看到:

Error: An exception occurred.
Traceback (most recent call last):
  File "resource://.../clicklisten.js", line 2, in 
    var buttons = document.getElementByClassName("searchButton");
TypeError: document.getElementByClassName is not a function

那是因为该函数被调用getElementsByClassName(因为s缺少)。如果您更改为正确的名称,一切都会正常工作。

PS:我认为您从我对上一个问题的回答中复制了该错误(我没有在那里测试代码)。但是看看https://stackoverflow.com/a/10309914/785541 - 似乎你没有,我的代码没有这个错误:)

于 2012-04-28T20:31:04.203 回答