2012-11-24 51 views
0

我的扩展应该打开一个弹出窗口(正常的弹出窗口,而不是默认扩展弹出式)具有以下条件:谷歌Chrome扩展:弹出窗口处理

  1. 只有一个窗口能在瞬间被打开,
  2. 我想在localStorage中保存窗口大小和位置,并在下次打开时恢复它们。

该怎么办?

我想:

chrome.browserAction.onClicked.addListener(function() { 

    // 1. In this case, variable win is a window object. But it's empty. There 
    // is no properties/methods to operate with. 
    var win = window.open('http://example.com','windowname'); 

    chrome.windows.create({ 
    'url': 'http://example.com', 
    'type': 'popup' 
    }, function(win) { 
    // 2. In this case, variable win has some properties, but they are static 
    // and won't change on window resize/close. 
    }); 
}); 

任何想法?

+0

什么特别之处打开的窗口?该扩展程序如何知道“窗口”是否已打开?如果它基于URL,[这里](https://github.com/Rob--W/stackexchange-notifications/blob/4f4aa9ce76bce8f9f8c4180a73c675b5d9651f86/using-websocket.js#L66-L82)就是一个例子。 –

回答

0

我想,你可以用window.open()来做到这一点。

1 - 只有一个窗口能在瞬间被打开,

如果你给同namewindow.open()

  • 如果没有任何存在的窗口名称相同,将创建一个新的
  • 否则如果有一个打开的窗口具有相同的名称,它只会刷新它。

2-我想保存窗口的大小和位置在localStorage中,并在下一次打开时恢复它们。

是的,你可以通过将window.onresize事件做到这一点,

这是一个基本的例子,

chrome.browserAction.onClicked.addListener(function() { 
    var wOpt = getWindowDefaultOptions(); // options from localStorage 
    var win = window.open("http://www.example.com", "myscriptpopup", "width="+wOpt.width+", height="+wOpt.height+", top="+wOpt.top+", left="+wOpt.left); 
    win.onresize = function() { 
     var newOptions = {}; 
     newOptions.width = this.innerWidth; 
     newOptions.height = this.innerHeight; 
     newOptions.top = this.screenY; 
     newOptions.left = this.screenX; 
     setWindowDefaultOptions(newOptions); //save Options to localStorage 
    } 
}); 

//Default Options For Window 
var winOptions = { 
     "width" : "200", 
     "height" : "100", 
     "top" : "50", 
     "left" : "50" 
}; 
+0

出于某种原因,在窗口打开时,只调用了两次win.onresize()。 – Leksat