目標: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文件。沒有運氣。
感謝您花時間閱讀此問題,並請讓我知道你是否有想法我可以嘗試。
非常感謝!
雷