2012-11-09 2 views
10

Ich stolperte über dieses Projekt: https://github.com/termi/ES5-DOM-SHIM, die fast vollständige ES5-Unterstützung in allen Browsern einschließlich der alten IEs bietet.Verwendung von ES5 Shim mit Jquery/Mootools/Prototyp

Ich habe es in reinen JS-Projekten verwendet, aber jetzt habe ich haben jquery/mootools/prototype in einem Projekt (das High Charts verwendet).

Auch wenn nur das jquery-Skript eingeschlossen ist, werden Fehler in IE8 zusammen mit diesem Shim geworfen. Wie kann ich das Beste aus beiden Welten behalten?

Mein Dokument Kopf sieht wie folgt aus:

<!--[if lte IE 8]> 
<script src="/js/a.ie8.js"></script> 
<![endif]--> 
<script src="/js/a.js"></script> 
<script src="/js/jquery.1.8.2.js"></script> 
<script src="/js/main.js"></script> 
+1

Was macht Ihre 'main.js' Datei? Woher bekommst du einen Fehler und welchen? Ich habe meine Kristallkugel zu Hause gelassen. – Bergi

+0

@Bergi Meine main.js ist für jetzt leer.Der Fehler ist: 'Objekt unterstützt diese Eigenschaft oder Methode nicht - a.ie8.js, Zeile 46 Zeichen 428' – Greg

+0

Also, was ist Zeile 46 dieser Datei (und ihr Kontext)? – Bergi

Antwort

1

Stellen Sie sicher, die richtige HTML-Struktur verwenden, zB:

<!DOCTYPE html> 
<head> 
    <meta charset="UTF-8"> 
    <!--[if lte IE 8]> 
    <script src="a.ie8.js"></script> 
    <![endif]--> 
    <script src="a.js"></script> 
    <script src="jquery.1.8.2.js"></script> 
    <script src="main.js"></script> 
</head> 
<body> 

</body> 

Wenn ich Ihre Struktur (ohne Doctype) testete ich auch war einen Fehler in IE erhalten.

1

Dies ist eine späte Antwort und wahrscheinlich geht es nicht um Ihr Hauptproblem. Also auf das Risiko von downvoted ...

Soweit ich aus dem Github-Projekt erkennen ES5-DOM-SHIM bietet nicht nur Shim für ES5-Funktionen, sondern versucht auch DOM-Funktionen Shim, die nicht auf IE verfügbar sind. Dies ist sehr nützlich, wenn Sie direkt mit der DOM-API programmieren möchten.

jQuery bietet auch eine Kompatibilitätsschicht, die Feature-Check bietet, um Implementierungslücken zu füllen (so benötigen Sie kein DOM-Polyfill, wenn Ihr Code nur jQuery verwendet).

Mischen beide keine gute Idee zu sein scheint, weil:

  • Sie sind viel polyfill Logik in Ihrem JS duplizieren.
  • Polyfill hat Einschränkungen. Wenn jQuery also davon ausgeht, dass Ihr Browser eine Funktion vollständig unterstützt, können unerwartete Fehler auftreten.

Wenn Sie JavaScript polyfills nur wollen, versuchen Sie mit https://github.com/kriskowal/es5-shim (beachten Sie ES5-DOM-SHIM darauf basiert)

0

Zunächst einmal sicher sein, ein Doctype Ihrem HTML-Dokument hinzuzufügen:

<!DOCTYPE html> 

Es muss in der ersten Zeile Ihrer HTML-Datei (en) sein. Das macht alten IE im standardkonformen Modus arbeiten und einige Macken vermeiden.

Auf der anderen Seite scheint ES5-DOM-SHIM versuchen, zu viel zu tun, und Sie möchten derzeit verwenden jQuery, die bereits Methoden, die mit DOM-Inkonsistenzen zwischen Browsern umgehen.

Ich würde Ihnen empfehlen, nur jQuery zu verwenden, und wenn Sie die neuen HTML5-Elemente und/oder benutzerdefinierte Elemente unterstützen müssen, verwenden Sie die HTML5shiv (die defacto Möglichkeit, HTML5-Elemente Unterstützung auf IE hinzuzufügen). Wenn Sie wirklich ES5/6-Shims benötigen, verwenden Sie Bibliotheken mit breiterer Unterstützung aus der Community, wie es5-shim und es6-shim.