https://blog.csdn.net/carson_ho/article/details/64904691/
例子,加上防止安全漏洞的设置
package com.eshore.smartsite.activitys.h5;
public class MyWebViewActivity extends Activity
{
private final int SHOW_BUTTON=1000001;
Button goToRtsp=null;
private WebView myWebView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
Log.e("tan","onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.webview_main);
myWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = myWebView.getSettings();
//设置WebView属性,能够执行Javascript脚本
webSettings.setJavaScriptEnabled(true);
// 通过addJavascriptInterface()将Java对象映射到JS对象
//参数1:Javascript对象名
//参数2:Java对象名
myWebView.addJavascriptInterface(new AndroidtoJs(), "android_lib");//AndroidtoJS类对象映射到js的test对象
webSettings.setAllowFileAccess(false);
webSettings.setAllowFileAccessFromFileURLs(false);
webSettings.setAllowUniversalAccessFromFileURLs(false);
//设置支持缩放
webSettings.setBuiltInZoomControls(true);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
final String url = "http://xxxxxxxxxxxx:xx00/index.html?come_from=android";
myWebView.removeJavascriptInterface("searchBoxJavaBridge_");
myWebView.removeJavascriptInterface("accessibility");
myWebView.removeJavascriptInterface("accessibilityTraversal");
myWebView.loadUrl(url);
myWebView.setWebViewClient(new WebViewClient()
{// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)
{
super.onReceivedError(view, request, error);
myHandler.postDelayed(new Runnable()
{
@Override
public void run()
{
Toast.makeText(MyWebViewActivity.this,"请求网络异常,重新连接...",Toast.LENGTH_SHORT).show();
myWebView.loadUrl(url);
}
}, 3000);
//view.loadUrl("about:blank");// 避免出现默认的错误界面
//view.loadUrl(mErrorUrl);// 加载自定义错误页面
}
});
goToRtsp=(Button)findViewById(R.id.goToRtsp);
goToRtsp.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
startActivity(new Intent(MyWebViewActivity.this, SiteListActivity.class));
}
});
}
private Handler myHandler =new Handler(new Handler.Callback(){
@Override
public boolean handleMessage(Message message) {
switch (message.what){
case SHOW_BUTTON:{
int num=(int)message.obj;
if(num==0){
goToRtsp.setVisibility(View.VISIBLE);
}else{
goToRtsp.setVisibility(View.GONE);
//goToRtsp.setVisibility(View.VISIBLE);
}
return true;
}
}
return false;
}
});
@Override
public void onBackPressed()
{
//super.onBackPressed();
if(myWebView != null && myWebView.canGoBack())
{
myWebView.goBack();
}
else
{
finish();
}
}
public class AndroidtoJs {
// 定义JS需要调用的方法
// 被JS调用的方法必须加入@JavascriptInterface注解
@JavascriptInterface
public void showButton(int num) {
Log.e("tan","showButton num="+num);
Message msg=new Message();
msg.what=SHOW_BUTTON;
msg.obj=num;
myHandler.sendMessage(msg);
//System.out.println("JS调用了Android的hello方法");
}
}
}