Встроенный JavaScript не работает с WebView - PullRequest
2 голосов
/ 10 февраля 2012

Этот html-контент хранится в моем strings.xml

<string name="html">
            <![CDATA[
            <html>
                <head>
                    <style>
                        *{
                            margin: 0 0 0 0;
                            padding: 0 0 0 0;
                        }
                        body{
                            background: #000;
                            color: #FFF;
                        }
                        #content {
                            text-align: justify;
                        }
                    </style>
                    <script type="text/javascript">
                    window.onload = function(){

                            document.getElementById("content").innerHTML = "Changed";
                        }
                    </script>
                    </head>
                <body>
                    <div id="content">
                        <p>Hello</p>
                    </div>
                </body>
            </html>
            ]]></string>

Это должно изменить div с идентификатором контента на «Changed», и он будет работать нормально, если вы попробуете его в браузере.Проблема в том, что он не работает в WebView, даже если мы установили setJavascriptEnabled (true)

Вот мое действие:

...
WebView view = (WebView) findViewById(R.id.web_webView1);
        WebSettings settings = view.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setPluginsEnabled(true);
        settings.setDomStorageEnabled(true);

  view.loadData(getString(R.string.html), "text/html", "utf-8");
...

Понятия не имею, почему он не работает?Любая подсказка?:)

Ответы [ 2 ]

2 голосов
/ 02 ноября 2017

У меня была похожая проблема с HTML, когда встроенный javascript не работал в WebView, загруженном через loadData с консольной ошибкой, которая постоянно повторяла:

SyntaxError: Unexpected Identifier

Оказывается, проблема была в том, что мой встроенный синтаксис javascript был слишком свободным, вы должны быть строгими со своими маркерами конца строки, ;.

Например, это не работает:

<html>
    <script>
        function foo() {
            var x = 'sd'
        }
    </script>
</html>

Где ЭТО работает:

<html>
    <script>
        function foo() {
            var x = 'sd';
        };
    </script>
</html>

Обратите внимание на добавление 2 точек с запятой, обе требуются для исправления синтаксической ошибки.

1 голос
/ 12 февраля 2012

Я вижу, что вы загружаете html с помощью view.loadData (), знаете ли вы, что можете передать javascript в loadUrl (), и он будет выполняться напрямую?Кроме того, вы проверили, чтобы убедиться, что строка поступает в этом методе именно так, как вы этого хотите?Это что-то делает в вашем текущем подходе?Я бы посоветовал начать с более простой строки и посмотреть, соответствует ли она ожиданиям.loadData () немного странно выполняет javascript.Что-то, что работает из других браузеров, просто не работает с веб-просмотром через loadData ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...