gpt4 book ai didi

javascript - 检查窗口是否已从非父窗口打开(chrome 扩展)

转载 作者:行者123 更新时间:2023-11-28 15:12:04 25 4
gpt4 key购买 nike

我正在制作一个 Chrome 扩展程序。单击 popup.html 中的按钮打开一个新窗口并加载 feedback-panel.html

这可行,但是在单击时,我想检查窗口是否已经打开,如果是,则将焦点放在它而不是创建一个新窗口。

JavaScript window.open only if the window does not already exist看起来很有希望,但它依赖于在打开窗口时将打开的窗口存储为父页面上的变量,并在打开新窗口之前检查这些窗口。这对我来说不起作用,因为父窗口( popup.html )经常会自行关闭并重新打开,并且我会丢失变量。

我尝试实现相同的想法,但将窗口变量存储在 chrome.storage 中因为它可以让你存储对象。好吧,它确实允许您存储对象,但它首先将它们序列化,因此窗口变量丢失了它的所有功能,我最终得到

result.feedbackPanel.focus() is not a function

这是我的尝试:

function openFeedbackPanel(){
chrome.storage.local.get('feedbackPanel', function (result) {
console.log( result.feedbackPanel); // logs window object sans all functions
if(result.feedbackPanel && ! result.feedbackPanel.closed){
try{
result.feedbackPanel.focus();
}
catch(error){
chrome.storage.local.remove('feedbackPanel', function () {
});
createFeedbackPanel();
}
}
else{
createFeedbackPanel();
}
});
}
function createFeedbackPanel(){
var win = window.open('feedback-panel.html', 'Feedback', 'width=935, height=675');
console.log(win); // logs full object as expected
chrome.storage.local.set({"feedbackPanel": win});
}



$('#some-button').click(openFeedbackPanel());

所以,因为这不起作用:

如何检查弹出窗口是否已从非父窗口(未打开弹出窗口的窗口)打开?

最佳答案

无需跟踪窗口并存储它们。
如果您知道您的扩展程序 ID,最简单的方法是测试所有选项卡 URL 并查看它是否已打开

chrome.tabs.query({}, function(tabs) {
var doFlag = true;
for (var i=tabs.length-1; i>=0; i--) {
if (tabs[i].url === "chrome-extension://EXTENSION_ID/feedback-panel.html") {
//your popup is alive
doFlag = false;
chrome.tabs.update(tabs[i].id, {active: true}); //focus it
break;
}
}
if (doFlag) { //it didn't found anything, so create it
window.open('feedback-panel.html', 'Feedback', 'width=935, height=675');
}
});

这里已经回答了如何获取 extension ID ,

关于javascript - 检查窗口是否已从非父窗口打开(chrome 扩展),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36000099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com