我想在WebView
中显示一个网站,并操纵一些DOM元素。我的意思是,我想删除一个特殊的div元素或用某些东西替换它。
为此我做了这样的事情:
为了替换某些内容,我使用this模型
document.getElementById("demo").innerHTML = "Hello World!";
我将其应用于Android WebView
,如下所示:
public class WebClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, final String url) {
view.loadUrl("javascript:document.getElementById(\"jumbotron-company\").innerHTML = \"\";");
}
}
在我的设备上工作的API是18但不适用于API大于18的模拟器或设备
答案 0 :(得分:3)
@Mattia所说的是对的。如果可能,请使用evaluateJavascript
。它还有另一个优点,就是能够从JavaScript返回结果的值。
但是,如果您需要与API无关的解决方法,请确保使用loadUrl("javascript:...")
评估的代码不会产生任何返回值。赋值返回指定的值。在较新版本的WebView中,此值用作替换现有页面的新页面的内容。
您可以确保您评估的表达式不会以两种方式产生返回值:
在最后添加void(0);
声明,例如loadUrl("javascript:elt.innerHTML='Hello World!';void(0);");
在不返回值的函数中运行代码,例如: loadUrl("(function(){elt.innerHTML='Hello World!';})()");
答案 1 :(得分:0)
从API级别19开始,您应该使用evaluateJavascript:
public void evaluateJavascript(String script,ValueCallback resultCallback)
在API级别19中添加异步评估中的JavaScript 当前显示页面的上下文。如果非null,| resultCallback | 将使用该执行返回的任何结果调用。这个 必须在UI线程上调用方法并进行回调 在UI线程上。
请参阅Android 4.4中的WebView迁移指南: http://developer.android.com/guide/webapps/migrating.html