2017-05-12 70 views
0

我的網頁有以下的javascriptIE 11的onload不會被調用

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。

任何人都可以請幫忙嗎?

+0

它應該什麼時候被調用?這只是定義 – TankorSmash

+0

是否適用於所有其他瀏覽器?你在IE上遇到錯誤,或者它不起作用? –

+0

是的,這只是IE特定的。適用於所有其他瀏覽器 – user2837961

回答

1

這是一個IE11 bug,MS拒絕修復,因爲他們認爲它是一個功能錯誤,他們不再修復舊版瀏覽器的那種錯誤。

解決此問題的一個解決方法是將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

+0

我沒有看到您的示例工作。只要我在IE11中打開頁面,在PDF加載之前打開「已觸發」警報 – user2837961

+0

@ user2837961,因爲PDF不顯示,並不意味着它沒有加載。我在同一個鏈接上添加了一個10MB大小的pdf文件。嘗試重新加載鏈接,你會發現瀏覽器實際上需要一些時間來加載該10MB PDF,然後觸發'load'事件並警告「已觸發」消息;這是因爲所有這些都等待加載該大型PDF的所有數據。 –

+0

它的奇怪,但我得到'解僱',並在我點擊鏈接,然後pdf需要時間來加載/顯示 – user2837961

0

我不知道這是否是您在此實例中的特定問題,但請確保在將您的偵聽器綁定到該元素之後再爲其分配src屬性。如果該項目在緩存中,則可以在綁定之前觸發加載事件,從而完全忽略它。

+0

我嘗試在分配事件後加載src,但不起作用 – user2837961

+0

@ user2837961我看不出任何明顯錯誤的代碼。是否有任何錯誤被轉儲到控制檯? – dgeare

+0

控制檯中沒有任何問題 – user2837961