Problem z parserem HTML w IE


Próbuję utworzyć okno dialogowe, które będzie wyświetlane tylko wtedy, gdy wybrana jest przeglądarka IE (dowolna wersja), jednak pojawia się ten błąd:

Komunikat: Błąd analizy HTML: nie można zmodyfikować elementu nadrzędnego kontenera, dopóki element podrzędny nie zostanie zamknięty (KB927917)

To wszystko przy „Line/Char/Code” 0, więc nie wiem, gdzie jest błąd. Kod, którego używam, jest następujący:
<script type="text/javascript"> 
<!--
if(BrowserDetect.browser.contains("Explorer"))
{
var Nachricht = 'Hemos detectado que está utilizando ' + BrowserDetect.browser + ' ' +
BrowserDetect.version + '. Puede que algunas funciones no estén habilitadas. Si desea experimentar todo el potencial del portal, por favor intente desde otro navegador (browser). Gracias
showDialog('¡Aviso Importante!',Nachricht,'warning',10);
}
</script>

Zauważyłem, że jeśli usunę "BrowserDetect.browser" i .version, usunie to błąd, ale potrzebuję ich, aby sprawdzić =/... wszelkie pomysły byłyby mile widziane =).
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Modyfikujesz dokument podczas jego ładowania (gdy przeglądarka nie ma „widzianego” zamykającego znacznika dla tego elementu). Powoduje to bardzo trudną sytuację w parserze i nie jest dozwolone w IE.
Blog IE
http://blogs.msdn.com/ie/archi ... .aspx
ma na to wytłumaczenie.
Rozwiązaniem jest zmiana innego elementu, który jest wcześniej w dokumencie i został w pełni załadowany (gdzie przeglądarka już widziała dla niego tag zamykający).

BTW: wiersz
& </
nie jest dozwolony w elemencie
& < script & >
. Użyj
& < \/
, który jest bezpiecznym odpowiednikiem w ciągach JS.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Miałem ten sam problem. Mój problem polegał na tym, że wywoływałem funkcję JavaScript przed zamknięciem zawierającego
div
.
Aby rozwiązać ten problem, wywołuję funkcję Javascript w obsłudze zdarzeń jQuery
ready
:
$(document).ready(function(){
some_random_javascript_function();
});
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czytanie

dokument
http://blogs.msdn.com/ie/archi ... .aspx
związane z porneL, znalazłem proste obejście tego problemu: Dodanie do skryptu parametru „defer”, wszystko działa dobrze.
<script defer=true>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jak powiedział Sergey Kiriyenko: używaj komentarzy warunkowych. Poniższy kod uruchomi tylko przeglądarkę internetową. Firma Microsoft ma dobre informacje pod adresem

to
http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx
strona.
<!--[if IE]>
<script type="text/javascript">
showDialog('¡Aviso Importante!','message','warning',10);
</script>
<![endif]-->

Jeśli potrzebujesz konkretnej wersji, możesz to również przetestować:
<!--[if lte IE 7]>
<script type="text/javascript">
showDialog('¡Aviso Importante!','Your are using a too old version of Internet explorer. Please upgrade','warning',10);
</script>
<![endif]-->
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wąchanie przeglądarki to kluge i należy go unikać, gdy tylko jest to możliwe. Najlepiej obwąchać

możliwości

którego chcesz użyć. Powiedzmy, że chcesz wykonać wyrażenie XPath za pomocą document.evaluate (), ale nie wiesz, czy jest obsługiwane. Zamiast szukać obsługiwanych przeglądarek, zrób to:
if (document.evaluate) {
// go ahead and use it
} else {
// browser doesn't support it; do something else
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najlepszym sposobem uzyskania dostępu do IE jest po prostu

komentarze warunkowe
... Nie musisz nawet używać JavaScript. Zobacz na przykład

http://www.positioniseverythin ... .html
http://www.positioniseverythin ... .html
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Może trochę późno, ale ten błąd pojawia się również, jeśli używasz SWFObject i masz 2 elementy div o tym samym identyfikatorze.
Miałem zduplikowane elementy div, [z id = "flashcontent" dzięki kopiowaniu i wklejaniu].
Rozwiązany przez zmianę nazw elementów DIV z unikalnymi identyfikatorami.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

javascript działa bardzo łatwo z navigator.appName. (cm.

http://de.selfhtml.org/javascr ... r.htm
http://de.selfhtml.org/javascr ... r.htm
)
Można go użyć do utworzenia instrukcji if. Bardzo proste, po prostu spróbuj!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Obecna wersja

https://apis.google.com/js/plusone.js
https://apis.google.com/js/plusone.js
spowodował ten błąd w IE8 w jednej z moich witryn.
Najprostszym rozwiązaniem jest odinstalowanie Google +.
Proste rozwiązanie - zawiń kod w funkcje jquery document.ready lub podobne:
$(document).ready(function(){
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
});

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się