我有一个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信息。
任何帮助都将不胜感激。
答案 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
参数的值传递。