2021腾讯云限时秒杀,爆款1核2G云服务器298元/3年!(领取2860元代金券),
地址:https://cloud.tencent.com/act/cps/redirect?redirect=1062
2021阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址:https://www.aliyun.com/minisite/goods
相关推荐: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