0

スタック オーバーフローの善良な人々のおかげで、Chrome 拡張機能からネイティブ (C++) アプリにメッセージを送信することができました。ネイティブ ホスト アプリがメッセージを受信すると、任意の応答データを返すことができます。ただし、これはネイティブ アプリが拡張機能からデータを受信することへの応答です。また、拡張機能によって送信されるメッセージは同期的ではないため、拡張機能はホスト アプリからの応答を待ちません。

私の要件は、ネイティブ アプリから通信接続を開始することです。つまり、ネイティブ アプリは定期的に Chrome 拡張機能に更新を送信します。ネイティブ アプリからメッセージの送信を開始し、それを適切な Chrome 拡張機能に渡すメカニズムはありますか?

私は基本的に次のことを達成したいと考えています: webRequest.OnBeforeSendHeaders のようなイベントにメッセージを投稿し、メッセージへの応答で、URL 要求をブロックする必要があるかどうかを判断したいと考えています。応答の受信がコールバックで行われる場合、これはほとんどが別のスレッドで行われるため、webRequest.OnBeforeSendHeaders スレッドで応答を待つことができません。ネイティブ アプリがリクエストに応答するのを待っている間に、webRequest.OnBeforeSendHeaders を一時停止する方法はありますか? または、webRequest.OnBeforeSendHeaders はメッセージ バッファーを (ループで) 覗いて、ネイティブ アプリが応答したかどうかを確認できますか?

または、これを達成する別の方法はありますか?

4

2 に答える 2

1

クロムには同期的なものはありません。これが、Chrome がフリーズしにくい理由の 1 つです。しかし、それは問題ではありません。非同期コードでも簡単に目的を達成できます。これは、従わなければならないもう 1 つのパターンです。

ネイティブ アプリの使用方法に関する説明は、https ://developer.chrome.com/extensions/messaging#native-messaging にあります。たとえばstdio、型パラメータに渡すことができると記載されています。その後、アプリにデータを送信するたびに、Chrome はstdin. stdout(C++ の場合: print it through )を使用してメッセージを送り返すことができます (つまり、何かに応答するためcout)。ネイティブ アプリでは、ネイティブ アプリが実際に Chrome ネイティブ アプリであることを知る必要はありません。stdinからデータを受信し、 を介してデータを送信することを知る必要があるだけstdoutです。

于 2014-09-09T15:56:45.040 に答える