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.
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 vselm.style.cssFloat
w Firefoksie. W znacznikach<label>
atrybutfor
jest dostępny za pomocąelm.htmlFor
W IE vselm.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żywaniecharAt
z łańcuchami w IE (chociaż istnieje pewien początkowy narzut, gdysplit
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ę dowindow
w obu przeglądarkach.)
-
Firefox i IE8+:
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 konfliktyonbeforeunload
W IE: jeśli whref
część znacznikaa
jest wbudowany JavaScript (np.<a href="javascript: doStuff()">
, wtedy IE zawsze wyświetli wiadomość zwróconą zonbeforeunload
, chyba że obsługaonbeforeunload
zostanie wcześniej usunięta. Zobacz także poproś o potwierdzenie podczas zamykania karty.<script>
tag event differences:onsuccess
ionerror
nie są obsługiwane w IE i są zastępowane przez Specyficzne dla IEonreadystatechange
, 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 thanelm.offsetHeight/Width
, but either is reliable in IE, especially in quirks mode, and sometimes one gives a better result than the other.elm.offsetTop
ielm.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
znone
, 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
-
Firefox:
-
Pozycja przewijania dokumentu / pozycja myszy: ta nie jest zdefiniowana przez w3c, więc jest niestandardowa nawet w Firefoksie. Aby znaleźć
scrollLeft
/scrollTop
Zdocument
:-
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
ievt.clientY
w zdarzeniachmousemove
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]]; }; };
-
Firefox i IE w trybie quirks:
Selekcje / zakresy:
<textarea>
i<input>
selekcje:selectionStart
iselectionEnd
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
-
Firefox:
Pobieranie elementów według ID:
-
document.getElementById
może również odnosić się do atrybutuname
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 samename
iid
. Datuje się to na czasy, kiedyid
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 priorytetyname
przedid
. 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
, itr
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 jakowindow.event
. Jednym z powszechnych sposobów uzyskania zdarzenia jest użycie np.elm.onmouseover = function(evt) {evt = evt||window.event}
które domyślniewindow.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 (
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 jakovar isCenter = evt.button & 4
)0
, prawej jako2
i środka jako1
. Zauważ, że, jak wspomina Peter-Paul Koch , jest to bardzo intuicyjne, ponieważ0
zwykle oznacza "bez przycisku".offsetX
ioffsetY
są problematyczne {[168] } i chyba najlepiej ich unikać w IE. Bardziej niezawodnym sposobem uzyskaniaoffsetX
ioffsetY
W IE byłobyuzyskanie pozycji elementu relatywnie położonego i odjęcie go odclientX
iclientY
.Zauważ również, że w IE, aby uzyskać podwójne kliknięcie w zdarzeniu
click
, musisz zarejestrować zarówno Zdarzenieclick
, jak idblclick
do funkcji. Firefox odpalaclick
orazdblclick
po dwukrotnym kliknięciu, więc Detekcja specyficzna dla IE jest potrzebna do zachowuj się tak samo.
-
Left: 1 (
-
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 wspan
następniediv
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ępniespan
zdarzenia w kolejności od góry do dołu. IE maelm.setCapture()
ielm.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'
bezon
) -
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ę dowindow
, 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 zwracamfalse
wkeydown
,keypress
,mousedown
,mouseup
,click
ireset
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 jestevt.target
w Firefoksie jeśli w zdarzeniuonmouseout
, inaczejevt.relatedTarget
Uzyskanie elementu, do którego przesunięto kursor myszy:
evt.toElement
W IE jestevt.relatedTarget
w Firefoksie jeśli w zdarzeniuonmouseout
, w przeciwnymevt.target
Uwaga:
evt.currentTarget
(element, z którym związane było zdarzenie) nie ma odpowiednika w IE.
-
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
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.
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
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.
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
- przypisanie destrukcji --
[a,b] = [1,2]
- Iteratory i Generatory
-
let
orazyeild
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
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!
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.
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.
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"
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ę!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.
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.
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>'));
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.
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
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...
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.
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