Google Chrome扩展:只创建一次窗口
Google Chrome Extensions: create a window only once
单击搜索栏附近的扩展按钮打开一个新窗口。只有在还没有打开的情况下,我才想打开一扇新窗户;如果那样的话,我更愿意展示旧的。
这是我的代码,但它不起作用。
var v = null;
var vid = null;
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.windows.getAll({}, function(list) {
// check if already exists
for(window in window_list)
if(window.id == vid) { window.focus(); return; }
chrome.windows.getCurrent(function(w) {
v = chrome.windows.create({'url': 'my_url', 'type': 'panel', 'focused': true});
vid = w.id;
});
});
});
有人能给我解释一下怎么修吗?
很可能,v
和vid
值都会在关闭应用程序后(在它完成执行脚本后)被删除,但我该如何修复它?如果可能,不使用localStorage或cookie。
我曾尝试在创建窗口时指定tabId
属性,但不起作用。我也尝试过使用chrome.windows.onRemoved.addListener
功能,但它也不起作用。
- 将
window
更改为另一个变量名 - 变量名称要一致。CCD_ 6和CCD_
- 使用
chrome.windows.update
而不是window.focus()
,因为后者不起作用 - 使用
chrome.windows.get
查看窗口是否存在,而不是维护窗口列表 - 新窗口的详细信息可在
chrome.windows.create
的回调中获得。以正确的方式使用此方法:
代码:
chrome.windows.get(vid, function(chromeWindow) {
if (!chrome.runtime.lastError && chromeWindow) {
chrome.windows.update(vid, {focused: true});
return;
}
chrome.windows.create(
{'url': 'my_url', 'type': 'panel', 'focused': true},
function(chromeWindow) {
vid = chromeWindow.id;
}
);
});
或者,不检查窗口是否存在,只需更新窗口,当出现错误时,打开一个新窗口:
chrome.windows.update(vid, {focused: true}, function() {
if (chrome.runtime.lastError) {
chrome.windows.create(
{'url': 'my_url', 'type': 'panel', 'focused': true},
function(chromeWindow) {
vid = chromeWindow.id;
});
}
});
chrome.windows.getAll({}, function(window_list) {
var extWindow = '';
window_list.forEach(function(chromeWindow) {
//Check windows by type
if (chromeWindow.type == 'panel') {
extWindow = chromeWindow.id;
//Update opened window
chrome.windows.update(extWindow, {focused: true});
return;
}
});
if (extWindow == '') {
//Open window
chrome.windows.create(
{
'url' : 'my_url',
'type' : 'panel',
'focused' : true
},
function(chromeWindow) {
extWindow = chromeWindow.id;
}
);
}
});
这是一个适用于我的替代代码
相关文章:
- 只有当选项卡/窗口有焦点时,页面才能每5秒刷新一次
- 每个用户只显示一次放大弹出窗口
- 如何使用jQuery一次关闭多个弹出窗口
- 窗口退出时的模式弹出窗口 - 重置一次
- 每个用户仅显示一次弹出窗口
- 弹出窗口不会根据需要在每个会话中显示一次(如客户端所述)
- jQuery Slider在jQuery弹出窗口中只初始化一次
- ASP.NET:每5分钟从代码后面调用一次弹出窗口
- Bootstrap弹出窗口只出现一次
- 我想在窗口加载后只调用一次JavaScript setInterval函数
- JavaScript - 弹出窗口仅打开一次
- 让窗口在一次单击触发两个页面重定向后保持焦点
- 简单模式弹出窗口显示每个会话一次
- PHP 正在鼠标移动到窗口上执行 JavaScript.它循环在一个函数上.我怎样才能让它只执行一次
- 仅在用户登录时显示一次弹出窗口
- 编辑我的脚本并添加一个jQuery cookie以仅显示一次弹出窗口
- 窗口大小调整仅有效一次
- jQuery一次触发所有模态窗口,即使具有不同的目标 #id
- 如何使模式窗口只显示一次
- Google Chrome扩展:只创建一次窗口