繁体   English   中英

无法使javascript innerHtml在WebView上工作

[英]Cannot get javascript innerHtml to work on WebView

我正在使用带有javaScript接口的WebView。 我要做的就是如果选中某些复选框,则更改跨度的内部html。

以下是我在strings.xml中拥有的一个字符串的片段。 表单将在onSubmit上调用此函数,如果未通过,则不应继续。 问题是我无法使innerHtml工作(每次都返回true)。

这有效

<script type=\"text/javascript\" language=\"javascript\">
    function pass() {
        return javaInterface.checkboxPass();
        /*
        if(passed) {
            //change the instructions
            document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
        }

        return passed;
        */
    }
</script>

每次都返回true

<script type=\"text/javascript\" language=\"javascript\">
    function pass() {
        var passed= javaInterface.checkboxPass();

        if(passed) {
            //change the instructions
            document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
        }

        return passed;

    }
</script>

这是文档正文中的跨度

<span id=\"txtInstructions\">%1$s</span>

我究竟做错了什么?

我无法说出为什么代码的行为不像您想要的那样,但是我可以告诉您您正在尝试以过于复杂的方式进行操作。 将JavaScript和HTML存储在XML文件中似乎是个坏主意。 我猜这是合法的JavaScript,但是将变量命名为与父函数相同似乎只是错误的,一般来说,您不应该使用这样的作用域微妙之处,除了混淆之外,它无济于事。

我仍然认为您的方法返回的并不是严格意义上的布尔值。 我会尝试做这样的事情:

<script type="text/javascript" language="javascript">
function pass() {
    var passed= javaInterface.checkboxPass();

    if(JSON.parse(passed)) {
        //change the instructions
        document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
    }

    return passed;

}
</script>

这将排除“布尔值”被引号引起来或其他la脚的可能性。 如果这确实是Java接口,则可能是将布尔值转换为字符串。

我不认为布尔值可以作为真实的布尔值传递,尤其是因为javascript和Java在后台运行时有所不同。 您可以使用eval,但这不是一个好习惯,因为如果它是一个函数,它将运行它。

IE没有解析功能,因此您必须使用以下功能:

https://github.com/douglascrockford/JSON-js

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM