Javascript chrome扩展和复制中的断言失败

Javascript chrome扩展和复制中的断言失败,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,在background.js中: 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

在background.js中:

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);
            });
          });
        });
}
$(document).ready(function(){
    var port = chrome.runtime.connect({name: "facebook_chanel"});
    port.postMessage({facebook_go: "go"});
    port.onMessage.addListener(function(msg) {

        console.log(msg);

    });

});
{
    "manifest_version": 2,

    "name":    "Test Extension",
    "version": "0.0",
    "offline_enabled": false,

    "background": {
        "persistent": false,
        "scripts": [
            "background.js"
        ]
    },

    "content_scripts": [{
        "matches":    ["*://*.facebook.com/"],
        "js":         ["content.js"],
        "run_at":     "document_end",
        "all_frames": false
    }],

    "permissions": [
        "contextMenus"
    ]
}
chrome.runtime.onMessage.addListener(function(msg) {

    /* Input validation */
    if (!msg.source || !msg.text) {
        console.error('Bad message format: ', msg);
        return;
    }

    /* Handle the selected text */
    switch (msg.source) {
    case 'Amazon':
    case 'Google':
        alert('Selected on ' + msg.source + ':\n' + msg.text);
        break;
    default:
        alert('Unknown source: ' + msg.source);
        break;
    }

});
var contextMenuID = 'copyToFB';
var googleRegex = /^https?:\/\/(?:[^\.]+\.)?google\..+/;
var amazonRegex = /^https?:\/\/(?:[^\.]+\.)?amazon\..+/;

/* `onUpdated` listener factory (for when FB has loaded) */
var listenerFactory = function(trgTabID, msgSrc, selectedText) {
    return function(tabId, info, tab) {
        if ((trgTabID === tabId) && (info.status === 'complete')) {
            chrome.tabs.onUpdated.removeListener(arguments.callee);
            chrome.tabs.sendMessage(trgTabID, {
                source: msgSrc,
                text: selectedText
            });
        }
    }
};

chrome.contextMenus.create({
    type:     'normal',
    id:       contextMenuID,
    title:    'Copy to Facebook',
    contexts: ['selection'],
    // For some reason documentsUrlPatterns 
    // does not seem to work (at least on Windows).
    // Theoratically, you should be able to limit the 
    // context-menu on specific sites only
    //documentUrlPatterns: [
        //'*://*.google.*/*',
        //'*://*.amazon.*/*'
    //],
    enabled:  true
});

chrome.contextMenus.onClicked.addListener(function(info, tab) {
    console.log('Context menu clicked: ', info.menuItemId);
    if (info.menuItemId === contextMenuID) {
        var selectedText = info.selectionText;
        console.log('Selected text: ', selectedText);
        if (!selectedText) {
            alert('Nothing to copy to Facebook !');
            return;
        }

        var url = info.frameUrl ? info.frameUrl : info.pageUrl;
        if (googleRegex.test(url)) {
            console.log('Google.com URL: ', url);

            /* Handle text selected on `google.com` */
            chrome.tabs.create({
                url: 'http://facebook.com/',
                active: true
            }, function(tab) {
                chrome.tabs.onUpdated.addListener(
                        listenerFactory(tab.id, 'Google', selectedText));
            });
        } else if (amazonRegex.test(url)) {
            console.log('Amazon.com URL: ', url);

            /* Handle text selected on `amazon.com` */
            chrome.tabs.create({
                url: 'http://facebook.com/',
                active: true
            }, function(tab) {
                chrome.tabs.onUpdated.addListener(
                        listenerFactory(tab.id, 'Amazon', selectedText));
            });
        } else {
            console.log('Non-matching URL: ', url);
        }
    }
});
在facebook.js中:

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);
            });
          });
        });
}
$(document).ready(function(){
    var port = chrome.runtime.connect({name: "facebook_chanel"});
    port.postMessage({facebook_go: "go"});
    port.onMessage.addListener(function(msg) {

        console.log(msg);

    });

});
{
    "manifest_version": 2,

    "name":    "Test Extension",
    "version": "0.0",
    "offline_enabled": false,

    "background": {
        "persistent": false,
        "scripts": [
            "background.js"
        ]
    },

    "content_scripts": [{
        "matches":    ["*://*.facebook.com/"],
        "js":         ["content.js"],
        "run_at":     "document_end",
        "all_frames": false
    }],

    "permissions": [
        "contextMenus"
    ]
}
chrome.runtime.onMessage.addListener(function(msg) {

    /* Input validation */
    if (!msg.source || !msg.text) {
        console.error('Bad message format: ', msg);
        return;
    }

    /* Handle the selected text */
    switch (msg.source) {
    case 'Amazon':
    case 'Google':
        alert('Selected on ' + msg.source + ':\n' + msg.text);
        break;
    default:
        alert('Unknown source: ' + msg.source);
        break;
    }

});
var contextMenuID = 'copyToFB';
var googleRegex = /^https?:\/\/(?:[^\.]+\.)?google\..+/;
var amazonRegex = /^https?:\/\/(?:[^\.]+\.)?amazon\..+/;

