我想提出一个Chrome扩展开。点击popup.html
中的按钮打开一个新窗口并加载feedback-panel.html
。检查窗口已经从非父窗口(Chrome扩展)
这工作,但上点击,我想检查窗口已经打开,如果是集中于它,而不是创建一个新的。
JavaScript window.open only if the window does not already exist看上去很不错,但它依赖打开的窗口作为变量存储在父页面上,当打开窗口并在打开窗口之前检查它们。这不会为我工作,因为父窗口(popup.html
)经常会被关闭并重新打开,我会失去变量。
我试图实现相同的想法,但窗口变量存储与chrome.storage
,因为它可以让你存储对象。那么,它让你存储的对象,但它首先序列化他们,所以窗口变量失去它的所有功能,我结束了
result.feedbackPanel.focus()不是一个函数
这里是我的尝试:
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());
所以,因为这并不工作:
如何检查弹出窗口是否已经从非父窗口(未打开弹出窗口)打开?
这看起来promissing但遗憾的是它不工作。当页面未打开时,它会打开它,但打开时没有任何反应。我设置了一个断点,代码被称为'chrome.tabs.update(tabs [i] .id,{active:true});'并且我有正确的标签ID,但是窗口没有获得焦点。我认为这是因为弹出窗口本身仍然是开放的 – DelightedD0D
@ DelightedD0D我在Opera浏览器的win10上测试了它,弹出窗口集中(从背景)。也许它是不同的平台行为? –
嗯,没有意识到你可以在opera中安装chrome扩展,你可以在实际的chrome中测试吗?编号爱,以确认它的工作原理,所以我可以专注于理由雷犯规 – DelightedD0D