2つの異なるコンテンツスクリプトを使用しているChrome拡張機能を開発しています。 1つはメインページに読み込まれ、もう1つはiframeに読み込まれた外部ページ(私が制御する)に読み込まれます。 2つのスクリプトは両方向で互いに通信する必要があるため、Messaging APIを実装しようとしています。Chrome拡張機能複数のポートでDisconnected Portエラーが発生する
私が理解する限り、各ページをbackground.jsと通信させるのが最善です。私はこれを実装しようとしています。現在、私はメッセージが到着しているかどうかを確認しようとしています。しかし、私は取得していますエラーがある:それはbackground.jsに "page_post.postMessage(MSG)" を参照している
Error: Attempting to use a disconnected port object
。問題は複数のポートを使用していることでしょうか?
menu.js
var port = chrome.runtime.connect({name: "menuport"});
port.postMessage({source: "menu", status: "ready", id: menu_id});
port.onMessage.addListener(function(msg) {
console.log('MenuJS')
console.log(msg)
});
page.js
var page_port = chrome.runtime.connect({name: "pageport"});
page_port.postMessage({source: "page", status: "ready"});
page_port.onMessage.addListener(function(msg) {
console.log('PageJS')
console.log(msg)
});
background.js
var menu_port = chrome.runtime.connect({name: "menuport"});
var page_port = chrome.runtime.connect({name: "pageport"});
chrome.runtime.onConnect.addListener(function(menu_port) {
menu_port.onMessage.addListener(function(msg) {
console.log('BGJS')
console.log(msg)
page_port.postMessage(msg);
});
});
chrome.runtime.onConnect.addListener(function(page_port) {
page_port.onMessage.addListener(function(msg) {
console.log(msg)
});
});
「menuport」チャンネルから何かが来た場合、この場合どのように「pageport」チャンネルにメッセージを送信しますか?例えば。 menuportが100を返し、これをページポートに送信したいと思います。 – Vincent
menuportでメッセージを受け取った後でも、ページポートチャネルにメッセージを投稿しようとすると、同じエラーが発生します。どのようにこれを解決するための任意のアイデア? – Vincent