/* `onUpdated` listener factory (for when FB has loaded) */
var listenerFactory = function(trgTabID, msgSrc, selectedText) {
    return function(tabId, info, tab) {
        if ((trgTabID === tabId) && (info.status === 'complete')) {
            chrome.tabs.onUpdated.removeListener(arguments.callee);
            chrome.tabs.sendMessage(trgTabID, {
                source: msgSrc,
                text: selectedText
            });
        }
    }
};

chrome.contextMenus.create({
    type:     'normal',
    id:       contextMenuID,
    title:    'Copy to Facebook',
    contexts: ['selection'],
    // For some reason documentsUrlPatterns 
    // does not seem to work (at least on Windows).
    // Theoratically, you should be able to limit the 
    // context-menu on specific sites only
    //documentUrlPatterns: [
        //'*://*.google.*/*',
        //'*://*.amazon.*/*'
    //],
    enabled:  true
});

chrome.contextMenus.onClicked.addListener(function(info, tab) {
    console.log('Context menu clicked: ', info.menuItemId);
    if (info.menuItemId === contextMenuID) {
        var selectedText = info.selectionText;
        console.log('Selected text: ', selectedText);
        if (!selectedText) {
            alert('Nothing to copy to Facebook !');
            return;
        }

        var url = info.frameUrl ? info.frameUrl : info.pageUrl;
        if (googleRegex.test(url)) {
            console.log('Google.com URL: ', url);

            /* Handle text selected on `google.com` */
            chrome.tabs.create({
                url: 'http://facebook.com/',
                active: true
            }, function(tab) {
                chrome.tabs.onUpdated.addListener(
                        listenerFactory(tab.id, 'Google', selectedText));
            });
        } else if (amazonRegex.test(url)) {
            console.log('Amazon.com URL: ', url);

            /* Handle text selected on `amazon.com` */
            chrome.tabs.create({
                url: 'http://facebook.com/',
                active: true
            }, function(tab) {
                chrome.tabs.onUpdated.addListener(
                        listenerFactory(tab.id, 'Amazon', selectedText));
            });
        } else {
            console.log('Non-matching URL: ', url);
        }
    }
});
我也去谷歌。按下pageAction,我看到facebook的标签,看到控制台中的一个对象。在
html/background.html
console(Chrome)中,我看到错误
断言失败:
In

console.assert(port.name == "facebook_chanel");
我再次进入谷歌,按下页面操作,我在新的facebook页面上看到一个旧的和两个新的对象

如何修复它?谢谢

更新

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

这条路对吗?但我有明确的控制台,有什么问题吗?

仍然不太清楚您想要实现什么,以及为什么选择使用支持端口(而不是单一消息)和页面操作,但据我所知,上下文菜单可能是更好/更干净的方法

因此,下面是一个示例扩展的源代码,该扩展在选择某些文本(即选择/突出显示某些文本并右键单击)时注册上下文菜单,然后打开Facebook选项卡并发送所选文本以供进一步处理(通过FB选项卡的内容脚本)

