Разница в парсинге HTML / JavaScript между WebView и браузером

Я обнаружил очень своеобразную разницу между браузером Android и WebView. А именно у меня есть такая разметка:

<script type="text/javascript">
    <!--

    // some js code...

    // -->
</script>

Теперь в браузере это работает отлично. Однако при загрузке разметки в WebView с помощью loadData(markup, "text/html", "utf-8") код JavaScript вообще не выполняется.

Теперь, если я удалю теги комментариев HTML (<!-- и -->), они также будут работать в WebView. Однако я не хочу этого делать, потому что разметка исходит от веб-службы, которую я бы предпочел не менять.

Могу ли я что-нибудь сделать с WebView, чтобы принять эту разметку?


person Felix    schedule 14.08.2013    source источник
comment
FWIW, stackoverflow.com/a/808850/115145   -  person CommonsWare    schedule 14.08.2013
comment
Кроме того, поскольку у вас есть HTML как String, вы можете самостоятельно проанализировать комментарий, если хотите.   -  person CommonsWare    schedule 14.08.2013
comment
@CommonsWare Я знаю, что это очень старая привычка, но именно так этот веб-сервис ее возвращает. Кроме того, это кажется очень распространенной привычкой, поэтому мне кажется странным, что WebView так сильно не справляется с ней, особенно когда приложение браузера обрабатывает это правильно. И я бы предпочел держаться подальше от синтаксического анализа строк, в этой ситуации кажется очень хакерским :).   -  person Felix    schedule 14.08.2013
comment
Я сомневаюсь, что у вас будет много вариантов, кроме подхода к синтаксическому анализу строк. Вы можете сообщить о проблеме - я ее не нашел, когда искал - и, возможно, вы получите официальное заявление по этому поводу.   -  person CommonsWare    schedule 14.08.2013
comment
@CommonsWare готово. Не стесняйтесь добавлять ответ, чтобы я мог отметить его как принятый.   -  person Felix    schedule 14.08.2013


Ответы (1)


В целом трюк с вставкой-JavaScript-в-комментариях больше не является рекомендуемым шаблоном, и поэтому Я бы посоветовал вам пересмотреть свой план, чтобы продолжать служить ему таким образом.

Очевидно, вы включили JavaScript в WebView, иначе он не сработает, когда вы попытаетесь удалить комментарии. Я не знаю другой настройки, чтобы указать WebView игнорировать маркеры комментариев.

Вы можете изучить код браузера AOSP, чтобы попытаться выяснить, что они делают, хотя этот код мерзко, грубо и долго. Вы можете исправить HTML перед тем, как передать его WebView. Вы можете установить конкретный пользовательский агент на WebView, и ваша веб-служба вернет очищенный HTML-код для этого пользовательского агента, не затрагивая остальные клиенты ваших веб-служб. И вы можете увидеть, получили ли вы ответ на отчет об ошибке, хотя уверенности в получении такого ответа нет.

Кроме того, у меня нет идей.

person CommonsWare    schedule 14.08.2013