wake-up-neo.com

window.onload () feuert nicht mit IE 8 im ersten Schuss

Ich versuche, meine Seiten mit IE 8 richtig zu machen, wie ich hier herausgefunden habe: http://www.masykur.web.id/post/How-to-Make-Our-Website-to -be-Ready-for-IE8.aspx Da meine Seite XHTML 1.0-konform und mindestens CSS 2.1-konform sein muss, habe ich meine Seite und CSS mit nur wenigen Warnungen kompatibel gemacht, aber trotzdem window.onload (). feuert nicht Ist jemand auf dieses Problem gestoßen?

hier ist der Code-Ausschnitt:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=8"/>
        <title>Testing</title>
        <link rel="stylesheet" href="test.css" type="text/css"></link>
        <script type="text/javascript" src="login.js"></script>
        <script type="text/javascript" src="common.js"></script>
        <script type="text/javascript">
            window.onload = function()
            {
                          // Not coming here at all on first shot   
            }
        </script>
    </head>
    <body>
     .
     .
     .

Das Aktualisieren der Seite scheint jedoch zu funktionieren.

Fehlt mir hier etwas?

UPDATE:

Einer der Addons IE verursachte dieses Problem, nachdem seine Funktion deaktiviert war. Danke für deine Zeit und Antworten :)

26
Manohar

Für IE versuchen Sie:

window.onload = new function() { alert('hello');};
27
George

Dies ist ein ziemlich alter Thread, aber ich habe eine Lösung gefunden, die anderen helfen könnte.

Ich habe window.onload über ein dynamisch injiziertes Skript eine Funktion hinzugefügt (um wirklich das Laden eines externen Skripts aus Gründen zu simulieren, die in diesem Zusammenhang nicht wichtig sind). Wie in diesem Beitrag angegeben, würde der window.onload beim ersten Laden in IE8 nicht ausgelöst, alle nachfolgenden Aufrufe jedoch.

Ich fand heraus, dass dies jedes Mal funktionieren würde, wenn ich dies als internes Skript in die HTML-Datei stecke:

var windowOnload = window.onload || function() {};
window.onload = function() { windowOnload(); };

Alles, was der obige Code tut, ist, den window.onload des IE8 unauffällig zu "initialisieren". Ich vermute, dass IE8 window.onload nicht beim ersten Aufruf auslöst, wenn es von einem externen Skript aufgerufen wird, da das onload -Ereignis noch nicht an window angehängt ist (oder technisch ausgedrückt, sein Typof ist undefiniert). Es scheint, als würde IE8 das erste Mal das tun: Anhängen von onload an das Fenster, ohne es richtig auszuführen.

Der obige Code wird dann offensichtlich: Wir zwingen IE8 lediglich, das Ereignis onload zu erkennen. Es ist uns egal, was ausgeführt wird oder was nicht. Deshalb stellen wir sicher, dass Sie den vorhandenen window.onload-Code weiterleiten, der bereits definiert ist (nur als Vorsichtsmaßnahme).

Es ist wichtig, dies als internes Skript für HTML zu haben (zumindest aus meinen Tests).

Ihr HTML würde also ungefähr so ​​aussehen (die relevanten Teile):

 <script type="text/javascript">
  var windowOnload=window.onload||function(){};window.onload=function(){windowOnload();};
 </script>
 <script type="text/javascript" src="script.js">
 </script>

Nach dem Testen des Cache und dem erneuten Laden der Seite habe ich window.onload jedes Mal erfolgreich ausgelöst. 

Ich hoffe das hilft.

9
Milan Adamovsky

Sie könnten einen Fehler in Ihrem JavaScript haben. In diesem Fall wird JavaScript anschließend nicht richtig funktionieren.

Versuchen Sie, den Verweis auf login.js und common.js zu entfernen, und versuchen Sie, eine Benachrichtigung in Ihrer problematischen Funktion zu erhalten.

3
Ólafur Waage

