【问题标题】:Cannot get javascript innerHtml to work on WebView无法让 javascript innerHtml 在 WebView 上工作
【发布时间】:2010-12-14 02:44:23
【问题描述】:

我正在使用带有 javaScript 界面的 WebView。如果勾选了某些复选框,我要做的就是更改跨度的内部 html。

下面是我在 strings.xml 中的一个字符串的 sn-p。表单将在提交时调用此函数,如果未通过,则不应继续。问题是我无法让 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>

这每次都返回真

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

我做错了什么?

【问题讨论】:

  • 你有什么理由使用反斜杠转义引号字符?否则这不是标准的 HTML/javascript。
  • checkboxPass 的代码是什么?如果它返回一个对象或字符串,if(pass) 将始终评估为真。例如,据我所知,if("false") 将评估为 true。只有当 checkboxPass 返回 false、null 或 undefined 时才会为 false。
  • @tjameson javaInterface.checkboxPass() 返回一个布尔值
  • @slebetman 因为它存储在 XML 字符串文件中
  • 这仍然是一个活跃的问题吗?

标签: javascript android


【解决方案1】:

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

【讨论】:

  • 我把变量名改成pass了,还是有同样的问题
  • 我必须看到您的代码的更完整视图,最好我希望看到它托管在服务器上。
【解决方案2】:

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

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

这将排除“布尔值”被引号或其他蹩脚的东西包裹的可能性。如果这确实是一个 Java 接口,它可能正在将布尔值转换为字符串。

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

IE 没有解析函数,所以你必须使用这个:

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

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多