2016-03-31 23 views
0

İki farklı içerik komut dosyası kullanıyorum bir Chrome uzantısı geliştiriyorum. Biri ana sayfada, diğeri ise bir iframe içine yüklenen harici bir sayfada (kontrol ettiğim) yüklenir. İki betiğin birbiriyle her iki yönde iletişim kurması gerekiyor, bu yüzden Messaging API'sini uygulamaya çalışıyorum.Chrome uzantısı birden çok bağlantı noktası Bağlantı Ayrılma Hatası hatası veriyor

Anladığım kadarıyla, her sayfanın background.js ile iletişim kurması en iyisidir. Benim yapmaya çalıştığım şey bu. Şu anda sadece mesajların gelip gelmediğini görmeye çalışıyorum. Ama alıyorum hatadır:

Error: Attempting to use a disconnected port object 

O "page_post.postMessage (msg)" bahsediyor background.js içinde. Sorun, birden çok bağlantı noktası kullanmam olabilir mi?

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) 
    }); 
}); 

cevap

0

Sizin background pageruntime.onConnect dinleyici kez kayıt ve port.name farklı port ayırt edilmelidir.

background.js

chrome.runtime.onConnect.addListener(function(port) { 
    if(port.name === "menuport") { 
    // menu port logic 
    } else if (port.name === "pageport") { 
    // page port logic 
    } 
}); 
+0

Bu durumda, "menuport" kanalından bir şey geldiğinde "pageport" kanalına nasıl bir mesaj gönderirim. Örneğin. menuport 100 sayısını döndürür ve bunu pageport'a göndermek istiyorum. – Vincent

+0

Menülerden birini aldıktan sonra pageport kanalına bir mesaj göndermeye çalışırsam hala aynı hatayı alıyorum. bunu nasıl çözeceğimize dair bir fikri olan? – Vincent

İlgili konular