如果仍然需要页面操作而不是上下文菜单,请按如下方式更改代码:

  • 为chrome.pageAction.onClicked在后台页面中添加监听器
  • 将一些代码插入原始选项卡(例如,
    google.com
    )以检索并返回当前选择(使用
    chrome.tabs.executeScript()
  • 按照下面的代码处理获取的选定文本
  • manifest.json:

    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);
                });
              });
            });
    }
    
    $(document).ready(function(){
        var port = chrome.runtime.connect({name: "facebook_chanel"});
        port.postMessage({facebook_go: "go"});
        port.onMessage.addListener(function(msg) {
    
            console.log(msg);
    
        });
    
    });
    
    {
        "manifest_version": 2,
    
        "name":    "Test Extension",
        "version": "0.0",
        "offline_enabled": false,
    
        "background": {
            "persistent": false,
            "scripts": [
                "background.js"
            ]
        },
    
        "content_scripts": [{
            "matches":    ["*://*.facebook.com/"],
            "js":         ["content.js"],
            "run_at":     "document_end",
            "all_frames": false
        }],
    
        "permissions": [
            "contextMenus"
        ]
    }
    
    chrome.runtime.onMessage.addListener(function(msg) {
    
        /* Input validation */
        if (!msg.source || !msg.text) {
            console.error('Bad message format: ', msg);
            return;
        }
    
        /* Handle the selected text */
        switch (msg.source) {
        case 'Amazon':
        case 'Google':
            alert('Selected on ' + msg.source + ':\n' + msg.text);
            break;
        default:
            alert('Unknown source: ' + msg.source);
            break;
        }
    
    });
    
    var contextMenuID = 'copyToFB';
    var googleRegex = /^https?:\/\/(?:[^\.]+\.)?google\..+/;
    var amazonRegex = /^https?:\/\/(?:[^\.]+\.)?amazon\..+/;
    
    /* `onUpdated` listener factory (for when FB has loaded) */
    var listenerFactory = function(trgTabID, msgSrc, selectedText) {
        return function(tabId, info, tab) {
            if ((trgTabID === tabId) && (info.status === 'complete')) {
                chrome.tabs.onUpdated.removeListener(arguments.callee);
                chrome.tabs.sendMessage(trgTabID, {
                    source: msgSrc,
                    text: selectedText
                });
            }
        }
    };
    
    chrome.contextMenus.create({
        type:     'normal',
        id:       contextMenuID,
        title:    'Copy to Facebook',
        contexts: ['selection'],
        // For some reason documentsUrlPatterns 
        // does not seem to work (at least on Windows).
        // Theoratically, you should be able to limit the 
        // context-menu on specific sites only
        //documentUrlPatterns: [
            //'*://*.google.*/*',
            //'*://*.amazon.*/*'
        //],
        enabled:  true
    });
    
    chrome.contextMenus.onClicked.addListener(function(info, tab) {
        console.log('Context menu clicked: ', info.menuItemId);
        if (info.menuItemId === contextMenuID) {
            var selectedText = info.selectionText;
            console.log('Selected text: ', selectedText);
            if (!selectedText) {
                alert('Nothing to copy to Facebook !');
                return;
            }
    
            var url = info.frameUrl ? info.frameUrl : info.pageUrl;
            if (googleRegex.test(url)) {
                console.log('Google.com URL: ', url);
    
                /* Handle text selected on `google.com` */
                chrome.tabs.create({
                    url: 'http://facebook.com/',
                    active: true
                }, function(tab) {
                    chrome.tabs.onUpdated.addListener(
                            listenerFactory(tab.id, 'Google', selectedText));
                });
            } else if (amazonRegex.test(url)) {
                console.log('Amazon.com URL: ', url);
    
                /* Handle text selected on `amazon.com` */
                chrome.tabs.create({
                    url: 'http://facebook.com/',
                    active: true
                }, function(tab) {
                    chrome.tabs.onUpdated.addListener(
                            listenerFactory(tab.id, 'Amazon', selectedText));
                });
            } else {
                console.log('Non-matching URL: ', url);
            }
        }
    });
    
    content.js:

    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);
                });
              });
            });
    }
    
    $(document).ready(function(){
        var port = chrome.runtime.connect({name: "facebook_chanel"});
        port.postMessage({facebook_go: "go"});
        port.onMessage.addListener(function(msg) {
    
            console.log(msg);
    
        });
    
    });
    
    {
        "manifest_version": 2,
    
        "name":    "Test Extension",
        "version": "0.0",
        "offline_enabled": false,
    
        "background": {
            "persistent": false,
            "scripts": [
                "background.js"
            ]
        },
    
        "content_scripts": [{
            "matches":    ["*://*.facebook.com/"],
            "js":         ["content.js"],
            "run_at":     "document_end",
            "all_frames": false
        }],
    
        "permissions": [
            "contextMenus"
        ]
    }
    
    chrome.runtime.onMessage.addListener(function(msg) {
    
        /* Input validation */
        if (!msg.source || !msg.text) {
            console.error('Bad message format: ', msg);
            return;
        }
    
        /* Handle the selected text */
        switch (msg.source) {
        case 'Amazon':
        case 'Google':
            alert('Selected on ' + msg.source + ':\n' + msg.text);
            break;
        default:
            alert('Unknown source: ' + msg.source);
            break;
        }
    
    });
    
    var contextMenuID = 'copyToFB';
    var googleRegex = /^https?:\/\/(?:[^\.]+\.)?google\..+/;
    var amazonRegex = /^https?:\/\/(?:[^\.]+\.)?amazon\..+/;
    
    /* `onUpdated` listener factory (for when FB has loaded) */
    var listenerFactory = function(trgTabID, msgSrc, selectedText) {
        return function(tabId, info, tab) {
            if ((trgTabID === tabId) && (info.status === 'complete')) {
                chrome.tabs.onUpdated.removeListener(arguments.callee);
                chrome.tabs.sendMessage(trgTabID, {
                    source: msgSrc,
                    text: selectedText
                });
            }
        }
    };
    
    chrome.contextMenus.create({
        type:     'normal',
        id:       contextMenuID,
        title:    'Copy to Facebook',
        contexts: ['selection'],
        // For some reason documentsUrlPatterns 
        // does not seem to work (at least on Windows).
        // Theoratically, you should be able to limit the 
        // context-menu on specific sites only
        //documentUrlPatterns: [
            //'*://*.google.*/*',
            //'*://*.amazon.*/*'
        //],
        enabled:  true
    });
    
    chrome.contextMenus.onClicked.addListener(function(info, tab) {
        console.log('Context menu clicked: ', info.menuItemId);
        if (info.menuItemId === contextMenuID) {
            var selectedText = info.selectionText;
            console.log('Selected text: ', selectedText);
            if (!selectedText) {
                alert('Nothing to copy to Facebook !');
                return;
            }
    
            var url = info.frameUrl ? info.frameUrl : info.pageUrl;
            if (googleRegex.test(url)) {
                console.log('Google.com URL: ', url);
    
                /* Handle text selected on `google.com` */
                chrome.tabs.create({
                    url: 'http://facebook.com/',
                    active: true
                }, function(tab) {
                    chrome.tabs.onUpdated.addListener(
                            listenerFactory(tab.id, 'Google', selectedText));
                });
            } else if (amazonRegex.test(url)) {
                console.log('Amazon.com URL: ', url);
    
                /* Handle text selected on `amazon.com` */
                chrome.tabs.create({
                    url: 'http://facebook.com/',
                    active: true
                }, function(tab) {
                    chrome.tabs.onUpdated.addListener(
                            listenerFactory(tab.id, 'Amazon', selectedText));
                });
            } else {
                console.log('Non-matching URL: ', url);
            }
        }
    });
    
    background.js:

    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);
                });
              });
            });
    }
    
    $(document).ready(function(){
        var port = chrome.runtime.connect({name: "facebook_chanel"});
        port.postMessage({facebook_go: "go"});
        port.onMessage.addListener(function(msg) {
    
            console.log(msg);
    
        });
    
    });
    
    {
        "manifest_version": 2,
    
        "name":    "Test Extension",
        "version": "0.0",
        "offline_enabled": false,
    
        "background": {
            "persistent": false,
            "scripts": [
                "background.js"
            ]
        },
    
        "content_scripts": [{
            "matches":    ["*://*.facebook.com/"],
            "js":         ["content.js"],
            "run_at":     "document_end",
            "all_frames": false
        }],
    
        "permissions": [
            "contextMenus"
        ]
    }
    
    chrome.runtime.onMessage.addListener(function(msg) {
    
        /* Input validation */
        if (!msg.source || !msg.text) {
            console.error('Bad message format: ', msg);
            return;
        }
    
        /* Handle the selected text */
        switch (msg.source) {
        case 'Amazon':
        case 'Google':
            alert('Selected on ' + msg.source + ':\n' + msg.text);
            break;
        default:
            alert('Unknown source: ' + msg.source);
            break;
        }
    
    });
    
    var contextMenuID = 'copyToFB';
    var googleRegex = /^https?:\/\/(?:[^\.]+\.)?google\..+/;
    var amazonRegex = /^https?:\/\/(?:[^\.]+\.)?amazon\..+/;
    
    /* `onUpdated` listener factory (for when FB has loaded) */
    var listenerFactory = function(trgTabID, msgSrc, selectedText) {
        return function(tabId, info, tab) {
            if ((trgTabID === tabId) && (info.status === 'complete')) {
                chrome.tabs.onUpdated.removeListener(arguments.callee);
                chrome.tabs.sendMessage(trgTabID, {
                    source: msgSrc,
                    text: selectedText
                });
            }
        }
    };
    
    chrome.contextMenus.create({
        type:     'normal',
        id:       contextMenuID,
        title:    'Copy to Facebook',
        contexts: ['selection'],
        // For some reason documentsUrlPatterns 
        // does not seem to work (at least on Windows).
        // Theoratically, you should be able to limit the 
        // context-menu on specific sites only
        //documentUrlPatterns: [
            //'*://*.google.*/*',
            //'*://*.amazon.*/*'
        //],
        enabled:  true
    });
    
    chrome.contextMenus.onClicked.addListener(function(info, tab) {
        console.log('Context menu clicked: ', info.menuItemId);
        if (info.menuItemId === contextMenuID) {
            var selectedText = info.selectionText;
            console.log('Selected text: ', selectedText);
            if (!selectedText) {
                alert('Nothing to copy to Facebook !');
                return;
            }
    
            var url = info.frameUrl ? info.frameUrl : info.pageUrl;
            if (googleRegex.test(url)) {
                console.log('Google.com URL: ', url);
    
                /* Handle text selected on `google.com` */
                chrome.tabs.create({
                    url: 'http://facebook.com/',
                    active: true
                }, function(tab) {
                    chrome.tabs.onUpdated.addListener(
                            listenerFactory(tab.id, 'Google', selectedText));
                });
            } else if (amazonRegex.test(url)) {
                console.log('Amazon.com URL: ', url);
    
                /* Handle text selected on `amazon.com` */
                chrome.tabs.create({
                    url: 'http://facebook.com/',
                    active: true
                }, function(tab) {
                    chrome.tabs.onUpdated.addListener(
                            listenerFactory(tab.id, 'Amazon', selectedText));
                });
            } else {
                console.log('Non-matching URL: ', url);
            }
        }
    });
    

    最后说明:

    • 因为
      documentUrlPatterns
      似乎不起作用(至少在Windows上是这样),所以上下文菜单显示在每页上(当您选择一些文本时)。当用户不在某个允许的URL上时,您可以添加额外的侦听器(例如,
      chrome.tabs.onActivated
      等),以删除或禁用上下文菜单

    • 跟踪OpeFB选项卡,而不是每次都创建一个新选项卡,这可能是一个好主意。(或者,您也可以查找已打开的(例如由用户打开的)FB选项卡。)


    为什么不做
    console.log(port.name)
    看看它是否真的是
    facebook\u chanel
    console.log(port.name)
    返回
    facebook\u chanel
    。我在这里使用的代码(长期连接)只是注释
    assert
    语句和tryno错误,但对象重复stayedI听起来您更需要
    chrome.runtime.sendMessage/onMessage
    而不是持久端口,因为您希望每次单击页面操作时它都是一次性通信。对不起,但我不需要任何上下文菜单。在后台,我可以看到我从google.js发送的请求,然后我将它发送到facebook.js,它可以在页面中添加请求。但在facebook.js的控制台上是很清楚的,这很奇怪,我不知道为什么。