2016-07-08 5 views
1
/* My Background */ 
console.log("Init BackGround ! "); 
chrome.runtime.onMessageExternal.addListener(
    (request, sender, sendResponse) => { 
     console.log("J'ai bien reçu un truc"); 
     console.log(request); 
     console.log(sender); 
    } 
); 
    // Inject script 
chrome.webNavigation.onCompleted.addListener((details) => { 
    chrome.tabs.executeScript(details.tabId, { 
     file: "include/ts/injectScript.js", 
     runAt: "document_end" 
    }); 
}, {url: [{urlPrefix: "https://website.com"}]}); 
console.log("End Background init"); 

/* My injected script */ 
    var extensionID = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    chrome.runtime.sendMessage(extensionID, {test : 123},(response) => { 
     console.log(response); 
    }); 

/* One part of my manifest.json (with good url) */ 
"externally_connectable": { 
    "matches": [ 
     "*://*.exemple.com/tests/*" 
    ] 
}, 
"permissions": [..., "*://*.exemple.com/tests/*",...] 

バックグラウンドは、ページ読み込み時に自動的にJSスクリプトを挿入します。Chromeのメッセージ拡張子:挿入されたスクリプトから背景へ

コンソール(現在のページ)で実行されたすべてのテストが機能し、バックグラウンドがメッセージを受信して​​います。

残念ながら、背景はページをロードするスクリプトをよく注入しますが、メッセージは受信されません。

私の英語のため申し訳ありません

、 は、あなたの答えのために事前にありがとうござい

ジェレミー-F

+0

自分の内線内で通信する場合は、 'extensionID'と' externally_connectable'は必要ありません。質問に関連する詳細がないか、コードが不必要に複雑すぎるかのいずれかです。 – wOxxOm

+0

@wOxxOm私の実験では、Webページのコンテキストにスクリプトを直接注入し、その挿入されたスクリプトからメッセージを送信しようとすると、sendMessageの呼び出しが拡張機能のコンテキストになくなったため、extensionIdを指定するというエラーが発生しました。 –

答えて

1

独自のコンテンツのスクリプトからメッセージを受信するchrome.runtime.onMessage.addListenerの代わりchrome.runtime.onMessageExternal.addListenerを使用する必要があります。

chrome.runtime.onMessageExternalは、他の内線番号/アプリからのメッセージです。

+0

ありがとう!それは働いている! コンソールは外部アプリケーションと見なされますか? –

+0

コンソールにはコンテキストスイッチャーのドロップダウンがあり、内部コンテキストと外部コンテキストの両方を使用できます。外部コンテキストは、他のすべての拡張とサイトページです。 – wOxxOm

関連する問題