【问题标题】:Get URL of popup window opened from a Chrome Extension获取从 Chrome 扩展程序打开的弹出窗口的 URL
【发布时间】:2016-10-24 11:10:15
【问题描述】:

我有一个 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 信息。

任何帮助将不胜感激。

【问题讨论】:

  • 提示:chrome.tabs.query 和相关事件。
  • @RobW 是的,我对此很熟悉。但是当我使用它时,我得到的是打开扩展程序时打开的选项卡的 URL,而不是由扩展应用程序本身创建的弹出窗口的 URL(并且不驻留在选项卡内)。
  • 我猜你没有尝试用windowId: windowReference.id来调用它?
  • @RobW 太好了,我会试一试。谢谢。

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


【解决方案1】:

所以答案很简单。正如评论中提到的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 参数的值传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2022-08-23
    • 2012-02-17
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多