gpt4 book ai didi

javascript - IE 11 onload 永远不会被调用

转载 作者:行者123 更新时间:2023-12-03 04:21:10 25 4
gpt4 key购买 nike

我的网页有以下 JavaScript

function LoadPDF(filename)
{
var loc = filename;
document.getElementById("pdf").setAttribute("src", loc);
if (window.addEventListener) {
document.getElementById("pdf").addEventListener("load", LoadPrint, false);
}
else if (window.attachEvent) {
document.getElementById("pdf").attachEvent("onload", LoadPrint);
}
else {
document.getElementById("pdf").onload = LoadPrint;
}
}

function LoadPrint() {
alert('fired!');
if (document.getElementById("pdf").src !== "") {
var frm = document.getElementById("pdf");
frm.contentDocument.getElementById("pdf").contentWindow.print();
}
}

LoadPDF 是从代码隐藏中调用的。 “pdf”是我的 iframe。当 pdf 加载到 iframe 中时,我想调用 LoadPrint。但问题是在 IE 11 中它从未被调用。

有人可以帮忙吗?

最佳答案

这是 IE11 bug ,微软拒绝修复该问题,因为他们认为这是一个功能错误,并且他们不再修复旧浏览器版本的此类错误。

解决此错误的方法是将 pdf 文件加载到其他页面 iframe 中,然后将该页面加载到您的 iframe 中。一个带有文件参数的简单 javascript pdf 加载器:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PDF Loader</title>
<style type="text/css">
html, body {
border:0;
margin:0;
height:100%;
overflow-y:hidden;
}

#pdf {
border:0;
margin:0;
width:100%;
height:100%;
}
</style>
</head>
<body>

<iframe id="pdf"></iframe>

<script type="text/javascript">

function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

var pdf = getParameterByName('pdf');
document.getElementById('pdf').setAttribute('src', pdf);

</script>
</body>
</html>

您可以将其与 <filename.html>?pdf=<pdf_file_to_load> 一起使用.

然后你只需更改代码以通过该加载器加载 pdf 文件,如下所示:

function LoadPDF(filename)
{
var loc = "pdf-loader.html?pdf="+filename;
document.getElementById("pdf").setAttribute("src", loc);
if (window.addEventListener) {
document.getElementById("pdf").addEventListener("load", LoadPrint, false);
}
else if (window.attachEvent) {
document.getElementById("pdf").attachEvent("onload", LoadPrint);
}
else {
document.getElementById("pdf").onload = LoadPrint;
}
}

function LoadPrint() {
alert('fired!');
}

LoadPDF('http://www.pdf995.com/samples/pdf.pdf');

现在是LoadPrint即使在 IE11 上,也会在 iframe 加载事件上调用该函数。这是我的工作示例,您甚至可以使用 IE11 进行测试:http://zikro.gr/dbg/html/ie11-iframe-pdf/

在这里您可以看到 10MB PDF 加载的屏幕截图,只有在加载完成后才会触发 load事件并提醒消息:

enter image description here

关于javascript - IE 11 onload 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43941332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com