0

我的公司已經創建了一個在iframe中啓動自定義應用程序的通用應用程序。父窗口允許最終用戶點擊工作列表中的項目,並且根據他們點擊的內容,我們導航到啓動控制器,該控制器將爲與該任務關聯的產品建立一個URL。然後,我們將該產品應用程序加載到啓動視圖中的iframe中。AngularJS - IE11中的重複源文件

我們看到IE開發人員工具中存在重複的靜態內容文件(js和部分模板)。

Image of dev tools

Bundled js as well

我們最終每個負載的iframe後看到文件的其他副本。由於我們是SPA,所以假設這些文件將被緩存(除了IE之外,它們都在所有瀏覽器中)。每個文件都由同一個Web服務器提供。我們甚至注意到,如果我們不在js文件的正確實例中設置斷點,它不會被擊中。

我們已經嘗試過很多事情,包括在啓動控制器內的destroy事件中刪除iframe(因爲幀被添加到窗口對象,我們認爲它是永遠活着的)。我們確保iframe具有有效的ng-src標記,並且使用$ sce來動態創建url。

由於我們需要通過POST從窗體加載iframe,我們正在做類似這樣的事情,這是一種超級黑客提交POST的方式。該代碼段不會按原樣運行,但我想包含有關我們如何填充我們的iframe的信息。

function launch() { 
 
    //return launchService.launch(vm.url, buildLaunchRequest()).then(success, error); 
 
    $timeout(function() { 
 
    $("#productForm").submit().remove(); 
 
    }, 1); 
 
} 
 
launch();
<div id="launch" class="container-fluid ss-container"> 
 
    <iframe name="productFrame" id="productFrame" data-ng-src="{{vm.url}}" resize-frame /> 
 
</div> 
 
<form id="productForm" role="form" method="post" action="{{vm.url}}" name="productForm" target="productFrame"> 
 
    <input type="hidden" name="user" ng-value="vm.user" id="user" /> 
 
    <input type="hidden" name="authToken" ng-value="vm.authToken" id="authToken" /> 
 
    <input type="hidden" data-ng-repeat="(k,v) in vm.styles" name="{{k}}" value="{{v}}" /> 
 
</form>

我肯定有一個更好的方式來提交表單與目標是一個iframe,但此刻沒有什麼似乎已經爲我們工作。

如果有人看到這個重複的源文件問題和/或知道正確的方式來提交表單與控制器加載時自動生成輸入請幫助我們!

感謝,

傑克

回答

1

原來有人用,如果你不清除出去,導致此的iframe中的src標籤IE如何存儲的iframe一些奇怪的問題。

這個問題有助於確定問題: IE8 reloads dynamic iframe content from cache into the wrong iframe

這多少會iframe的克隆每次不管SRC是相同的斜視加載時間添加到父窗口。清除我們的角度控制器的$destroy上的src標籤似乎踢IE實際上從dom中刪除節點。我們甚至沒有任何運氣嘗試$("#productFrame").remove()。刪除src attrib也不起作用。

工作原理是$("#productFrame").attr("src", "").remove();