【发布时间】:2018-05-15 08:19:27
【问题描述】:
我正在使用 javascript 打开一个弹出窗口并在加载后执行一些代码。
这是代码:
// Öffnen des Print Popups binden.
$('#revi_print').unbind();
$('#revi_print').click(function() {
// Popup erstellen.
popup = window.open('report_handle/print.php?filter_report=' + $('#revi').data('filter_report'), "Popup", "width=1024, height=768, scrollbars=yes, toolbar=no, status=no, resizable=yes, menubar=no, location=no, directories=no, top=10, left=10");
// Code erst ausführen, wenn das Popup geladen ist.
popup.addEventListener('load', handle_popup, false);
});
它在 Firefox 和 Google Chrome 中运行良好,但我意识到它在最新的 Internet Explorer 中无法运行。
根据我的阅读,addEventListener 应该在 IE9 以上得到支持,所以理论上 IE 11 应该支持它——但似乎情况并非如此。
这个错误表明,IE11不支持该方法...
是否有一个简单的解决方法来完成这项工作?
我刚刚尝试了这段代码:
if (popup.addEventListener){
alert("firefox, chorome, etc");
popup.addEventListener('load', handle_popup, false);
} else if (popup.attachEvent){
alert("IE");
popup.attachEvent('load', handle_popup);
}
显然这应该根据不同的其他线程工作,但事实并非如此。如果使用 IE,浏览器会转到 else if - 但是它仍然拒绝工作。
难道 IE 中的 attachEvent 对弹出窗口不起作用?
我刚刚尝试了第一个答案中指出的方法。
它在firefox和chrome下都可以,但是IE拒绝工作,即使这个方法也没有EventListener了:
// Öffnen des Print Popups binden.
$('#revi_print').unbind();
$('#revi_print').click(function() {
// Popup erstellen.
popup = window.open('report_handle/print.php?filter_report=' + $('#revi').data('filter_report'), "Popup", "width=1024, height=768, scrollbars=yes, toolbar=no, status=no, resizable=yes, menubar=no, location=no, directories=no, top=10, left=10");
// Code erst ausführen, wenn das Popup geladen ist.
//popup.addEventListener('load', handle_popup, true);
popup.window.onload=function() { parent.handle_popup(popup); }
});
// Code zum handeln des Popups.
function handle_popup(popup) {
var selected_report = $('#revi').data('filter_report');
var jqplot_object = $('#revi_filter_ddReport_' + selected_report + '_jqplot_object').html();
var has_chart = $('#revi_filter_ddReport_' + selected_report + '_has_chart').html();
var obj = $.parseJSON($('#revi').data('data').trim());
// Den Kontent kopieren.
popup.$('#revi_sec_report_container').html($('#revi_report_container').html());
// Den Print Button entfernen.
popup.$('#revi_print').remove();
// Das chart entfernen.
popup.$('#revi_chart').empty();
// Wenn ein Chart gezeichnet werden soll.
if (has_chart == 1) {
var execute_string = $.base64.decode(jqplot_object);
eval(execute_string);
}
}
下一次尝试(成功一半):
我已将这行代码添加到 POPUP 的 HTML 中:
这是 javascript 方面的更改:
// Öffnen des Print Popups binden.
$('#revi_print').unbind();
$('#revi_print').click(function() {
// Popup erstellen.
popup = window.open('report_handle/print.php?filter_report=' + $('#revi').data('filter_report'), "Popup", "width=1024, height=768, scrollbars=yes, toolbar=no, status=no, resizable=yes, menubar=no, location=no, directories=no, top=10, left=10");
$('body').data('the_popup', popup);
// Code erst ausführen, wenn das Popup geladen ist.
//popup.addEventListener('load', handle_popup, true);
//window.onload=function() { handle_popup(popup); }
});
// Code zum handeln des Popups.
function handle_popup() {
var popup = $('body').data('the_popup');
var selected_report = $('#revi').data('filter_report');
var jqplot_object = $('#revi_filter_ddReport_' + selected_report + '_jqplot_object').html();
var has_chart = $('#revi_filter_ddReport_' + selected_report + '_has_chart').html();
var obj = $.parseJSON($('#revi').data('data').trim());
// Den Kontent kopieren.
popup.$('#revi_sec_report_container').html($('#revi_report_container').html());
// Den Print Button entfernen.
popup.$('#revi_print').remove();
// Das chart entfernen.
popup.$('#revi_chart').empty();
// Wenn ein Chart gezeichnet werden soll.
if (has_chart == 1) {
var execute_string = $.base64.decode(jqplot_object);
eval(execute_string);
}
}
在 firefox 和 Chrome 上完美运行,弹出窗口打开,并显示应在弹出窗口上绘制的图表。
现在 IE 也执行弹出窗口的代码,这非常好,但现在只有 IE JQPLOT 确实在库的某个地方抛出错误。
我不知道为什么会发生这种情况,我只能猜测在执行 jqplot 的代码时弹出窗口没有完成加载。
现在一切正常 - jqplot 问题现已修复...
【问题讨论】:
-
也许你处于“兼容”模式
-
默认情况下是否开启了兼容模式?不这么认为.. 我刚刚检查了一下,似乎我必须将页面添加到兼容性视图中 - 对我来说,默认情况下它看起来是关闭的。
-
为什么不
$(popup.document).ready( handle_popup )? -
请将
popup.window.onload=function() { parent.handle_popup(popup); }改为popup.window.onload=function() { opener.handle_popup(popup); }
标签: javascript internet-explorer popup