Android之webView與js互動
阿新 • • 發佈:2018-11-14
一、java呼叫js操作:
1.佈局檔案:
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
2.獲取一個網頁:
//web顯示一個網頁 : web.loadUrl("https://www.baidu.com/"); //web顯示一個本地網頁 : web.loadUrl(" file:///android_asset/hi.html");
3.對webview屬性操作:
/**
* 設定web:
*/
WebSettings settings = web.getSettings();
settings.setJavaScriptEnabled(true);//支援javaScript
settings.setSupportZoom(true);//縮放
settings.setUseWideViewPort(true);//螢幕自適
4.跳轉:
//跳轉: web.setWebViewClient(new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); Toast.makeText(MainActivity.this, "網頁開始載入", Toast.LENGTH_SHORT).show(); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.contains("baidu")){ web.loadUrl("https://blog.csdn.net/u012124438/article/details/53371102"); } return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); Toast.makeText(MainActivity.this, "網頁結束", Toast.LENGTH_SHORT).show(); } });
5.返回上一步:
//覆蓋系統的回退鍵 :
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && web.canGoBack()){
web.goBack();
return true;
return super.onKeyDown(keyCode, event);
}
6.不在原本webview中操作:
web.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(android.webkit.WebView view, WebResourceRequest request) { web.loadUrl(String.valueOf(request)); return super.shouldOverrideUrlLoading(view, request); } }); web.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(android.webkit.WebView view, int newProgress) { super.onProgressChanged(view, newProgress); if(newProgress == 0){ }else if(newProgress == 100){ } } });
二、js呼叫java
1.assets下建立一個html檔案:
<!DOCTYPE html>
<html>
<body>
<input
type="button"
value="js呼叫java進行吐司"
onclick="myObj.showToast('呼叫成功');"
/>
<input
type="button"
value="js呼叫java進行展示列表"
onclick="myObj.shouList();"
/>
</body>
</html>
2.建立一個呼叫方法的具體類:
public class MyObject {
//設定上下文環境:
Context context;
public MyObject(Context context) {
this.context = context;
}
//設定類的暴露介面:
@JavascriptInterface
public void showToast(String name){
Toast.makeText(context, name+"Leslie", Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void showList(){
new AlertDialog.Builder(context)
.setTitle("Missing_Stars")
.setIcon(R.drawable.a)
.setItems(new String[]{"Leslie","Anita","Danay"},null)
.setPositiveButton("Yes",null)
.create()
.show();
}
}
3.主類進行實現呼叫
public class Ndk_five extends Fragment {
@BindView(R.id.webview)
WebView webview;
Unbinder unbinder;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.ndk_5, null);
unbinder = ButterKnife.bind(this, view);
WebSettings settings = webview.getSettings();
settings.setSupportZoom(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setJavaScriptEnabled(true);
//使用的是Chrome瀏覽器,只有使用Chrome瀏覽器才可以彈出HTML中自己的對話方塊:
webview.setWebChromeClient(new WebChromeClient());
webview.loadUrl("file:///android_asset/work.html");
webview.addJavascriptInterface(new MyObject(getActivity()),"myObj");
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
}