无法让javascript innerHtml在WebView上运行

时间:2010-12-14 02:44:24

标签: javascript android

我正在使用带有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>

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我不知道为什么代码的行为与你想要的不同,但我可以说你试图以一种过于复杂的方式来做这件事。将您的JavaScript和HTML存储在XML文件中似乎是一个真正的坏主意。我想这是合法的JavaScript,但命名一个变量与它的父函数相同似乎是错误的,一般来说你不应该使用这样的范围细微之处,除了混淆之外什么都没有。

答案 1 :(得分:0)

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

<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>

这将排除“boolean”被引号括起来或其他蹩脚的可能性。如果这真的是一个Java接口,它可能正在将布尔值转换为字符串。

我不认为布尔值可以作为真正的布尔值传递,特别是因为javascript和java在底层工作方式不同。你可以使用eval,但这不是好习惯,因为如果它是一个函数,它就会运行它。

IE没有解析功能,所以你必须使用它:

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