Jakie są typowe powody, dla których Javascript rozwijany w Firefoksie zawodzi w IE? [zamknięte]

Opracowałem kilka ulepszonych stron javascript, które działają dobrze na ostatnich Firefoksie i Safari. Przegapiłem sprawdzenie w Internet Explorerze, a teraz okazało się, że strony nie działają na IE 6 i 7(na razie). Skrypty w jakiś sposób nie są wykonywane, strony pokazują, jakby javascript nie było, chociaż niektóre javascript jest wykonywany. Używam własnych bibliotek z manipulacją dom, od YUI 2 używam YUI-Loader i XML-Http-Request, a na jednej stronie używam "psupload", który zależy od JQuery.

Jestem instalowanie Microsoft Script Editor z Office XP i będzie teraz debugować. Teraz też napiszę konkretne testy.

Jakie są typowe wady IE? W jakim kierunku mogę mieć oczy otwarte.

Znalazłem tę stronę, która pokazuje pewne różnice. odwiedź stronę: Quirksmode

Czy możesz z własnego doświadczenia wymienić jakieś typowe rzeczy, których powinienem najpierw szukać?

Później zadam więcej pytań do konkretnych zadań, ale na razie jestem zainteresowany twoimi dowiedz się, dlaczego IE Zwykle zawodzi na skryptach, które działają dobrze w Firefoksie

Edit: Dziękuję za wszystkie świetne odpowiedzi!

W międzyczasie dostosowałem cały kod tak, aby działał również z Internet Explorerem. Zintegrowałem jQuery i zbudowałem na nim własne klasy. To był mój podstawowy błąd, że nie zbudowałem wszystkich moich rzeczy na jQuery od samego początku. Teraz tak.

Również JSLint bardzo mi pomógł.

I wiele pojedynczych numerów z różne odpowiedzi pomogły.

Author: BomberMan, 2010-04-08

18 answers

Prosimy o aktualizację tej listy, jeśli zauważysz jakieś błędy / pominięcia itp.

Uwaga: IE9 rozwiązuje wiele z następujących problemów, więc wiele z nich dotyczy tylko IE8 i poniżej oraz w pewnym stopniu IE9 w trybie dziwactwa. Na przykład IE9 obsługuje SVG, <canvas>, <audio> i <video> natywnie, jednak musisz włączyć tryb zgodności ze standardami, aby były dostępne.


Ogólne:

  • Problemy z częściowym załadowane dokumenty: dobrze jest dodać swój JavaScript w window.onload lub podobnym zdarzeniu, ponieważ IE nie obsługuje wielu operacji w częściowo załadowanych dokumentach.

  • Różne atrybuty: w CSS jest elm.style.styleFloat W IE vs elm.style.cssFloat w Firefoksie. W znacznikach <label> atrybut for jest dostępny za pomocą elm.htmlFor W IE vs elm.for w Firefoksie. Zauważ, że {[12] } jest zarezerwowane W IE, więc {[16] } jest prawdopodobnie lepszym pomysłem, aby powstrzymać IE przed podnoszeniem wyjątek.


Podstawowy język JavaScript:

  • Dostęp do znaków w łańcuchach: 'string'[0] nie jest obsługiwany w IE, ponieważ nie jest w oryginalnych specyfikacjach JavaScript. Używaj 'string'.charAt(0) lub 'string'.split('')[0] zauważając, że dostęp do elementów w tablicach jest znacznie szybszy niż używanie charAt z łańcuchami w IE (chociaż istnieje pewien początkowy narzut, gdy split jest wywoływany po raz pierwszy.)

  • Przecinki przed końcem obiekty: np. {[22] }nie są dozwolone w IE.


