关闭运行chrome扩展的弹出窗口

时间:2013-10-24 10:22:39

标签: javascript internet-explorer google-chrome gwt google-chrome-extension

摘要: 我正在尝试关闭一个弹出窗口,其中正在运行chrome扩展。由于某些原因,当chrome窗口在其中运行扩展时,window.close无法正常工作。

说明:

我的GWT应用程序需要与仅在IE 7中运行的遗留系统进行交互,作为解决方案我打开一个带有url'chrome-extension的弹出窗口://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窗口。

据我所知 chrome。* api不适用,因为我没有在扩展程序中运行此代码

非常感谢任何想法或解决方案。

1 个答案:

答案 0 :(得分:0)

不是您可能期望(或希望)的解决方案,但它可能适合您。

IE Tab使用了一个插件(即blackfishietab.dll),因此我认为你无法做很多事情(甚至可以深入挖掘它以找到确切的问题)。但是(即使问题的确切原因未知(对我而言))我有3个解决方案可以提出:

解决方案1 ​​

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

解决方案2

只需很少的额外开销(考虑到你可以强加你的用户),你可以实现自己的chrome-extension并与之交互(而不是直接使用IE Tab扩展)。 I.E.您可以要求您的分机使用IE Tab打开旧系统。然后,您可以跟踪已打开的窗口,并在需要时关闭它 (扩展程序将能够关闭窗口,因为它可以访问功能强大的chrome.* API。)

解决方案3

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

  

如果已存在名称为 strWindowName 的窗口,则 strUrl 会加载到现有窗口中。

因此,只要您始终在IE Tab窗口中使用相同的name,您就不必担心先关闭窗口:

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

(另外,如果打开标签页,也不需要跟踪,因为您不需要以编程方式关闭它们。)