如何将对打开的弹出窗口的引用从内容脚本传递到chrome扩展



在我的web应用程序中,我需要通过let popup = window.open(url, 'MyPopupName' ..)打开一个弹出窗口,然后以某种方式在chrome扩展中获得对该窗口/选项卡的引用。

我不能在弹出窗口中使用任何脚本,因为url来自另一个来源。而且似乎没有简单的方法可以通过指定的"MyPopupName"名称查询chrome扩展中的所有选项卡(除了将脚本注入所有选项卡并通过消息传递获取window.name(。

有没有一种简单的方法可以将popup传递给扩展并获得弹出窗口的tabId?

由于扩展受到相同的跨源JS限制,请使用chrome.windows.create而不是window.open.

async function openPopup(url) {
const wnd = await chrome.windows.create({
url, type: 'popup', width: 500, height: 500,
});
const tabId = wnd.tabs[0].id;
console.log(tabId, wnd);
}

它仅在扩展页面/框架中可用,例如action弹出窗口、选项、背景脚本。这意味着它不能在内容脚本中使用,但您可以发送带有URL的消息,并让后台脚本在其onMessage中打开它。

请注意,wnd与JavaScriptwindow对象无关,这是一个完全不同的东西,因此您无法访问新窗口的全局。

最新更新