每当更新选项卡时,我都想执行内容脚本功能。问题是,有时选项卡更新是ajax(不重新加载页面),同时仍然更改页面的url。因此,注入(inject)的旧内容脚本仍然存在于页面上。结果是在同一页面上插入并运行了内容脚本的多个实例。

因此,我正在寻找一种注入(inject)内容脚本的机制,前提是之前没有注入(inject)过相同的内容脚本。有任何想法吗?

最佳答案

您可以尝试将消息发送到内容脚本(Message Passing)。如果内容脚本成功返回响应,则表示内容脚本已经存在,否则返回空响应,您可以检查是否有空响应并注入(inject)内容脚本。

背景:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
        if (response) {
            console.log("Already there");
        }
        else {
            console.log("Not there, inject contentscript");
        }
    });
});

ContentScript:
chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.greeting == "hello")
            sendResponse({message: "hi"});
 });

10-04 14:43