如何调用JavaScript与Android 4.4网页视图? [英] How to call JavaScript with Android 4.4 Webview?
问题描述
我想加载网页后以修改HTML一个输入值。我通过调用web视图javascript函数$ ppared做该p $。它的工作好,如果我设置了的android:targetSdkVersion
到18但是,一旦我将它设置为19,它显示了第二个URL的价值,即使它只是JavaScript的调用。下面是测试code:
进口android.app.Activity;
进口android.os.Bundle;
进口android.webkit.WebView;
进口android.webkit.WebViewClient;公共类WebActivity延伸活动{
私人的WebView mWebView;
私人字符串mJSCall; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
// TODO自动生成方法存根
的setContentView(R.layout.activity_webview); mWebView =(的WebView)findViewById(R.id.webview);
mWebView.getSettings()setJavaScriptEnabled(真)。 mWebView.setWebViewClient(新WebViewClient(){
@覆盖
公共无效onPageFinished(的WebView视图,字符串URL){
如果(mJSCall!= NULL){
view.loadUrl(mJSCall);
mJSCall = NULL;
} super.onPageFinished(查看,网址);
} @覆盖
公共布尔shouldOverrideUrlLoading(的WebView视图,字符串URL){
// TODO自动生成方法存根
view.loadUrl(URL); 返回super.shouldOverrideUrlLoading(查看,网址);
} }); mWebView.loadUrl(http://wap.soso.com/?g_f=2405);
字符串关键字=我的关键字
mJSCall =JavaScript的:的document.getElementById('关键词')值='+关键字+'; super.onCreate(savedInstanceState);
}
}
你能告诉我,为什么它没有调用JavaScript函数时 targetSdkVersion = 19
?看来,当 onPageFinished
方法被称为第一个URL已经有时刷新,也许这就是为什么我不能在当时的HTML修改的值。
那么,有没有调用JavaScript的除外任何合适的时间 onPageFinished
?我一直在努力的最后一天找到一个合理的解决方案。如果有人可以帮助,请不要。谢谢!
您能告诉我,为什么它没有调用JavaScript函数时targetSdkVersion = 19?
块引用><一个href=\"http://developer.android.com/reference/android/webkit/WebView.html#evaluateJavascript%28java.lang.String,%20android.webkit.ValueCallback%3Cjava.lang.String%3E%29\"相对=nofollow>使用
evaluateJavascript()
代替。使用loadURL()
总是加载在Android 4.4的新页面与19+的目标SDK版本,而不是评估的javascript:
URL作为前当前加载页面的情况下。I wanted to modify one input value in the html after loading the webpage. I prepared to do this by calling javascript function with the WebView. It worked well if I set the
android:targetSdkVersion
to 18. But once I set it to 19, it shows the value of the second url, even it's just the javascript calls. Here's test code: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); } }
Could you tell me why it failed to call javascript function when
targetSdkVersion=19
? It seems that when theonPageFinished
method is called the first url already refreshed sometimes, maybe that's why I could not modify the value in the html at that time.So is there any right time to call javascript except the
onPageFinished
? I have struggled for the last day to find a reasonable solution. If anyone can help, please do. Thank you!解决方案Could you tell me why it failed to call javascript function when targetSdkVersion=19?
Use
evaluateJavascript()
instead.loadUrl()
always loads a new page on Android 4.4 with a target SDK version of 19+, instead of evaluating ajavascript:
URL in the context of the currently-loaded page as before.这篇关于如何调用JavaScript与Android 4.4网页视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!