如何使用Android 4.4 Webview调用JavaScript?

时间:2014-01-13 15:58:24

标签: android

我想在加载网页后修改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吗?我在最后一天努力寻找合理的解决方案。如果有人可以提供帮助,请做。谢谢!

1 个答案:

答案 0 :(得分:3)

  

你能告诉我为什么当targetSdkVersion = 19时它无法调用javascript函数吗?

Use evaluateJavascript() insteadloadUrl()始终在Android 4.4上加载目标SDK版本为19+的新页面,而不是像以前那样在当前加载的页面的上下文中评估javascript: URL。