Ich habe keinen IE8, um persönlich zu testen, aber was macht dieser Test?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test IE 8</title>
<script type="text/javascript">
/* <![CDATA[ */
window.onload = function(){alert('Good morning!');}
/* ]]> */
</script>
</head>
<body>
<h1>Hello</h1>
<body>
</html>

Wenn dieser Test wie erwartet funktioniert, probieren Sie das CDATA-Bit um Ihren internen JavaScript-Block. 

Und wenn dies nicht wie erwartet funktioniert, befindet sich wahrscheinlich etwas darüber im externen JavaScript, das verhindert, dass Ihr Onload ausgelöst wird. Das vorherige Poster erwähnte dies. Versuchen Sie an dieser Stelle Ihre Fehlerkonsole oder Ihren Debugger, um den Weg zu weisen.

3
Fran Corpier

onload wird ausgelöst, nachdem ALLE Inhalte geladen wurden (einschließlich externer Bilder usw.). Es ist möglich, dass diese Ressourcen beim ersten Start (bevor sie zwischengespeichert werden) sehr lange geladen werden. Eine andere Möglichkeit ist ein Fehler in Ihrem Code, der sich nur auf IE auswirkt, da Ihre Skripts angehalten werden (aber nur das erste Mal ist ungerade).

1
SpliFF

Der folgende Code funktioniert für mich. Wenn ich die Seite in Firefox lade, sehe ich sofort die Warnung. Wenn ich die Seite zum ersten Mal in IE 8 lade, warnt sie mich vor aktivem Inhalt. Wenn ich den gesperrten Inhalt erlaube, bittet er mich, dies zu bestätigen. Die Warnung wird dann wie erwartet angezeigt. Wenn dies nicht funktioniert, versuchen Sie IE 8 auf einem anderen Computer oder beginnen Sie mit dem Beseitigen von Code auf Ihrer Seite, um nach Fehlern zu suchen. Sie könnten eine binäre Suche durchführen: Kommentieren Sie die erste Hälfte der Seite aus und sehen Sie, ob die Warnung angezeigt wird. Wenn dies immer noch nicht der Fall ist, kommentieren Sie die erste Hälfte aus und kommentieren Sie die zweite Hälfte aus. Wiederholen Sie diesen Vorgang so oft, bis Sie ihn auf den fehlerhaften Code beschränkt haben. Übrigens benötigen Sie kein XHTML für die Einhaltung von IE8. HTML funktioniert gut und hat einige Vorteile.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    window.onload=function() { alert('hello');};
    </script>
  </head>
  <body>
  </body>
</html>

Alte Frage, aber ich hatte das gleiche Problem, aber es stellte sich als ein anderes Problem heraus. Mein Problem war, dass ich <script type="application/javascript"> tat, was <IE9 nicht versteht oder versucht, sogar auszuführen. Damit es für ältere Browser funktioniert, müssen Sie noch text/javascript verwenden, auch wenn dies technisch nicht der richtige Typ ist ...

0
OZZIE

Wenn Sie mit Apache andere Ergebnisse als mit einem anderen Webserver (IIS?) Erhalten und das Endergebnis mit IE8 vergleichen, muss die Differenz im gesendeten Inhaltstypheader liegen. Holen Sie sich das Wget-Dienstprogramm für Ihre Plattform und sehen Sie sich die produzierten Header an. Wenn Sie mit Windows arbeiten, ist die Portable Apps-Version der GUI wget ziemlich nett.

0
Tony Miller

Ich weiß, das ist eine ziemlich alte Frage, aber ich habe gerade das Gleiche gesehen. 

 window.onload=function() { alert('hello');};

wird anders behandelt als 

 window.onload= new function() { alert('hello');};

Das Schlüsselwort hier ist new

Mein JS wurde immer dann beendet, wenn er (onload =) erreicht wurde, bis ich das Wort 'neu' vor 'Funktion' hinzugefügt habe. Auch wenn es in meinem localhost ohne "neu" gut funktioniert hat, aber sobald ich es online gestellt habe, funktioniert es erst, wenn ich "neu" hinzufüge. 

0
Mohammed Joraid