Я пытаюсь создать диалоговое окно, которое будет отображаться только в том случае, если выбран браузер IE (любая версия), однако я получаю эту ошибку:
Message: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
Это все в "Line / Char / Code" 0, поэтому я не знаю, где ошибка. Я использую следующий код:
<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. <p></p> Si desea experimentar todo el potencial del portal, por favor intente desde otro navegador (browser). <p></p>Gracias
showDialog('¡Aviso Importante!',Nachricht,'warning',10);
}
</script>
Я заметил, что если я удалю "BrowserDetect.browser" и .version, это удалит ошибку, но они мне нужны для проверки = / ... любые идеи будут оценены =).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Лучший способ обратиться только к IE - условные комментарии. Вам даже не нужно использовать JavaScript. См., Например, http://www.positioniseverything.net/articles/ie7-dehacker.html.
Как сказал Сергей Кириенко: используйте условные комментарии. Приведенный ниже код будет выполняться только в Internet Explorer. У Microsoft есть хорошая информация на странице это.
<!--[if IE]>
<script type = "text/javascript">
showDialog('¡Aviso Importante!','message','warning',10);
</script>
<![endif]-->
Если вам нужна конкретная версия, вы также можете протестировать ее:
<!--[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]-->
Обнюхивание браузера - это путаница, которой следует по возможности избегать. Лучше всего нюхать способность, который вы хотите использовать. Допустим, вы хотите выполнить выражение XPath с помощью document.evaluate (), но не знаете, поддерживается ли оно. Вместо того, чтобы искать поддерживаемые браузеры, сделайте следующее:
if (document.evaluate) {
// go ahead and use it
} else {
// browser doesn't support it; do something else
}
Вы изменяете документ во время его загрузки (когда браузер не «видел» закрывающий тег для этого элемента). Это вызывает очень сложную ситуацию в парсере, а в IE это недопустимо.
У Блог IE есть объяснение этого.
Решение состоит в том, чтобы изменить другой элемент, который ранее был в документе и был полностью загружен (где браузер уже видел закрывающий тег для него).
Кстати: строка </ не допускается в элементе <script>. Используйте </, который является безопасным эквивалентом в строках JS.
У меня была такая же проблема. Моя проблема заключалась в том, что я вызывал функцию Javascript до закрытия содержащего div.
Чтобы решить эту проблему, я вызываю функцию Javascript в обработчике событий jQuery ready:
$(document).ready(function(){
some_random_javascript_function();
});
Если вы собираетесь использовать jQuery, вы можете использовать удобное сокращение синтаксиса для document.ready: $ (function () {return false;});
Возможно, немного поздно, но эта ошибка также появляется, если вы используете SWFObject и имеете 2 div с одинаковым идентификатором.
У меня были дублированные блоки div [с id = "flashcontent" благодаря функции копирования и вставки].
Решено переименованием div с уникальными идентификаторами.
Читая док, связанный с porneL, я нашел простой способ решения этой проблемы: добавив параметр defer в скрипт, все работает нормально.
<script defer=true>
javascript очень легко работает с navigator.appName. (см. http://de.selfhtml.org/javascript/objekte/navigator.htm) Вы можете создать if-запрос с этим. Очень просто, попробуйте!
Текущая версия https://apis.google.com/js/plusone.js вызвала эту ошибку в IE8 на одном из моих сайтов.
Самое простое решение - удалить гугл +.
Простое решение - оберните код в jquery document.ready -function или аналогичный:
$(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);
});
Примечание для будущих читателей: вам на самом деле не нужен jQuery для этого - выполните поиск обработчиков событий
loadилиDOMReady.