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 に答える