我想在加载网页后修改html中的一个输入值。我准备通过使用WebView调用javascript函数来完成此操作。如果我将android:targetSdkVersion
设置为18,它运行良好。但是一旦我将其设置为19,它就会显示第二个网址的值,即使它只是javascript调用。这是测试代码:
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebActivity extends Activity {
private WebView mWebView;
private String mJSCall;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
setContentView(R.layout.activity_webview);
mWebView = (WebView)findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
if (mJSCall != null) {
view.loadUrl(mJSCall);
mJSCall = null;
}
super.onPageFinished(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
mWebView.loadUrl("http://wap.soso.com/?g_f=2405");
String keyword = "My Keyword";
mJSCall = "javascript:document.getElementById('keyword').value='"+keyword+"'";
super.onCreate(savedInstanceState);
}
}
你能告诉我为什么在targetSdkVersion=19
时无法调用javascript函数吗?似乎当调用onPageFinished
方法时,第一个url有时会刷新,这可能就是为什么我当时无法修改html中的值。
除了onPageFinished
之外,还有时间调用javascript吗?我在最后一天努力寻找合理的解决方案。如果有人可以提供帮助,请做。谢谢!
答案 0 :(得分:3)
你能告诉我为什么当targetSdkVersion = 19时它无法调用javascript函数吗?
Use evaluateJavascript()
instead。 loadUrl()
始终在Android 4.4上加载目标SDK版本为19+的新页面,而不是像以前那样在当前加载的页面的上下文中评估javascript:
URL。