我正在尝试调用以下函数来创建一个新窗口弹出。无论如何,我正在调用它在chrome中崩溃父窗口。
我观察到:直到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 :(得分:0)
在子窗口中实现onload
事件处理程序,该窗口在父窗口中调用physicianDetailsWindowLoadedHandler
方法。不要使用setTimeout。只需打开子窗口,让直接回调以事件驱动的方式处理所有内容。
这样,代码将在子窗口加载后在子窗口中运行,而不必创建自己的等待循环,如果子窗口需要来自父窗口的信息,它可以通过调用方法来访问它通过window.parent
属性在父级中。