2011-02-07 14 views
1

私はクロムエクステンションを構築していて、Twitterからデータを取得しようとしていて、それを私のcontentscriptに渡しています。私はこれに多くの問題を抱えています。リモートサイトからデータを取得することはできますが、コンテンツスクリプトに渡すことはできません。 chrome.extension.onclick.addlistener(functionname);を使用してアイコンをクリックしたときのリスナーがあります。これはデータを取得します。問題は一度私はデータを取得した、私は私のコンテンツスクリプトからの要求に応答を送信する必要があります。だから私はchrome.extension.Onrequest.addlistener(functioname);と呼んでいます。コードの何が間違っているかを調べる前に、同じページで2つの別々のイベントの2つのリスナーを持つことができますか?それとも1つのリスナーしか持てませんか?クロムエクステンションの背景ページに複数のリスナーがありますか?

+0

私はあなたはそれがあなたの質問をするためにあなたを取った同じ時間については自分でこれをで試すことができ想像します。 –

+2

私がテストし、私は私のコードに問題があるか、コードが細かいとあれば、それがダウンして、このルールにされているかどうかをすることができませんでしだ。あなたがもっと役に立つ応答を持っていれば、私はそれを感謝します。 – JMunch

+0

いくつかのコードを共有してもよろしいですか?そうすれば、他の人があなたのコードで考えられる問題を探すことができます。 –

答えて

0

あなたはStackOverflowの上の迅速な検索を行う場合は、コンテンツのスクリプトに背景ページからメッセージを送信する方法についてのコードを使用して多くの例が表示されます。これを行う方法の詳細については https://stackoverflow.com/search?tab=relevance&q=content%20script%20background%20page

を、あなたは従うことができます

content_script.cs

0123:ドキュメント(コピーペースト)から http://code.google.com/chrome/extensions/messaging.html

:ドキュメント自身、彼らは偉大な例を持っています

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
if (request.greeting == "hello") 
    sendResponse({farewell: "goodbye"}); 
else 
    sendResponse({}); // snub them. 
}); 

background.html

chrome.tabs.getSelected(null, function(tab) { 
    chrome.tabs.sendRequest(tab.id, {greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
    }); 
}); 
0

あなたはonRequestイベントのonClickイベントとリスナーのリスナーを作成しているという事実は問題ではありません。背景ページのためにコンソールでchrome.onClickとchrome.OnRequestと打ち込むことで知ることができます。それぞれが 'chrome.Event'型のインスタンスであることがわかります。

これについて考えると、リスナーを1つしか作成できなかった場合、{onrequest、onclick、ontabchange、onconnect、ondisconnectなどのいずれかにしか応答できないので、何か役に立つものを書く能力が大幅に低下します。 }

1

これはクレイジーな古い質問ですが、関連する問題が発生している間にこの問題を遭遇し、他の誰かにとって有用だった場合に分かち合いたいと思っていました。

複数のリスナーがある場合は、sendResponseメソッドを呼び出す回数が最大で1回であることを確認してください。ドキュメントから:

sendResponse:応答があったときに呼び出す関数(多くとも1回)。 引数は任意のJSON対応オブジェクトでなければなりません。同じドキュメント内の1つのonMessageリスナーが 以上ある場合は、1つのみが 応答を送信することがあります。あなたが を示すために、イベントリスナーからtrueを返す場合を除き、イベントリスナー 戻ると、あなたが非同期的に応答を送信したい場合は、この関数は、(sendResponseが呼び出されるまで、これはもう一方の端に開いているメッセージ チャネルを維持します)は無効となります。

関連する問題