如何调用JavaScript与Android 4.4网页视图? [英] How to call JavaScript with Android 4.4 Webview?

查看:133
本文介绍了如何调用JavaScript与Android 4.4网页视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想加载网页后以修改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 the onPageFinished 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 a javascript: URL in the context of the currently-loaded page as before.

这篇关于如何调用JavaScript与Android 4.4网页视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