Android在WebView中与JS的交互

项目要求,在一个网页中跳转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.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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值