2012-04-24 7 views
0

Firefoxアドオンビルダで、検索バーが使用するURLを変更するボタンを作成しようとしています。 URLを変更するには、ボタンがクリックされたことを示すパネルがあり、パネル内には一連のボタンがあります。第.jsファイル(ないmain.js)においてFirefox Addon Builderの設定 - サービスが私のために機能しません - なぜですか?

Iはpreferences-serviceモジュールを使用してkeyword.url機能を変更することになっている機能を有します。ここで

は、私がこれを行うに使用していたコードです:

function changekeywordurl(url) { 
    alert('Search Engine Changed'); 
    require("preferences-service").set('keyword.url', url); 
} 

を、パネルのためのHTMLは次のとおりです。

<button onclick="changekeywordurl('http://search.yahoo.com/search?p=')">Yahoo</button> 

申し訳ありませんが、私は本当にばかな間違いを犯していた場合。これは私の最初の試みとアドオンです。

答えて

2

拡張機能によって読み込まれるHTMLページには特別な特権はありません。通常のウェブページと同じです。特に、この文脈では、関数require()は定義されていません。あなたがしなければならないことは、コンテンツスクリプトが拡張機能に戻って通信できるので、パネルにコンテンツスクリプトをロードすることです。このコンテンツスクリプトは次のようになります。

// Add event listener in the content script, the page cannot "see" content script 
// functions 
var buttons = document.getElementsByClassName("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")); 
} 

とページ内のボタンは次のようになります。

<button _keywordURL="http://search.yahoo.com/search?p="></button> 

次に、あなたの拡張機能は、コンテンツスクリプトからのメッセージに耳を傾け、必要なSDKモジュールを使用することができます。

+0

これがどこに行き、どのように実装するのか混乱しています。このスクリプト(ファイル内)はどこに置くのですか?また、私が質問で言及した他のスクリプトとは何をしていますか? また、 'preferences-service'モジュールが表示されないので、' keyword.url'プリファレンスをどのように変更する必要がありますか?助けてくれてありがとう。 – Ian

+0

このコードはページに添付されたコンテンツスクリプトにあり、通常はpage-modを経由します。コンテンツスクリプトの詳細については、ドキュメントをご覧ください:https://addons.mozilla.org/en-US/developers/docs/sdk/1.6/dev-guide/guides/content-scripts/index.html – canuckistani

+0

ありがとうしかし、それでも助けにはならない。上記のスクリプトをmain.jsファイルに置くか、それをHTMLファイルに埋め込みますか?そして、 'keyword.url'を変更するための関数はどこに置いていますか?これは私にとって非常に混乱しています。 – Ian

関連する問題