Конструктор надстроек Firefox - не удается заставить работать скрипт содержимого

У меня есть аддон с кнопкой, которая открывает панель с парой кнопок. При нажатии кнопки должен измениться параметр 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"));
}

Я чувствую, что перепробовал все, что мог придумать, но не могу заставить это работать.


person Ian    schedule 27.04.2012    source источник


Ответы (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 - кажется, что вы этого не сделали, мой код не имеет этой ошибки :)

person Wladimir Palant    schedule 28.04.2012
comment
Спасибо! Должно быть, я как-то все испортил... странно. - person Ian; 29.04.2012