2012-04-27 19 views
0

我有一個插件,帶有一個按鈕,可以打開一個帶有幾個按鈕的面板。當一個按鈕被按下時,它是假定來更改keyword.URL首選項,但它不是。Firefox插件生成器 - 無法獲取內容腳本的工作

這裏是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

在搜索擴展中的錯誤時,檢查錯誤控制檯通常是一個很好的第一步。如果按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 - 它似乎你沒有,我的代碼沒有這個錯誤:)

+0

謝謝!我一定弄錯了一些......更奇怪了。 – Ian 2012-04-29 19:15:02

相關問題