获取从Chrome扩展程序打开的弹出窗口的URL

时间:2016-06-22 13:16:13

标签: javascript google-chrome google-chrome-extension

我有一个Chrome扩展程序,可以创建一个用户需要用于登录系统的弹出窗口。您单击扩展图标,它将打开其应用程序(在我的情况下为AngularJS)。然后,用户单击一个调用chrome.windows.create()的按钮以打开弹出窗口。

我希望主扩展程序应用程序监视该弹出窗口的URL以进行更改。

我以这种方式从扩展名创建弹出窗口:

chrome.windows.create(
    {
      url: 'https://some.external.url.com/whatever',
      type: 'panel',
      width: 600,
      height: 600
    },
    function (windowReference) {
      console.log('My Window:', windowReference);
      // start monitoring URL of windowReference somehow
      // could be as simple as a setInterval() loop
    }
)

问题是传递给回调的windowReference对象没有弹出窗口的当前URL。由于用户可以在弹出窗口中与页面进行交互(我将其指向OAuth2系统),因此URL有时会发生变化。我希望看到这一点 - 要么主动进行更改,要么只是定期查询当前URL。

这是windowReference对象包含的内容:

{
    alwaysOnTop:false,
    focused:false,
    height:600,
    id:1089,
    incognito:false,
    left:61,
    state:"normal",
    top:23,
    type:"popup",
    width:600
}

你可以看到那里有一个ID,对我来说,建议我可以使用它来调用其他方法来获取我之后的真实URL信息。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以答案结果非常简单。正如评论中提到的Rob W一样,您可以使用chrome.tabs.query()方法进行搜索,就像使用任何其他标签一样。

我缺少的部分是你可以使用创建弹出窗口时获得的窗口参考中的id来从标签查询中获得所需的结果:

chrome.tabs.query(
    { windowId: windowReference.id }, 
    function callback(tabs) {
        var popup = tabs[0];
        $log.debug("Popup URL:", popup.url);
    }
);

您可以看到我将ID作为搜索查询对象中windowId参数的值传递。