【问题标题】:Passing tab id in 'chrome.tabs.executeScript()'在 'chrome.tabs.executeScript()' 中传递选项卡 ID
【发布时间】:2019-10-18 06:20:18
【问题描述】:

我有一个 chrome 扩展,它是一个弹出窗口。 它有一个背景脚本。在这个脚本文件中,我试图插入一个代码以在所有打开的选项卡中执行。

这就是我的做法。

for (var i = 0; i < tablist.length; ++i) {                
            chrome.tabs.executeScript(tablist[i].id, { file: "js/fuse.min.js"}, function (result) {
                chrome.tabs.executeScript(<i want to get tab id here>, { code: code });                
            });
        }

我已经嵌套了“executeScript()”,因为我需要包含一个外部文件。

由于内部函数是回调,所以它是异步的,我不会从父函数中获取标签ID。

如何让 tabid 在嵌套函数中传递? “结果”论点没有它。

【问题讨论】:

  • 使用let 而不是var,这样您就可以简单地重复tablist[i].id。更多信息:JavaScript closure inside loops – simple practical example
  • 你能把id作为第二个参数传递给回调吗?
  • @wOxxOm 我试过了。但它说'我'没有定义。我认为这个解决方案只有在它是一个正常功能时才有效。我的情况不同。这是一个回调函数。
  • @Nuhman 不。它没有用。如果您能提供解决方案,我将不胜感激。
  • @AnilPBabu, let 必须工作,它是标准的 JavaScript,在这种情况下回调没有什么特别之处,所以你一定在某个地方犯了错误。也许你在循环之后改变了tablist,或者别的什么。

标签: javascript google-chrome-extension callback


【解决方案1】:

试试这个 javascript 关闭技巧:

for (var i = 0; i < tablist.length; ++i) { 
   (function(i) {
        chrome.tabs.executeScript(tablist[i].id, { file: "js/fuse.min.js"}, function (result) {
            chrome.tabs.executeScript(<i want to get tab id here>, { code: code });                
        });
     })(i);             
}

【讨论】:

  • 非常感谢您的解决方案!它解决了我的问题。对于正在查看代码的人,要按照 OP 的需要访问最里面的 executeScript 函数中的选项卡 ID,可以将最里面的行重写为:chrome.tabs.executeScript(tablist[i].id, { code: code });
猜你喜欢
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 2016-05-11
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多