Google chrome 如何获取已注入脚本的选项卡?

Google chrome 如何获取已注入脚本的选项卡?,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,在我的Google Chrome扩展页面中,我有一个内容脚本,当特定URL匹配时,它会注入一个脚本 我正在尝试获取一些关于它被注入的选项卡的信息,以便在选项卡关闭时可以进行一些清理 为此,我尝试从注入的脚本中调用chrome.tabs.getCurrent()。但是,它返回undefined,这很奇怪,因为在 如果从非制表符上下文调用,则可能未定义(例如:a 背景页面或弹出视图) 我在账单里打电话给它 我哪里出错了?在您的实际内容脚本中,请背景页面为您提供选项卡id content.js va

在我的Google Chrome扩展页面中,我有一个内容脚本,当特定URL匹配时,它会注入一个脚本

我正在尝试获取一些关于它被注入的选项卡的信息,以便在选项卡关闭时可以进行一些清理

为此,我尝试从注入的脚本中调用
chrome.tabs.getCurrent()
。但是,它返回
undefined
,这很奇怪,因为在

如果从非制表符上下文调用,则可能未定义(例如:a 背景页面或弹出视图)

我在账单里打电话给它


我哪里出错了?

在您的实际内容脚本中,请背景页面为您提供选项卡id

  • content.js

    var tabId;//全球,但网页不可见,因为它位于一个“孤立的世界”
    chrome.runtime.sendMessage('get-tabId',函数(响应){
    tabId=响应;
    //插入页面脚本并传递tabId
    document.head.appendChild(document.createElement('script')).text='('+
    函数(tabId){
    tabId=tabId | 0;//强制为数字
    log('注入的代码得到了tabId:',tabId);
    }+)(“+tabId+”);
    });
    
  • background.js

    chrome.runtime.onMessage.addListener(函数(msg、sender、sendResponse){
    如果(msg=='get tabId'){
    sendResponse(sender.tab.id);
    }
    });
    

在实际内容脚本中,要求背景页面为您提供选项卡id

  • content.js

    var tabId;//全球,但网页不可见,因为它位于一个“孤立的世界”
    chrome.runtime.sendMessage('get-tabId',函数(响应){
    tabId=响应;
    //插入页面脚本并传递tabId
    document.head.appendChild(document.createElement('script')).text='('+
    函数(tabId){
    tabId=tabId | 0;//强制为数字
    log('注入的代码得到了tabId:',tabId);
    }+)(“+tabId+”);
    });
    
  • background.js

    chrome.runtime.onMessage.addListener(函数(msg、sender、sendResponse){
    如果(msg=='get tabId'){
    sendResponse(sender.tab.id);
    }
    });
    

注入脚本的内容脚本
-它意味着
元素,对吗?这意味着它不再是一个内容脚本,而只是一个无法访问chrome.*API的页面脚本。请参阅第节。它可以访问
chrome.runtime
API-我正在注入的脚本中使用它。另外,如果它没有访问
chrome.tabs
的权限,我不会看到一个错误吗?只有
chrome.runtime.sendMessage
并且只有当站点url在中被列为白名单时它才会工作。@wOxxOm好的,是的,这是真的。也许我当时做得不对。我所要做的就是在关闭带有注入脚本的选项卡时执行一些清理。有什么建议吗?一个明显的方法是在后台脚本中使用。
注入脚本的内容脚本
-它意味着一个
元素,对吗?这意味着它不再是一个内容脚本,而只是一个无法访问chrome.*API的页面脚本。请参阅第节。它可以访问
chrome.runtime
API-我正在注入的脚本中使用它。另外,如果它没有访问
chrome.tabs
的权限,我不会看到一个错误吗?只有
chrome.runtime.sendMessage
并且只有当站点url在中被列为白名单时它才会工作。@wOxxOm好的,是的,这是真的。也许我当时做得不对。我所要做的就是在关闭带有注入脚本的选项卡时执行一些清理。有什么建议吗?一个明显的方法是在背景脚本中使用。