内联javascript无法使用WebView

时间:2012-02-10 18:09:18

标签: javascript android webview

我将这个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>

这应该将id内容的div更改为&#34;已更改&#34;如果你在浏览器中尝试它,它工作正常。问题是,即使我们有setJavascriptEnabled(true),它在WebView中也不起作用

这是我的活动:

...
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 个答案:

答案 0 :(得分:2)

我遇到类似的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 :(得分:1)

我看到你正在使用view.loadData()加载html,你知道你可以将javascript传递给loadUrl()并且它会直接执行吗?此外,您是否已检查以确保字符串是否按照您希望的方式到达该方法? 在你目前的方法中它是否正在做任何事情?我建议从一个更简单的字符串开始,看看它是否符合您的预期。 loadData()执行javascript有点奇怪。在其他浏览器中工作的某些东西不能通过loadData()与webview一起使用。