Firefox插件构建器 - 无法使内容脚本生效

时间:2012-04-27 16:24:15

标签: javascript firefox firefox-addon add-on firefox-addon-sdk

我有一个带有按钮的插件,可以打开一个带有几个按钮的面板。按下按钮时,假设更改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"));
}

我觉得我已经尝试了所有我能想到的东西,但我无法让它发挥作用。

1 个答案:

答案 0 :(得分: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 - 似乎你没有,我的代码没有这个错误:)