0

摘要: 我正在尝试关闭在其中运行chrome扩展的弹出窗口。出于某种原因,当一个chrome窗口在其中运行一个扩展时,window.close不起作用。关闭运行Chrome扩展的弹出窗口

说明:

我的GWT应用程序需要与只在IE 7上运行的遗留系统交互,为解决我与网址的Chrome扩展打开一个弹出窗口://hehijbfgiekmjfkfjpbkbammjbdenadd/iecontainer.html# url = www.legacysystem.com',它强制在新窗口中用IE标签打开Legacysystem。 要求它始终只有一个窗口打开,因此如果用户试图打开另一个窗口,我需要关闭打开的窗口。

这里是我打开的新窗口

<head> 
<script> 
var WindowDialog = new function() { 
    this.openedWindows = {}; 
    this.open = function(instanceName, url) { 
     var handle = window.open(url, instanceName, 'height=500,width=500'); 
     this.openedWindows[instanceName] = handle; 
     return handle; 
    }; 
    this.close = function(instanceName) { 
     if (this.openedWindows[instanceName]) 
      this.openedWindows[instanceName].close(); 
    }; 

}; 

function legacySystemWindow(name,url) { 
    WindowDialog.close(name); 
    WindowDialog.open(name, url); 
} 
</script> 
</head> 
<body>  
<input value="Simple popup " type="button" id="1"  onclick="legacySystemWindow('gmail','http://gmail.com')" /> 
<input value="IE Tab popup" type="button" id="2" onclick="legacySystemWindow('IETAB','chrome-extension://hehijbfgiekmjfkfjpbkbammjbdenadd/iecontainer.html#url=www.gmail.com')" /> 
</body> 

问题,当我尝试这个代码,而IE标签一切工作正常的代码,但是当我尝试这与IE选项卡中的代码无法关闭Chrome窗口。

据我所知 铬。因为我不运行这个代码与扩展

任何想法的或解决方案是非常赞赏* API的不适用。

+0

请添加更多信息。上述代码从哪里运行?什么是你的扩展文件结构?此外,发布其他相关代码部分(包括您的清单)。 – gkalpak

+0

我正在通过GWT应用程序在Chrome浏览器中运行此Java脚本。我的应用程序不是Chrome扩展程序..我的应用程序打开一个窗口并将URL传递为“我的遗留系统的chrome-extension:// IETAB extension id/url ='url”。为了实验的目的,我写了上面的代码,我们可以将代码复制到记事本中,并将扩展名为.html的文件存储起来,然后在chrome中打开html文件...我试图在我的GWT应用程序中完全相同 – user2915192

+0

今天我发现当我尝试一些JavaScript窗口。*命令像window.setTimeout()window.location,它不能关闭的原因是与协议不匹配。JavaScript异常我得到“安全问题无法访问swapped协议从htt:/// localhot:8080“..但令人惊讶的是window.focus()很好,但window.close()不会抛出任何javascript异常或能够关闭此窗口。 – user2915192

回答

0

不是您可能期望(或希望)的解决方案,但它可能适用于您。因为IE Tab使用插件(即blackfishietab.dll),所以我不认为你可以做很多事情(或者甚至深入挖掘以找到确切的问题)。但(即使该问题的确切原因尚不清楚(我))我有3种解决方案提出:

解决方案1 ​​

如果GWT应用程序从您的PC只能运行(或您可以管理访问的特定PC),您可以修改IE Tab扩展程序源代码,以使您可以关闭打开的窗口。免责声明:我不确定您是否有权这样做,因此您可能首先要获得开发者的明确许可。

解决方案2

几乎没有额外的开销(并考虑可以并处您的用户),您可以实现自己的Chrome扩展,并用它(直接而不是用IE选项卡扩展)interract。 I.E.你可以让你的扩展使用IE Tab打开遗留系统。然后,您的扩展可以跟踪打开的窗口并在需要时关闭它。
(扩展名就可以关闭该窗口,因为这将有机会获得强大chrome.*的API。)

解决方案3

该解决方案不能提供一种方式让你关闭IE Tab窗口以编程方式,但它仍然确保从您的GWT应用程序打开不会超过1个IE Tab窗口。
据有关window.open(srtUrl, strWindowName)的第二个参数文档:

如果名为strWindowName窗口已经存在,那么strUrl被加载到现有的窗口。

因此,你不必担心先关闭窗口,只要你总是使用相同的name为IE选项卡窗口:

function legacySystemWindow(name, url) { 
    //WindowDialog.close(name); // <-- You can get rid of this line 
    WindowDialog.open(name, url); 
} 

(你,也不要如果打开的选项卡不需要跟踪,因为您不需要以编程方式关闭它们。)

+0

解决方案3:我试图关闭窗口的原因是因为它无法用新的URL更新。 – user2915192

+0

你是什么意思它不能?当你使用以上的建议时会发生什么/ – gkalpak

+0

我已经开始学习和编写自己的扩展,以解决这个问题,如果我成功的话会发布它:) – user2915192