Android WebView 에서 자바 스 크 립 트 와 자바 의 상호작용 실현
하 이브 리드 개발 에 서 는 카메라 호출,앨범 보기,녹음 등 안 드 로 이 드 네 이 티 브 SDK 를 사용 하기 도 한다.이 는 웹 페이지 의 자 바스 크 립 트 가 안 드 로 이 드 SDK 인터페이스 로 호출 될 수 있어 야 한다.Android 의 WebView 는 webkit 커 널 을 기반 으로 하 는 것 이기 때문에 js 와 자바 가 서로 조 정 된 인터페이스 함 수 를 통합 하여 편리 하 게 개발 하여 사용 할 수 있 습 니 다.
인터페이스 레이아웃 xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/linearLayout"
/>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Java JavaScript "
>
</Button>
</LinearLayout>
</RelativeLayout>
자바 코드:
private WebView webView;
private Handler handler = new Handler();
private Button button;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);
// webView
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(MainActivity.this), "javaInterface");
// ,javaScript alert ,
webView.setWebChromeClient(new WebChromeClient());
//webView.setWebChromeClient(new MyWebChromeClient());
// webView
//webView.loadUrl("http://www.baidu.com/");
webView.setWebViewClient(new HelloWebView());
webView.loadUrl("file:///android_asset/index.html");
button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String param = "bb";
webView.loadUrl("javascript:showTitle('"+param+"')");
}
});
}
private class HelloWebView extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
}
/**
* JavaScript
* @author CHQ
* API , java @JavascriptInterface
*/
public class MyJavaScriptInterface{
private Context context;
public MyJavaScriptInterface(Context context){
this.context = context;
}
@JavascriptInterface
public String toString() {
return "this is interface";
}
@JavascriptInterface
public void clickOnAndroid() {
Toast.makeText(context, "js :....", Toast.LENGTH_SHORT).show();
}
/**
* JS ,
*/
@JavascriptInterface
public void call() {
Toast.makeText(context, " JavaScript ", Toast.LENGTH_SHORT).show();
handler.post(new Runnable() {
@Override
public void run() {
String param = "bb";
webView.loadUrl("javascript:showTitle('"+param+"')");
}
});
}
}
그 중에서 몇 가지 주의해 야 할 것 이 있 는데 인터넷 초기 에 WebView 에 대한 설명 에서 몇 가지 변화 가 있 었 다.1)안 드 로 이 드 4.2 이상 버 전에 서 WebView 를 사용 하여 자바 와 Js 의 상호 조정 을 실현 하고 자바 인 터 페 이 스 는@JavascriptInterface 를 성명 해 야 합 니 다.2)WebView 는 Js 등 팝 업 창 등에 적응 하기 위해 setWebChromeClient()를 호출 해 야 한다.3)addJavascriptInterface 에 연 결 된 인터페이스 에서 JavaScript 인 터 페 이 스 를 호출 하려 면 하위 스 레 드 를 열 어 호출 해 야 합 니 다(오류 보고:Caused by:java.lang.Throwable:A WebView method was called on thread'JavaBridge'.All WebView methods must be called on the same thread.);HTML 코드:
<html>
<script type="text/javascript">
// 1
function callAndroidInterface() {
window.javaInterface.clickOnAndroid();
}
//
function showTitle(param) {
alert(" :"+param);
var x = document.getElementById("title");
alert(" :"+x.innerHTML);
}
</script>
<body>
<h3 id="title"> JavaScript </h3>
<input type="button" value=" 1" onclick="callAndroidInterface()"></input>
<input type="button" value=" " onclick="showTitle('aa')"></input>
<input type="button" value=" 2" onclick="window.javaInterface.call()"></input>
</body>
</html>
이상 html 파일,그 중에서 자바 인터페이스 는 webView 에서 addJavacriptInterface()방법 에 주 입 된 인터페이스 입구 이름 입 니 다.이 이름 을 통 해 자바 의 인 터 페 이 스 를 직접 호출 할 수 있 습 니 다.(이 html 페이지 는 프로젝트 assets 디 렉 터 리 에 유지 해 야 합 니 다.webView.loadUrl("file:///android_asset/index.html")로 불 러 오기;효과 그림:
그 중에서 대화 상자 가 팝 업 됩 니 다.사이트 주소 가'file://'인 웹 페이지 는 서버 의 웹 페이지 라면 원본 IP 주소 등 을 표시 합 니 다.분명히 우리 가 원 하 는 것 이 아 닙 니 다.다음 편 에 서 는 대화 상자,확인 상자 등 웹 뷰 의 최 적 화 를 수정 하기 위해 웹 크롬 클 라 이언 트 를 다시 쓸 수 있 습 니 다.
이상 의 내용 은 안 드 로 이 드 웹 뷰 에서 자바 스 크 립 트 와 자바 의 상호작용 을 실현 하 는 모든 내용 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 앱에 CanvasJS 차트를 추가하는 방법은 무엇입니까?Android WebView는 웹 URL을 열거나 html 데이터를 로드하는 데 사용되는 Android UI 위젯입니다. WebView는 Android 활동에서 웹 페이지를 표시하는 데 사용됩니다. 간단히 말해서 A...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.