未能在background.js:断言在Chrome扩展和重复
function checkForValidUrl(tabId, changeInfo, tab) {
if(changeInfo.status === "loading") {
if (tab.url.indexOf('google.com') > -1 || tab.url.indexOf('amazon.com') > -1) {
chrome.pageAction.show(tabId);
}
}
};
chrome.tabs.onUpdated.addListener(checkForValidUrl);
chrome.pageAction.onClicked.addListener(function(tab){
if (tab.url.indexOf('google.com') > -1){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tab.id, {google_go: "go"});
});
chrome.tabs.create({url: "http://facebook.com", "active":true});
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
chrome.runtime.onConnect.addListener(function(port) {
console.assert(port.name == "facebook_chanel");
port.onMessage.addListener(function(msg) {
if (msg.facebook_go == "go")
port.postMessage(request);
});
});
});
}
在facebook.js:
$(document).ready(function(){
var port = chrome.runtime.connect({name: "facebook_chanel"});
port.postMessage({facebook_go: "go"});
port.onMessage.addListener(function(msg) {
console.log(msg);
});
});
我去得谷歌。按pageAction,我看到标签与脸书,看到一个对象在控制台。在html/background.html
控制台(铬)我看到的错误Assertion failed:
在
console.assert(port.name == "facebook_chanel");
我再次去谷歌,按pageAction,我在新的Facebook页面一个老看和2个新的对象。
如何解决?谢谢。
UPDATE
在background.js
chrome.tabs.create({url: "http://facebook.com", "active":true}, function(tab){
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
chrome.tabs.query({active: true, currentWindow: true}, function(tab) {
chrome.tabs.sendMessage(tab[0].id, request);
});
});
});
在facebook.js:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(request);
});
它的正确方法吗?但我有明确的控制台,最新的错误?
你为什么不用'console.log(port.name)'来看它是否真的是'facebook_chanel '? – thefourtheye
'console.log(port.name)'返回'facebook_chanel'。我使用这里的代码http://developer.chrome.com/extensions/messaging.html(长期连接) – tim
只是评论说'assert'声明并尝试 – thefourtheye