1

摘要:我正在尝试关闭一个正在其中运行 chrome 扩展的弹出窗口。出于某种原因,当 chrome 窗口在其中运行扩展程序时,window.close 无法处理它。

解释 :

我的 GWT 应用程序需要与仅在 IE 7 中运行的旧系统交互,作为解决方案,我正在打开一个带有 url 'chrome-extension://hehijbfgiekmjfkfjpbkbammjbdenadd/iecontainer.html#url=www.legacysystem.com' 的弹出窗口,其中强制使用新窗口中的 IE 选项卡打开旧系统。要求始终只为遗留系统打开一个窗口,因此如果用户尝试打开另一个窗口,我需要关闭打开的窗口。

这是我打开新窗口的代码

 <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 不适用,因为我没有在扩展中运行此代码

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

4

1 回答 1

0

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

IE Tab 使用一个插件(即blackfishietab.dll),所以我认为您无能为力(甚至更深入地挖掘它以找到确切的问题)。但是(即使问题的确切原因不知道(对我来说))我有 3 个解决方案要提出:

解决方案 1

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

解决方案 2

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

解决方案 3

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

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

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

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

(您也不需要跟踪是否打开了选项卡,因为您不需要以编程方式关闭它们。)

于 2013-10-25T19:08:39.043 回答