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