Coin163

首页 > Android在WebView中与JS的交互

Android在WebView中与JS的交互

相关标签: webview android js javascript

2020腾讯云双十一活动,全年最低!!!(领取3500元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1074

【阿里云】双十一活动,全年抄底价,限时3天!(老用户也有),
入口地址https://www.aliyun.com/1111/home

相关推荐:Android WebView和JavaScript之间的交互

最近一段时间工作经常使用到WebView,而使用WebView又避免不了要与JavaScript打交道。其中主要涉及到两者之间方法的相互调用以及参数传递。 首先设置WebView支持JavaScript mWebView.getSettings().setJavaScriptEnabled(true); 通过 WebView 调用 JavaScript

项目要求,在一个网页中跳转Activity,作为一个成长中的小白鼠,我以为实现不了,后台的哥们告诉我可以在H5页面中调用JS实现Activity跳转,经过一天的研究,终于实现了,拿来与大家分享一下

WebView的使用请戳我之前写的博客:http://blog.csdn.net/sinat_16458039/article/details/49494525

 1.首先我要写一段html代码,在代码中加入JS,把这个网页放入assets目录下


<!DOCTYPE HTML>
<html>
<head>
<title>Android与js交互</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=yes" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<script type="text/javascript">
 function show(info){
    	        
    }
</script>

</head>
<body>
<b>测试</b>
<br />
<button onClick="window.hello.javaMethod('param')">启动 Activity</button>
<br />

</body>

</html>
2.WebView支持JS需要加入以下代码:

相关推荐:WebView与JS交互

在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互。android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,

webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSHook(), "hello"); //在JSHook类里实现javascript想调用的方法,并将其实例化传入webview, "hello"这个字串告诉javascript调用哪个实例的方法
JSHook():

public class JSHook{
        public void javaMethod(String p){
            Log.d(tag , "JSHook.JavaMethod() called! + "+p);
<span style="white-space:pre">		Intent intent = new Intent(WebViewActivity.this,</span>MainActivity<span style="white-space:pre">.class);
<span style="white-space:pre">		</span>startActivity(intent);</span>
        }
            
    }
3.完整java代码:

public class WebViewActivity extends ActionBarActivity {

    private static final String URL = "file:///android_asset/helloworld.html";
    private WebView webView;
    public String tag = "MainActivity";
    private Context mContext;
    
    @SuppressLint("JavascriptInterface") 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        // 进行全屏

        mContext = this;
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        webView = (WebView) this.findViewById(R.id.wv);

        webView.loadUrl(URL);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new JSHook(), "hello");
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.d(tag, " url:"+url);
              view.loadUrl(url);// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
                return true;
            } 
        });
    }
  
    public class JSHook{
        @JavascriptInterface
        public void javaMethod(String p){
            Log.d(tag , "JSHook.JavaMethod() called! + "+p);
		Intent intent = new Intent(WebViewActivity.this,MainActivity.class);
		startActivity(intent);
        }
       
    }
    @Override 
    //设置回退  
    //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法  
    public boolean onKeyDown(int keyCode, KeyEvent event) {  
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {  
            webView.goBack(); //goBack()表示返回WebView的上一页面 
            this.finish();
            return true;  
        }  
        return false;  }
}

4.注意 在js调用方法上面加注解@JavascriptInterface


此篇博客参考了以下文章进行整理,感谢原作者: http://www.cnblogs.com/lovemo1314/p/4634895.html



原文

项目要求,在一个网页中跳转Activity,作为一个成长中的小白鼠,我以为实现不了,后台的哥们告诉我可以在H5页面中调用JS实现Activity跳转,经过一天的研究,终于实现了,拿来与大家分享一下 Web

------分隔线----------------------------