2017-07-10 55 views
1

目標:IE 11 window.open()的JavaScript腳本加載競爭條件問題

我呼籲,因此目前集成在我們的業務套件系統(這是「ImageGallery」一ReactJs web應用程序一個龐大的體系包含舊技術,主要是網頁表單)。在我們的系統中,我們需要添加一個按鈕來啓動瀏覽器窗口來旋轉應用程序。

ImageGallery應用程序依賴於當前系統上的數據傳遞給它來展示,這意味着,當ImageGallery應用程序加載,它由於數據是調用像

window.parent.loadData() 

上,業務套件系統側的功能通過JavaScript傳入,沒有ajax調用。

代碼:

function showImage() { 
    var imageGalleryWindow = window.open('/ImageGallery', '_blank', 'height=' + window.screen.availHeight + ',width=' + window.screen.availWidth + ',scrollbars=yes,menubar=no,resizable=yes,toolbar=no,location=no,status=no'); 
    imageGalleryWindow.loadData= loadData; 
} 

loadData()功能在當前的JavaScript文件,將被傳遞給新的窗口,以便它可以被應用ReactJS使用。

問題:

該應用程序使用Chrome/Firefox的/邊緣完美的作品,而不是IE 11 IE 11有時負載,有時沒有。仔細觀察後,我發現存在競爭狀況。

基本上每當應用程序失敗時,loadData()函數尚未傳遞到新創建的窗口。再次,這只是IE11,所有其他瀏覽器似乎很好。

我已經試過什麼:

我試過如下:

1>試圖把一個等待功能在ImageGallery應用程序是這樣的:

static resolveDocuments(){ 
    if(typeof window.parent.loadData === 'function'){ 
     // do the work to show image 
    } else { 
     setTimeout(this.resolveDocuments, 2000); 
    } 
    } 

我使用終極版thunk,我沒有得到任何運氣讓這個工作。

2>把imageGalleryWindow.loadData= loadData;到的window.onload(),壞主意,但嘗試反正

3>把imageGalleryWindow.loadData= loadData;imageViewerWindow.document.addEventListener("DOMContentLoaded", function (event) {}還是壞主意,但嘗試反正

4>創建了一個新ImageGallery.html,使用一個託管ImageGallery應用程序的iframe。在部分中,包含來自父級的JavaScript文件。沒有運氣

5>創建了一個webform頁面ImageGallery.aspx,使用一個iframe來託管ImageGallery應用程序。在部分中,包含來自父級的JavaScript文件。沒有運氣。

感謝您花時間閱讀此問題,並請讓我知道你是否有想法我可以嘗試。

非常感謝!

回答

0

的解決方案我最終是HTML 5的本地存儲:

  1. 調用window.open()來填充新窗口,創建HTML 5中的本地存儲與進場前我需要傳入的所有數據。

  2. 當圖片庫應用程序加載時,請檢查本地存儲項是否存在,如果存在,請提取數據。數據將始終存在,因爲它在生成新窗口之前設置,並且由於兩個頁面來自同一個域,因此它們都可以訪問相同的本地存儲。

  3. 爲避免安全問題,在圖庫應用程序從本地存儲讀取數據後,我在應用程序中保留一份數據副本,然後刪除本地存儲條目。

希望這可以對其他人有所幫助。