在webview中设置innerHTML会替换整个文档而不是元素

时间:2014-12-02 07:19:33

标签: javascript android dom webview scaloid

注意:这是scaloid,因此语法与Java略有不同,但所有类都是来自Java的常用Android类。

我使用以下方式初始化网页视图:

webView.settings.setJavaScriptEnabled(true)
webView.setWebChromeClient(new WebChromeClient)

然后我打电话

val jsUrl = "javascript:document.getElementById('" + getTagId(word) + "').innerHTML = '" + guess + "'"
webView.loadUrl(jsUrl)

其中getTagId(word)是现有ID(我已对其进行了调试),guess是一个短字符串,如"abc"

它在我的桌面浏览器中运行良好,但在webview中它取代了整个文档,而不是仅替换元素。

我尝试调试并确保通过用

替换调用来实际找到该元素
"javascript:alert(document.getElementById('" + getTagId(word) + "').innerHTML)"

并显示包含正确内容的提醒!只有更换出错了。

这个错误让我抓狂:-(我错过了什么?

P.S。我正在开发这个开源项目:https://github.com/ilyakogan/gluckentext

2 个答案:

答案 0 :(得分:0)

我仍然不知道为什么这不起作用,但我最后添加了一个JS函数并从原生Android代码调用它,而不是直接从本机代码调用getElementById

我将此添加到HTML:

<script>
    function markSolved(id) { document.getElementById(id).className='solved'; }
</script>

然后在本机代码中写了这个(在我的情况下是Scala,在一般情况下是Java):

val jsUrl = "javascript:markSolved(" + getTagId(answeredWord) + ")"
webView.loadUrl(jsUrl)

答案 1 :(得分:0)

您可以在模块中包装自定义Js代码:

view.loadUrl("javascript:(function(){document.getElementById('uname').value = 'test';})()");

为我工作