Android 개발 의 WebView 와 js 데이터 전달

3973 단어 jsAndroidwebview
안 드 로 이 드 개발 에서 불가피 하 게 나타 날 수 있 습 니 다. 웹 뷰 를 사용 하여 h5 페이지 를 표시 합 니 다.h5 페이지 만 표시 하면 특별한 처리 가 필요 하지 않 지만 js 와 WebView 의 상호작용 이 많이 발생 합 니 다.예 를 들 어 html 폼 의 데 이 터 를 Activity 에 전달 하고 Activity 에서 데 이 터 를 검증 한 다음 에 서버 에 업로드 합 니 다.
    그러면 js 와 WebView 는 어떻게 상호작용 을 합 니까?
    AndroidHtml 프로젝트 를 만 듭 니 다.주요 코드 는 다음 과 같 습 니 다.
MainActivity.java:
    private WebView mWebView;
    public static final String URL_TEST="file:///android_asset/index.html";

    @SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.webView);
        WebSettings settings = mWebView.getSettings();
        settings.setJavaScriptEnabled(true);

        mWebView.loadUrl(URL_TEST);
        //addJavascriptInterface          ,            ,         js     native  ,        js          native  
        mWebView.addJavascriptInterface(this,"zzh");//
    }

    @JavascriptInterface//android 4.2             ,          js  
    public void callAndroidNativeMethod(String str){
        Log.d("MainActivity","---      !!!-");
        Toast.makeText(this, "---"+str, Toast.LENGTH_LONG).show();
    }

주해 @ JavascriptInterface 주 해 는 Android 버 전 4.2 에 추가 해 야 합 니 다.Google 공식 설명 은
Caution: If you've set your targetSdkVersion to 17 or higher, you must add the @JavascriptInterface annotation to any method that you want available to your JavaScript (the method must also be public). If you do not provide the annotation, the method is not accessible by your web page when running on Android 4.2 or higher.
index.html:
html>

    
        
        
            function callAndroidNativeMethod(){
                window.zzh.callAndroidNativeMethod("js        Android  ");
            }
        
    
    
        
    

activity_main. xml 의 레이아웃 은:


    

好了,上面就是js中如何调用Android Native方法。下面来说说Android Native中怎么调用js方法(要注意Native中调用js方法来处理Android中的业务逻辑的效率差,不建议使用此方式处理Android业务逻辑,但是也要知道如何使用)。

private WebView mWebView;
public static final String URL_TEST="file:///android_asset/index.html";

@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mWebView = (WebView) findViewById(R.id.webView);
    WebSettings settings = mWebView.getSettings();
    settings.setJavaScriptEnabled(true);

    mWebView.loadUrl(URL_TEST);
    mWebView.addJavascriptInterface(this,"zzh");

    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mWebView.loadUrl("javascript:callJavaScriptMethod()");
        }
    });
}

@JavascriptInterface//android 4.2             ,          js  
public void callAndroidNativeMethod(String str){
    Log.d("MainActivity","---      !!!-");
    Toast.makeText(this, "---"+str, Toast.LENGTH_LONG).show();
}

index. html 파일 은 비교적 간단 합 니 다.html>                       function callAndroidNativeMethod(){                 window.zzh.callAndroidNativeMethod("js Android ");             }             function callJavaScriptMethod(){                 document.getElementById("content").innerHTML += "<br\>java js ";             }     
 예 시 는 비교적 간단 하고 주석 도 비교적 명확 하 게 썼 으 며 너무 많은 설명 을 하지 않 고 모두 자신 이 깨 달 았 다.

좋은 웹페이지 즐겨찾기