Google chrome 如何获取已注入脚本的选项卡?
在我的Google Chrome扩展页面中,我有一个内容脚本,当特定URL匹配时,它会注入一个脚本 我正在尝试获取一些关于它被注入的选项卡的信息,以便在选项卡关闭时可以进行一些清理 为此,我尝试从注入的脚本中调用Google chrome 如何获取已注入脚本的选项卡?,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,在我的Google Chrome扩展页面中,我有一个内容脚本,当特定URL匹配时,它会注入一个脚本 我正在尝试获取一些关于它被注入的选项卡的信息,以便在选项卡关闭时可以进行一些清理 为此,我尝试从注入的脚本中调用chrome.tabs.getCurrent()。但是,它返回undefined,这很奇怪,因为在 如果从非制表符上下文调用,则可能未定义(例如:a 背景页面或弹出视图) 我在账单里打电话给它 我哪里出错了?在您的实际内容脚本中,请背景页面为您提供选项卡id content.js va
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); } });
- 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好的,是的,这是真的。也许我当时做得不对。我所要做的就是在关闭带有注入脚本的选项卡时执行一些清理。有什么建议吗?一个明显的方法是在背景脚本中使用。