我有一个带有按钮的插件,可以打开一个带有几个按钮的面板。按下按钮时,假设更改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"));
}
我觉得我已经尝试了所有我能想到的东西,但我无法让它发挥作用。
答案 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
缺失)。如果更改为正确的名称,一切都将正常工作。