현재 위치 - 인적 자원 플랫폼망 - APP 자료 - 안드로이드 내장 H5, 상호 작용 방법?
안드로이드 내장 H5, 상호 작용 방법?
안드로이드와 H5 의 상호 작용

혼합 App 의 개발은 새로운 것이 아니며, 원시와 H5 간의 상호 작용이 매우 중요하다. 안드로이드는 어떻게 H5 와 상호 작용합니까?

1, webView 로드 페이지

Android 에서 html 페이지는 webView 를 통해 로드되며 HTML 파일의 위치에 따라 다르게 쓰여진다는 것을 잘 알고 있습니다.

//예를 들어 자산 폴더 아래에 test.html 페이지를 로드합니다.

Mwebview.load URL ("file:///Android _ asset/test.html")

//예: 웹 페이지 로드

MWebView.loadUrl ("")

MWebView.loadUrl () 만 호출하여 로드하는 경우 페이지에서 링크를 클릭하면 페이지가 휴대폰의 기본 브라우저에서 열립니다. 그런 다음 응용 프로그램에서 페이지를 열려면 setWebViewClient 를 설정해야 합니다.

Mwebview.setwebview client (new webview client () {

@ 덮어쓰기

Public boolean should override URL loading (webview 뷰, 문자열 URL ){

Mwebview.loadurl (URL);

True 를 반환합니다

}

}

});

2.Android 는 Java 를 통해 HTML 페이지에서 로컬로 JavaScript 메소드를 호출합니다.

Js 메소드를 호출하려면 webView 에서 이를 지원하도록 해야 합니다.

Websettings websettings = mwebview.getsettings ();

//호출 가능한 js 메소드로 설정됩니다.

Websettings.set JavaScript enabled (true);

호출되는 js 메서드가 반환 값을 반환하지 않으면 mwebview.loadurl ("JavaScript: do ()") 을 직접 호출할 수 있습니다. 여기서 do 는 js 의 방법입니다. 반환 값이 있는 경우 mWebView.evaluateJavascript () 메서드를 호출할 수 있습니다.

Mwebview.evaluatejavascript ("sum (1,2)", new ValueCallback & lt 문자열 & gt() {

@ 덮어쓰기

Public void onReceiveValue (문자열 값) {

Log.e (태그, "onreceivevaluevalue ="+value ");

}

});

Js 코드는 다음과 같습니다.

& lt scripttype = "text/JavaScript" >

Sum(a 함수 (a, b ){

A+b 를 반환합니다.

}

함수 do(){

Document.getelementbyid ("p") 입니다. Innerhtml = "hello world";

}

& lt/스크립트 >

2.js 가 안드로이드의 로컬 Java 메소드를 호출합니다.

Android4.2 에서는 @JavascriptInterface 주석을 사용하여 직접 선언할 수 있습니다. 다음은 로컬 Java 메소드입니다.

공용 클래스 상호 작용 {

@JavascriptInterface

공용 문자열 back(){

"hello world" 로 돌아갑니다.

}

}

Mwebview 에 전화하다. 이 메서드를 정의한 후 javascriptinterface () 메서드를 추가합니다.

Mwebview.addjavascriptinterface (new js interaction (), "Android");

그럼 js 로 어떻게 부를까요?

& lt scripttype = "text/JavaScript" >

함수 s(){

//Java 를 리콜하는 () 메서드입니다.

Var result = window.android.back ();

Document.getelementbyid ("p") 입니다. InnerHTML = result

}

& lt/스크립트 >

4. HTML 페이지에서 클릭 이벤트를 차단합니다.

Mwebview.setwebview client (new webview client () {

@ 덮어쓰기

Public boolean should override URL loading (webview 뷰, 문자열 URL ){

//URL 차단 이벤트 결정

If (url.equals ("file:///Android _ asset/test2.html") {

Log.e (레이블, "shouldoverrideurlloading:"+URL ";

Startactivity (new intent (mainactivity.this, main2activity.class));

True 를 반환합니다

} 그렇지 않으면 {

Mwebview.loadurl (URL);

False 를 반환합니다

}

}

});

이는 Java 가 js 메소드를 호출하고 js 가 Java 메소드를 호출하는 상호 작용 방식 중 하나입니다. 전체 코드는 다음과 같습니다.

주요 활동

공용 클래스 MainActivity 는 AppCompatActivity {

Public static final String 태그 = "main activity";

개인 WebView mWebView

@ 덮어쓰기

보호된 void oncreate (bundle saved instance estate) {

Super.oncreate (savedinstancestate);

Setcontentview (r.layout.activity _ main);

Mwebview = (webview) findviewbyid (r.id.webview);

Mwebview.load URL ("file:///Android _ asset/test.html");

Websettings websettings = mwebview.getsettings ();

Websettings.set JavaScript enabled (true);

Mwebview.addjavascriptinterface (new js interaction (), "Android");

Mwebview.setwebview client (new webview client () {

@ 덮어쓰기

Public boolean should override URL loading (webview 뷰, 문자열 URL ){

If (url.equals ("file:///Android _ asset/test2.html") {

Log.e (레이블, "shouldoverrideurlloading:"+URL ";

Startactivity (new intent (mainactivity.this, main2activity.class));

True 를 반환합니다

} 그렇지 않으면 {

Mwebview.loadurl (URL);

False 를 반환합니다

}

}

});

}

//Android 는 반환 값으로 js 메서드를 호출합니다.

@ target API (빌드. 버전 코드입니다. KITKAT)

공용 void onClick (뷰 v ){

Mwebview.evaluatejavascript ("sum (1,2)", new ValueCallback & lt 문자열 & gt() {

@ 덮어쓰기

Public void onReceiveValue (문자열 값) {

Log.e (태그, "onreceivevaluevalue ="+value ");

}

});

}

공용 클래스 상호 작용 {

@JavascriptInterface

공용 문자열 back(){

"hello world" 로 돌아갑니다.

}

}

}

Test.html

& lt! DOCTYPE html & gt

& lthtml & gt

& lthead & gt

& lttitle & gt& lt/title & gt;;

& lt scripttype = "text/JavaScript" >

Sum(a 함수 (a, b ){

A+b 를 반환합니다.

}

함수 s(){

Var result = window.android.back ();

Document.getelementbyid ("p") 입니다. InnerHTML = result

}

& lt/스크립트 >

& lt/head & gt;;

& ltbody & gt

& ltbuttononclick = "s ()" > 로컬 메서드 호출

& LTA href = "file:///Android _ asset/test2.html" > 클릭

& LTP id = "p">. & lt/p & gt;;

& lt/body & gt;;

& lt/html & gt;;