2016-12-12 124 views
0

我想調用下面的函數來創建一個彈出的新窗口。無論何時,我都在調用它在chrome中崩潰父窗口。試圖在window.open後從父窗口調用子窗口函數

我觀察到:直到openDoctorDetails函數被執行,子窗口根本沒有加載。因爲doctorDetailsPage.populateDoctorDetails從未被定義。因此,它將陷入無限循環。

var openDoctorDetails = function(physicianId) { 
    var time1 = new Date(); 
    var doctorDetailsPage = window.open('PhysicianDetails.html', '_blank', 
     'resizable=yes; width=1000; height=1500; top=50; left=50'); 
    var times = 0; 
    while (!doctorDetailsPage.populateDoctorDetails) { 
    setTimeout(function() { 
     times++; 
    }, 500); 
    } 
    doctorDetailsPage.populateDoctorDetails(physicianId); 
    doctorDetailsPage.focus(); 
    console.log("Time taken for this openDoctorDetails:" + (new Date() - time1) 
     + " " + times); 
}; 
+0

http://stackoverflow.com/questions/13311812/popup-window-accessing-parent-dom – Mikes3ds

回答

0

實現調用父窗口physicianDetailsWindowLoadedHandler方法的子窗口的onload事件處理程序。放下setTimeout業務。只需打開子窗口,讓回調以事件驅動的方式處理所有事情。

這樣,代碼在加載子窗口後運行在子窗口中,而不必創建自己的等待循環,並且如果子窗口需要來自父窗口的信息,則可以通過調用方法來訪問它在父母通過window.parent財產。

+0

如何獲得parentId,如果它是動態的?在父窗口中創建隱藏變量不是一種選擇,因爲我可能需要一次創建多個窗口。我不想要任何併發問題。 – krishth

+0

你有幾個選項。例如,將具有標識符(或父窗口中的集合中的索引)的查詢參數添加到您打開窗口的URL中。或者在'window.open()'方法中使用name參數。另外,如果打開窗口的調用成功,返回值將是對窗口的引用。因此,在子窗口的onload事件處理程序中,可以在父窗口中調用回調方法,將'window'作爲參數傳遞,並且回調方法可以查找子窗口集合。 – Craig

+0

有沒有什麼辦法可以將參數從父母傳遞給孩子。 – krishth

相關問題