Проблема с синтаксическим анализатором HTML в IE

Это еще одна интересная альтернатива https://github.com/Shy-Ta/expression-evaluator-demo

. Использование очень простое и выполняет задание, например:

  ExpressionsEvaluator evalExpr = ExpressionsFactory.create("2+3*4-6/2");  
  assertEquals(BigDecimal.valueOf(11), evalExpr.eval()); 

35
задан Tsundoku 19 November 2008 в 20:31
поделиться

6 ответов

Вы изменяете документ, в то время как он загружается (когда браузер не "видел" закрывающего тэга для этого элемента). Это вызывает очень щекотливую ситуацию в синтаксическом анализаторе и в IE, который это не позволяется.

блог IE имеет объяснение этого.

решение состоит в том, чтобы изменить другой элемент, которым это находится ранее в документе и было загружено полностью (где браузер уже видел закрывающий тэг для него).


BTW: строка </ не позволяется в <script> элемент. Используйте <\/, который является безопасным эквивалентом в строках JS.

27
ответ дан Kornel 24 September 2019 в 00:50
поделиться

Сниффинг браузера является клуджем, которого нужно избежать, если это возможно. Лучше осуществлять сниффинг для возможность , Вы хотите использовать. Скажите, что Вы хотите выполнить выражение XPath с помощью document.evaluate (), но Вы не знаете, поддерживается ли оно. Вместо того, чтобы осуществить сниффинг для поддерживаемых браузеров, сделайте это:

if (document.evaluate) {
    // go ahead and use it
} else {
    // browser doesn't support it; do something else
}
3
ответ дан Robert J. Walker 24 September 2019 в 00:50
поделиться

Лучший способ обратиться к IE только условные комментарии . Вы не должны даже использовать JavaScript. Посмотрите, например http://www.positioniseverything.net/articles/ie7-dehacker.html .

2
ответ дан 24 September 2019 в 00:50
поделиться

Как сказанный Sergey Kirienko: используйте условные комментарии. Код ниже будет только выполнен 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]-->
3
ответ дан some 24 September 2019 в 00:50
поделиться

I had this same problem. My issue was that I was calling a Javascript function before the containing div was closed.

To fix the problem, I call the Javascript function within the jQuery ready event handler:

$(document).ready(function(){
    some_random_javascript_function();
});
9
ответ дан 27 November 2019 в 07:16
поделиться

Возможно, немного поздно, но эта ошибка также появляется, если вы используете SWFObject и имеете 2 блока с одинаковым идентификатором.

У меня были дублирующиеся блоки div [с id = "flashcontent" благодаря функции копирования и вставки].

Решено путем переименования блоков div с уникальными идентификаторами.

0
ответ дан 27 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: