这两个javascript用法有什么区别?

时间:2013-04-07 03:38:23

标签: javascript google-chrome-extension

var win = window.open('cover.html','','height=50,width=150,titlebar=no,toolbar=no');
win.onbeforeunload = function(){ updateIcon();};

V.S。

chrome.windows.create(
  { 
    url: "cover.html", 
    type: "popup", 
    width: 150,
    height: 50 
  }, 
  function(win)
  { win.onbeforeunload = function(){ updateIcon();};  } 
 );

在chrome api版本中未调用函数updateIcon()。我想知道为什么。这两段代码都在ubuntu linux上进行了测试。

1 个答案:

答案 0 :(得分:0)

正如a comment中有用的解释:

chrome.windows.create会返回不同类型的窗口:Chrome API Window object。它不允许您访问已打开文档的window对象。

如果您需要检测从开放侧关闭窗口的时间,您可以收听chrome.windows.onRemoved event并将窗口ID与您从create获得的窗口ID进行比较。

如果您决定加入文档的unload事件,可以使用cover.html代码执行此操作

您可以使用chrome.extensions.getViews - 但请注意,您必须查询type : "tab"而非"popup" - 后者仅指Browser/Page Action popups ,而不是在弹出窗口中打开的常规页面。我知道这很令人困惑。

您提到自己找到了一个解决方案,表示关闭后台页面using runtime.getBackgroundPage。作为一种替代方法,我可以向后台页面提供opening a Port - 然后可以监听该端口上的断开事件,该事件将在窗口关闭时触发。