Zagadnienia specyficzne dla elementu:

  • Otrzymanie document IFrame :

    • Firefox i IE8+: IFrame.contentDocument (IE zaczął wspierać to od wersji 8.)
    • IE: IFrame.contentWindow.document
    • (IFrame.contentWindow odnosi się do window w obu przeglądarkach.)

  • Canvas: Wersje IE przed IE9 nie obsługuje elementu <canvas>. IE obsługuje VML, który jest jednak podobną technologią, a explorercanvas może zapewnić wrapper na miejsce dla elementów <canvas> dla wielu operacji. Należy pamiętać, że IE8 w trybie zgodności ze standardami jest wielokrotnie wolniejszy i ma o wiele więcej błędów niż w trybie dziwactwa podczas korzystania z VML.

  • SVG: IE9 obsługuje SVG natywnie. IE6 - 8 może obsługiwać SVG, ale tylko z zewnętrznym wtyczki tylko niektóre z tych wtyczek obsługujących manipulację JavaScript.

  • <audio> oraz <video>: są obsługiwane tylko w IE9.

  • Dynamiczne tworzenie przycisków radiowych: IE document.createElement są nie do wykrycia. Zobacz także jak dynamicznie utworzyć przycisk radiowy w Javascript, który działa we wszystkich przeglądarkach? dla sposobu na obejście to.

  • Wbudowany JavaScript w znacznikach <a href> i konflikty onbeforeunload W IE: jeśli w href część znacznika a jest wbudowany JavaScript (np. <a href="javascript: doStuff()">, wtedy IE zawsze wyświetli wiadomość zwróconą z onbeforeunload, chyba że obsługa onbeforeunload zostanie wcześniej usunięta. Zobacz także poproś o potwierdzenie podczas zamykania karty.

  • <script> tag event differences: onsuccess i onerror nie są obsługiwane w IE i są zastępowane przez Specyficzne dla IE onreadystatechange, które jest uruchamiane niezależnie od tego, czy pobieranie się powiodło, czy nie. Zobacz również JavaScript Madness aby uzyskać więcej informacji.


Rozmiar elementu/pozycja / przewijanie i pozycja myszy:

  • Getting element size / position: width / height of elements is sometimes elm.style.pixelHeight/Width in IE than elm.offsetHeight/Width, but either is reliable in IE, especially in quirks mode, and sometimes one gives a better result than the other.

    elm.offsetTop i elm.offsetLeft są często błędnie zgłaszane, co prowadzi do znalezienia pozycji elementów, które są nieprawidłowe, dlatego elementy popup itp. są w wielu przypadkach o kilka pikseli wyłączone.

    Należy również zauważyć, że jeśli element (lub rodzic elementu) ma display z none, to IE wywoła wyjątek podczas uzyskiwania dostępu do atrybutów size/position, zamiast zwracać 0, Jak to robi Firefox.

  • Get the screen size (Getting the viewable obszar ekranu):

    • Firefox: window.innerWidth/innerHeight
    • IE standards mode: document.documentElement.clientWidth/clientHeight
    • IE quirks mode: document.body.clientWidth/clientHeight

  • Pozycja przewijania dokumentu / pozycja myszy: ta nie jest zdefiniowana przez w3c, więc jest niestandardowa nawet w Firefoksie. Aby znaleźć scrollLeft/scrollTop Z document:

    • Firefox i IE w trybie quirks: document.body.scrollLeft/scrollTop
    • IE w trybie standardowym: document.documentElement.scrollLeft/scrollTop
    • Uwaga: niektóre inne przeglądarki używają pageXOffset/pageYOffset też.

      function getDocScrollPos() {
       var x = document.body.scrollLeft ||
               document.documentElement.scrollLeft ||
               window.pageXOffset || 0,
           y = document.body.scrollTop ||
               document.documentElement.scrollTop ||
               window.pageYOffset || 0;
       return [x, y];
      };
      

    Aby uzyskać pozycję kursora myszy, evt.clientX i evt.clientY w zdarzeniach mousemove podadzą pozycję względem dokumentu bez dodawania pozycji przewijania więc poprzednia funkcja będzie musiała być incorporated:

    var mousepos = [0, 0];
    document.onmousemove = function(evt) {
     evt = evt || window.event;
     if (typeof evt.pageX != 'undefined') {
      // Firefox support
      mousepos = [evt.pageX, evt.pageY];
     } else {
      // IE support
      var scrollpos = getDocScrollPos();
      mousepos = [evt.clientX+scrollpos[0], evt.clientY+scrollpos[1]];
     };
    };
    

Selekcje / zakresy:

  • <textarea> i <input> selekcje: selectionStart i selectionEnd nie są zaimplementowane w IE, a w jego miejsce znajduje się zastrzeżony system "zakresów", patrz także pozycja w textarea, w znakach od początku .

  • Uzyskanie aktualnie wybranego tekstu w dokumencie:

    • Firefox: window.getSelection().toString()
    • IE: document.selection.createRange().text


Pobieranie elementów według ID:

  • document.getElementById może również odnosić się do atrybutu name w formularzach (w zależności od tego, który jest zdefiniowany jako pierwszy w dokumencie), więc najlepiej nie mieć różnych elementów, które mają te same name i id. Datuje się to na czasy, kiedy id nie był standardem w3c. document.all (zastrzeżona właściwość IE-specific) jest znacznie szybsza niż document.getElementById, ale ma inne problemy, ponieważ zawsze ustala priorytety name przed id. Ja osobiście używam tego kodu, wycofując się z dodatkowymi sprawdzeniami dla pewności:

    function getById(id) {
     var e;
     if (document.all) {
      e = document.all[id];
      if (e && e.tagName && e.id === id) {
       return e;
      };
     };
     e = document.getElementById(id);
     if (e && e.id === id) {
      return e;
     } else if (!e) {
      return null;
     } else {
      throw 'Element found by "name" instead of "id": ' + id;
     };
    };
    

Problemy z tylko do odczytu innerHTML:

  • IE does not support setting the innerHTML of col, colGroup, frameSet, html, head, style, table, tBody, tFoot, tHead, title, i tr elementów. Oto funkcja, która działa wokół tego dla elementy związane z tabelą:

    function setHTML(elm, html) {
     // Try innerHTML first
     try {
      elm.innerHTML = html;
     } catch (exc) {
      function getElm(html) {
       // Create a new element and return the first child
       var e = document.createElement('div');
       e.innerHTML = html;
       return e.firstChild;
      };
      function replace(elms) {
       // Remove the old elements from 'elm'
       while (elm.children.length) {
        elm.removeChild(elm.firstChild);
       }
       // Add the new elements from 'elms' to 'elm'
       for (var x=0; x<elms.children.length; x++) {
        elm.appendChild(elms.children[x]);
       };
      };
      // IE 6-8 don't support setting innerHTML for
      // TABLE, TBODY, TFOOT, THEAD, and TR directly
      var tn = elm.tagName.toLowerCase();
      if (tn === 'table') {
       replace(getElm('<table>' + html + '</table>'));
      } else if (['tbody', 'tfoot', 'thead'].indexOf(tn) != -1) {
       replace(getElm('<table><tbody>' + html + '</tbody></table>').firstChild);
      } else if (tn === 'tr') {
       replace(getElm('<table><tbody><tr>' + html + '</tr></tbody></table>').firstChild.firstChild);
      } else {
       throw exc;
      };
     };
    };
    

    Zauważ również, że IE wymaga dodania <tbody> do <table> przed dodaniem <tr>s do tego <tbody> elementu podczas tworzenia za pomocą document.createElement, na przykład:

    var table = document.createElement('table');
    var tbody = document.createElement('tbody');
    var tr = document.createElement('tr');
    var td = document.createElement('td');
    table.appendChild(tbody);
    tbody.appendChild(tr);
    tr.appendChild(td);
    // and so on
    

Różnice zdarzeń:

  • Uzyskanie zmiennej event: zdarzenia DOM nie są przekazywane do funkcji w IE i są dostępne jako window.event. Jednym z powszechnych sposobów uzyskania zdarzenia jest użycie np.
    elm.onmouseover = function(evt) {evt = evt||window.event}
    które domyślnie window.event if {[100] } jest niezdefiniowane.

  • Różnice w kodzie zdarzeń kluczowych: kody zdarzeń kluczowych różnią się bardzo, choć jeśli spojrzeć na Quirksmode lub szaleństwo JavaScript, to trudno jest specyficznie dla IE, Safari i Opera są różne ponownie.

  • Różnice w zdarzeniach myszy: atrybut button W IE jest znacznikiem bitowym, który pozwala na użycie wielu przycisków myszy jednocześnie:

    • Left: 1 (var isLeft = evt.button & 1)
    • prawo: 2 (var isRight = evt.button & 2)
    • Centrum: 4 (var isCenter = evt.button & 4)

      W przeciwieństwie do Firefoksa, Firefoksa nie można używać w przeglądarce Firefox, ale można używać tylko jednego przycisku na raz, z lewej strony jako 0, prawej jako 2 i środka jako 1. Zauważ, że, jak wspomina Peter-Paul Koch , jest to bardzo intuicyjne, ponieważ 0 zwykle oznacza "bez przycisku".

      offsetX i offsetYproblematyczne {[168] } i chyba najlepiej ich unikać w IE. Bardziej niezawodnym sposobem uzyskania offsetX i offsetY W IE byłobyuzyskanie pozycji elementu relatywnie położonego i odjęcie go od clientX i clientY.

      Zauważ również, że w IE, aby uzyskać podwójne kliknięcie w zdarzeniu click, musisz zarejestrować zarówno Zdarzenie click, jak i dblclick do funkcji. Firefox odpala click oraz dblclick po dwukrotnym kliknięciu, więc Detekcja specyficzna dla IE jest potrzebna do zachowuj się tak samo.

  • Różnice w modelu obsługi zdarzeń: zarówno własny model IE, jak i model Firefoksa obsługują zdarzenia od dołu do góry, np. jeśli w obu elementach <div><span></span></div> występują zdarzenia, zdarzenia zostaną uruchomione w span następnie div zamiast kolejności, którą są związane, jeśli użyto tradycyjnego np. elm.onclick = function(evt) {}.

    Zdarzenia"Capture" są zwykle obsługiwane tylko w Firefox itp., który wywoła div, a następnie span zdarzenia w kolejności od góry do dołu. IE ma elm.setCapture() i elm.releaseCapture() do przekierowania zdarzeń myszy z dokumentu do elementu (elm w tym przypadku) przed przetworzeniem innych zdarzeń, ale mają one wiele problemów z wydajnością i innymi, więc prawdopodobnie należy unikać.

    • Firefox:

      Dołącz: elm.addEventListener(type, listener, useCapture [true/false])
      Detach: elm.removeEventListener(type, listener, useCapture)
      (type jest np. 'mouseover' bez on)

    • IE: tylko pojedyncze zdarzenie danego typu na elemencie może być dodane w IE - wyjątek jest wywoływany, jeśli dodano więcej niż jedno zdarzenie tego samego typu. Należy również zauważyć, że this odnosi się do window, a nie do związanego elementu w funkcjach zdarzeń (więc jest mniej użyteczny):

      Dołącz: elm.attachEvent(sEvent, fpNotify)
      Detach: elm.detachEvent(sEvent, fpNotify)
      (sEvent jest np. 'onmouseover')

  • Różnice atrybutów zdarzeń:

    • Zatrzymywanie zdarzeń przed przetwarzaniem przez inne funkcje nasłuchowe :

      Firefox: evt.stopPropagation()
      IE: evt.cancelBubble = true

    • Zatrzymywanie np. zdarzeń kluczowych przed wstawianiem znaków lub zatrzymywanie checkboxów przed sprawdzaniem:

      Firefox: evt.preventDefault()
      IE: evt.returnValue = false
      Uwaga: po prostu zwracam false w keydown, keypress, mousedown, mouseup, click i reset będzie również zapobiegać domyślnym.

    • Pobierz element, który wywołał zdarzenie:

      Firefox: evt.target
      IE: evt.srcElement

    • Przesunięcie elementu z którego kursor myszki: evt.fromElement w IE jest evt.target w Firefoksie jeśli w zdarzeniu onmouseout , inaczej evt.relatedTarget

    • Uzyskanie elementu, do którego przesunięto kursor myszy: evt.toElement W IE jest evt.relatedTarget w Firefoksie jeśli w zdarzeniu onmouseout, w przeciwnym evt.target

    • Uwaga: evt.currentTarget (element, z którym związane było zdarzenie) nie ma odpowiednika w IE.

 120
Author: cryo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:04

Sprawdź również przecinki takie jak te lub podobne, jeśli występują w Twoim kodzie

var o={
'name1':'value1',
'name2':'value2',
} 

Ostatni przecinek (po wartości2) będzie tolerowany przez Firefoksa, ale nie przez IE

 26
Author: Luca Rocchi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-03 05:06:12

Jeśli trzymasz się używania jQuery lub YUI jako znacznika postu, powinieneś mieć minimalne różnice między przeglądarkami...po to są frameworki, aby zająć się tymi różnicami między przeglądarkami.

Dla przykładu, spójrz na quirksmode Dom traversal page , według niego IE nie obsługuje większości rzeczy...podczas gdy true, frameworki tak, na przykład IE nie obsługuje elem.childElementCount, ale w jQuery: $(elem).children().size() działa, aby uzyskać tę wartość, w każdej przeglądarce. Znajdziesz w bibliotece jest coś, co obsłuży 99% nieobsługiwanych spraw w różnych przeglądarkach, przynajmniej za pomocą skryptu...w CSS może być konieczne przejście do wtyczek dla biblioteki, częstym przykładem tego jest uzyskanie zaokrąglonych rogów działających w IE...ponieważ nie ma wsparcia CSS dla takich.

Jeśli jednak zaczniesz robić rzeczy bezpośrednio, jak document.XXX(thing), to nie jesteś w bibliotece, robisz javascript bezpośrednio (to wszystko javascript, ale rozumiesz o co chodzi :), a to może, ale nie może powodować problemów, w zależności od tego, jak pijany był zespół IE podczas wdrażania tej konkretnej funkcji.

Z IE jest bardziej prawdopodobne, że nie uda się na stylizacji wychodzi dobrze niż surowe problemy javascript, animacje kilka pikseli off i tego typu rzeczy, dużo więcej-tak w IE6 oczywiście.

 12
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 10:26:29

GetElementbyID będzie również pasował do atrybutu name W IE, ale nie w innych przeglądarkach, a IE wybierze ten, który znajdzie PIERWSZY.

Przykład:

<script>
 var foo = document.getElementById('bar');
</script>

....
<input name="bar" type="text" />  //IE will get this element
<span id="bar"> Hello, World! </span>  //FF,Safari,Chrome will get this element
 10
Author: GSto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 14:28:29

Jest wiele rzeczy, ale jedną z pułapek, w którą wpadłem, było to, że wiele przeglądarek akceptuje JSON bez cytowanych nazw, podczas gdy ie6 i ie7 nie.

{ name: "Jakob" } // will often work, but not in ie6/ie7
{ "name": "Jakob" } // Better!

Edit : dla jasności, jest to problem tylko wtedy, gdy wymagany jest rzeczywisty JSON, w przeciwieństwie do dosłownego obiektu. JSON jest podzbiorem dosłownej składni obiektu i jest rozumiany jako format wymiany danych (jak XML), dlatego jest zaprojektowany tak, aby był bardziej wybierany.

 5
Author: Jakob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 11:06:52

Różne Wsparcie Dla JavaScript

IE nie obsługuje (większości) rozszerzeń dodanych do JavaScript od wersji 1.5.

New in 1.6

  • Metody Tablicy - indexOf(), lastIndexOf(), every(), filter(), forEach(), map(), some()
  • for each ... in - iteracja wartości zamiast nazw właściwości.

New in 1.7

New in 1.8

  • Metody Tablicy - reduce(), reduceRight()
  • skróty do definiowania funkcji.

Niektóre z tych rzeczy wymagają podania numeru wersji JavaScript, pod którym ma być uruchomiony (który złamie się pod IE), ale niektóre rzeczy, takie jak [1,2,3].indexOf(2) mogą nie wydawać się takie wielkie, dopóki nie spróbujesz uruchomić go w IE

 5
Author: gnarf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-09 17:27:56

Główne różnice między JavaScript w IE i JavaScript w nowoczesnych przeglądarkach (ex, Firefox) można przypisać tym samym przyczynom różnic w CSS / (X)HTML cross-browser. W tamtych czasach nie było de facto standardu; IE / Netscape / Opera toczyła wojnę o darń, implementując większość specyfikacji, ale także pomijając niektóre, a także tworząc własne specyfikacje, aby zyskać przewagę nad sobą. Mogłem iść na długość, ale przejdźmy do wydania IE8: JavaScript był unikany/pogardzany przez lata, a wraz z rozwojem FF i pogardą webcomm, IE zdecydował się skupić głównie na rozwijaniu ich CSS z IE6 na. I w zasadzie zostawił wsparcie DOM. Obsługa DOM IE8 równie dobrze może być IE6, która pojawiła się w 2001....so obsługa Dom IE jest prawie dziesięć lat za nowoczesnymi przeglądarkami. Jeśli masz rozbieżności JavaScript specyficzne dla silnika układu, najlepiej jest zaatakować go w ten sam sposób, w jaki wzięliśmy na problemy CSS; kierowanie tej przeglądarki. NIE UŻYWAJ SNIFFING przeglądarki, użyj wykrywania funkcji, aby wywęszyć przeglądarkę/jej poziom obsługi DOM.

JScript nie jest własną implementacją ECMAScript IE; JScript był odpowiedzią IE na JavaScript Netscape, który powstał przed ECMAScript.

Jeśli chodzi o atrybuty type w elemencie script, type= "text / javascript" jest domyślnym standardem (przynajmniej w HTML5), więc nigdy nie potrzebujesz atrybutu type, chyba że skrypt nie jest JavaScript.

O ile IE nie obsługa innerHTML...innerHTML został wymyślony przez IE i do dziś nie jest standardem DOM. Inne przeglądarki przyjęły go, ponieważ jest przydatny, dlatego można go używać między przeglądarkami. Jeśli chodzi o dynamiczną zmianę tabel, MSDN mówi: "ze względu na specyficzną strukturę wymaganą przez tabele, właściwości innerText i innerHTML obiektów table i TR są tylko do odczytu."Nie wiem, jak wiele z tego było prawdą na początku, ale najwyraźniej nowoczesne przeglądarki domyśliły się tego podczas radzenia sobie ze złożonością układu tabeli.

Gorąco polecam lekturę PPK na JavaScript Jeremy Keith ' s DOM Scripting Douglas Crockford ' s JavaScript: the Good Parts i Christian Hellman zaczyna JavaScript ze skryptami DOM i Ajax , aby uzyskać silne zrozumienie JavaScript.

Jeśli chodzi o frameworki/biblioteki, jeśli nie masz jeszcze silnej znajomości JavaScript, powinieneś ich unikać. 2 lata temu spadam w pułapkę jQuery i chociaż udało mi się wykonać wspaniałe wyczyny, nigdy nie nauczyłem się cholernej rzeczy o prawidłowym kodowaniu JavaScript. Z perspektywy czasu, jQuery jest wicked awesome Dom Toolkit, ale mój brak nauczenia się właściwych zamknięć, prototypowego dziedziczenia, itp. nie tylko odzyskałem swoją osobistą wiedzę, ale też zacząłem robić ogromne hity, bo nie miałem pojęcia, co robię.

JavaScript jest językiem przeglądarki; jeśli jesteś inżynierem po stronie klienta / front-end jest to najważniejsze, że polecenie JavaScript. Węzeł.js przynosi JavaScript full tilt, widzę ogromne postępy podejmowane codziennie w jego rozwoju; po stronie serwera JavaScript będzie standardem w bardzo niedalekiej przyszłości. Wspominam o tym, aby jeszcze bardziej podkreślić, jak ważny jest JavaScript teraz i będzie.

JavaScript zrobi więcej fal niż Rails.

Happy Scripting!

 3
Author: albert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-25 19:43:38

Niektóre natywne obiekty są tylko do odczytu, ale tak naprawdę nie wyglądają (można do nich pisać, ale to nie ma żadnego efektu). Na przykład, popularny zaawansowany javascript opiera się na rozszerzaniu obiektu Element poprzez nadpisywanie metod systemowych, np. zmieniając Element.prototyp.appendChild () aby zrobić więcej niż dodanie węzła potomnego-powiedzmy, zainicjalizuj go danymi rodzica. To nie powiedzie się po cichu na IE6-oryginalna metoda zostanie wywołana na nowych obiektach zamiast na nowych.

Niektóre przeglądarki (nie pamiętaj, które teraz) traktuj nowe linie między znacznikami HTML jako węzły tekstowe, podczas gdy inne nie. więc childNodes( n), nextSibling (), firstChild () i tym podobne będą zachowywać się bardzo inaczej.

 2
Author: SF.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 10:57:35

Przecinki końcowe w tablicach i literałach obiektów były problemem, Nie sprawdzane ostatnio (czyli IE8):

var a = [ 1, 2, 3, ];
var o = { a:1, b:2, c:3, };

Spowodowałoby to dodatkowy kod podczas generowania takich struktur po stronie serwera.

 2
Author: npup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 14:58:21

Znalazłem dziś rano, współpracownik ustawił znacznik skryptu jako: <script type="application/javascript"> ponieważ jego autouzupełnianie ide miało to przed "text/javascript"

Ale okazuje się, że IE po prostu ignoruje cały skrypt, jeśli używasz "application / javascript", musisz użyć "text / javascript"

 2
Author: katjones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 18:15:21

Znalazłem dziwną dziwność niedawno z Internet Explorer. Używałem YUI i zastępowałem zawartość ciała tabeli poprzez ustawienie innerHTML

Y.one('#elementId').set('innerHTML', '<tr><td>Column 1</td></tr>');

To będzie działać we wszystkich przeglądarkach z wyjątkiem IE. W końcu odkryłem, że nie można zastąpić innerHTML tabeli w IE. Musiałem utworzyć węzeł za pomocą YUI, a następnie dołączyć ten węzeł.

var myNode = Y.node.create('<tr><td>Column 1</td></tr>');
Y.one('#elementId').append(myNode);
To było zabawne, aby dowiedzieć się!
 2
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-09 17:02:24

Dodatkowe przecinki i brakujące przecinki były zwykle problemem w IE, podczas gdy działa płynnie na FF.

 1
Author: Deep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 11:00:24

IE jest bardzo surowy o brak"; " tak jest zwykle, że.

 1
Author: Sam3k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 13:18:06

Jeśli to coś warte, właśnie natknąłem się na ten paskudny problem w

Powiedzmy, że masz taki html:

<table><tr><td>some content...</td></tr></table>

I z jakiegoś powodu (miałem dobry) musisz odzyskać cały HTML w tabeli przed ostatnim zamykającym TR możesz spróbować czegoś takiego:

var tableHtml = document.getElementById('thetable').innerHTML;
var fragment = tableHtml.substring(0, tableHtml.lastIndexOf('</tr>'));

 1
Author: tomfumb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-25 00:38:13

IE nie jest nowoczesną przeglądarką i luźno podąża za Ecmascriptem.

 0
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-08 12:12:20

Wspomniałeś o jQuery, z którym jestem mniej zaznajomiony, ale dla ogólnego odniesienia, a konkretnie z prototypem, jedną rzeczą, na którą należy uważać, są słowa zarezerwowane / nazwy metod w IE. Wiem, że często mnie dopadają takie rzeczy jak:

someElement.appendChild(new Element('label',{ **for**: someInput.id }).update( someLabelText );

(nowy Element (tagName, propertyHash) to sposób tworzenia nowych elementów w Protitype). W IE, {[1] } musi być 'for':, ponieważ for jest słowem zastrzeżonym. Co ma sens. ale FireFox to toleruje.

Inny przykład:

someElement.wrap('div').addClassName('someClass')

(metoda wrap w prototypie zawija jeden element w inny) -- w IE, na textareas, wrap jest właściwością i Element.wrap() musi być używana zamiast metody

Są to dwa przykłady, które przychodzą mi na myśl z mojego doświadczenia. Są one oparte na prototypie, ale głównym problemem nie jest: uważaj na metody/etykiety/identyfikatory, które IE uważa za słowa zarezerwowane, ale FireFox lub Safari tolerują.
 0
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-09 12:31:57

Faktem jest, że IE nie obsługuje JavaScript... Wspiera on własną implementację ECMAScript: JScript... co jest trochę inne...

 0
Author: xavierm02,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-10 10:42:57

Używanie console.log() do wysyłania błędów do konsoli błędów Firefoksa spowoduje awarię skryptów w IE. Trzeba pamiętać, aby je wyjąć podczas testów w IE.

 0
Author: Erikk Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-11 01:32:50