在Chrome扩展中的派生窗口上运行Javascript

在Chrome扩展中的派生窗口上运行Javascript,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在构建一个Chrome扩展,其中一个行为是生成一个具有指定大小和位置的弹出窗口: url = "https://google.com" chrome.windows.create( { 'url': url, 'type': 'popup', 'width': Math.floor(screen.availWidth / 2), 'height': Math.floor(screen.availHeight / 2), 'left':

我正在构建一个Chrome扩展,其中一个行为是生成一个具有指定大小和位置的弹出窗口:

url = "https://google.com"
chrome.windows.create(
  {
    'url':    url,
    'type':   'popup',
    'width':  Math.floor(screen.availWidth  / 2),
    'height': Math.floor(screen.availHeight / 2),
    'left':   Math.floor(screen.availWidth  / 2),
    'top':    0
  },
  function(window) {}
);
此时,我需要在生成的页面上运行一些Javascript。我知道我可以在清单中声明一个与
url
匹配的内容脚本,但是url实际上是动态的,几乎可以是任何内容

因此,我现在最好的猜测是添加一个带有matcher
https://*/*
的内容脚本,并通过一些其他方法确定这是扩展生成的页面-通过添加一些查询参数,或通过扩展消息传递系统

不过,这种方法似乎有点老套。有人知道更“合适”的方法吗

在回调内部使用:

chrome.windows.create({ /*params*/ }, w => {
  chrome.tabs.executeScript(w.tabs[0].id, {file: 'content.js'});
});
注:

  • 站点或
    ”不是JavaScript
    窗口,因此最好使用不同的名称
在回调内部使用:

chrome.windows.create({ /*params*/ }, w => {
  chrome.tabs.executeScript(w.tabs[0].id, {file: 'content.js'});
});
注:

  • 站点或
    ”不是JavaScript
    窗口,因此最好使用不同的名称

太棒了。可能值得指出的是,文件的路径必须相对于chrome扩展名的根。谢谢如果你不介意的话,再问一个问题。我注意到,当我刷新生成的页面时,我的脚本不再附加(我想这是有道理的)。有没有办法在localStorage中存储对此页面/选项卡的引用?然后我可以制作一个内容脚本来匹配
https://*/*
,页面可以“查找自身”,以确定是否应该注入“启动页面”脚本。不确定是否有更好的方法来处理它。你可以在后台脚本中为选项卡更新添加一个侦听器,并再次执行脚本。它的选项卡id相同。有关更多信息,请在需要时打开一个新问题。哦,我明白了,因此选项卡id是全局的,我也不需要“窗口id”。谢谢,太棒了。可能值得指出的是,文件的路径必须相对于chrome扩展名的根。谢谢如果你不介意的话,再问一个问题。我注意到,当我刷新生成的页面时,我的脚本不再附加(我想这是有道理的)。有没有办法在localStorage中存储对此页面/选项卡的引用?然后我可以制作一个内容脚本来匹配
https://*/*
,页面可以“查找自身”,以确定是否应该注入“启动页面”脚本。不确定是否有更好的方法来处理它。你可以在后台脚本中为选项卡更新添加一个侦听器,并再次执行脚本。它的选项卡id相同。有关更多信息,请在需要时打开一个新问题。哦,我明白了,因此选项卡id是全局的,我也不需要“窗口id”。谢谢