2017-05-12 6 views
0

Meine Webseite hat folgende JavascriptIE 11 onload wird nie

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(); 
    } 
} 

Der LoadPDF von Code aufgerufen hinter aufgerufen wird. "pdf" ist mein iframe. Wenn die PDF in den Iframe geladen wird, möchte ich LoadPrint aufrufen. Aber das Problem ist in IE 11 nie genannt.

Kann mir bitte jemand helfen?

+0

Wann soll es aufgerufen werden? Dies ist nur die Definition – TankorSmash

+0

funktioniert es auf allen anderen Browsern? erhalten Sie einen Fehler auf IE oder es funktioniert einfach nicht? –

+0

Ja, das ist nur IE spezifisch. Funktioniert mit allen anderen Browsern – user2837961

Antwort

1

Dies ist ein IE11 bug, den MS nicht reparieren will, weil sie es für einen Feature-Bug halten und diese Art von Bugs für alte Browserversionen nicht mehr beheben.

Um dieses Problem zu umgehen, laden Sie die PDF-Datei in einen anderen Seiten-iframe und laden diese dann in Ihren iframe. Ein einfaches Javascript pdf loader mit einem Dateiargument:

<!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> 

Sie können es mit dem <filename.html>?pdf=<pdf_file_to_load>.

Dann ändern Sie einfach Ihren Code, um die pdf-Datei durch diesen Lader wie folgt zu laden:

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'); 

Nun ist die LoadPrint Funktion auf iframe Ladeereignis auf IE11 auch genannt wird. Hier ist meine Arbeitsweise können Sie auch mit IE11 testen: http://zikro.gr/dbg/html/ie11-iframe-pdf/

Hier können Sie einen Screenshot mit dem 10MB PDF Laden sehen und erst nach Abschluss laden sie das load Ereignis und Warnungen feuern die Meldung:

enter image description here

+0

Ich sehe dein Beispiel nicht funktioniert. Sobald ich die Seite in IE11 öffne, öffnet sich der Alarm "gefeuert" bevor die PDF geladen wird – user2837961

+0

@ user2837961 weil das PDF nicht angezeigt wird, das bedeutet nicht, dass es nicht geladen ist. Ich habe eine PDF-URL mit einer Datei von 10 MB Größe auf dem gleichen Link hinzugefügt. Versuchen Sie, den Link neu zu laden, und Sie werden sehen, dass der Browser tatsächlich etwas Zeit braucht, um diese 10MB PDF zu laden, bevor er das 'load' Ereignis auslöst und die" gefeuerte "Nachricht alarmiert; Das liegt daran, dass die ganze Zeit darauf wartet, alle Daten dieser großen PDF-Datei zu laden. –

+0

es ist seltsam, aber ich werde "gefeuert" und bald, wenn ich auf den Link und dann pdf braucht Zeit zum Laden/Anzeigen – user2837961

0

Ich weiß nicht, ob dies Ihr spezifisches Problem in dieser Instanz ist, aber stellen Sie sicher, dass Sie Ihre Listener an das Element binden, bevor Sie es src Attribut zuweisen. Wenn sich das Element im Cache befindet, kann das load -Ereignis ausgelöst werden, bevor Sie es binden, sodass es vollständig fehlt.

+0

Ich habe versucht, die src nach dem Zuweisen des Ereignisses aber funktioniert nicht – user2837961

+0

@ user2837961 Ich kann nichts offensichtlich falsch mit dem Code sehen. Werden Fehler auf der Konsole ausgegeben? – dgeare

+0

Nichts in der Konsole leider – user2837961