Android js相互调用

it2022-05-06  9

一、webview相当于android中的浏览器,基于webkit开发,可以浏览网页文件,支持css javas cript 以及html

1 webview.getSettings().setJavaScriptEnabled(true);//允许JS执行2 settings.setJavaScriptCanOpenWindowsAutomatically(true);//允许JS执行 3 webview.addJavascriptInterface(object,"name");//把Name="name"的对象添加到object中。object如果是this,就是window.name

加载本机的html文件如下:

file:///android_asset/teste.html   加载项目assets下的文件teste.html

file:///sdcard/index.html       加载sdcard下的index.html文件

1 webview.loadUrl("file:///android_asset/index.html");//注意这个资源的位置是跟res并列的文件夹下。

如果在用webview做应用的时候我们不希望新建webview进程,让程序跳来跳去那么进行如下设置

1 webv.setWebViewClient(new WebViewClient(){ 2 public boolean shouldOverrideUrlLoading(WebView view, String url) { 3 view.loadUrl(url);//点击超链接的时候重新在原来进程上加载URL 4 return true; 5 } 6 });

在javascript中调用java方法

      1.先将一个当前的java对象绑定到一个javascript上面,使用如下方法

1 webview.addJavascriptInterface(this, "js2java");//this为当前对象,绑定到js的someThing上面,主要js2java的作用域是全局的。一旦初始化便可随处运行 1 addJavascriptInterface//方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用Handler的目的。 1 //映射Java对象"JSInvokeClass"到一个名为”js2java“的Javascript对象上 2 //JavaScript中可以通过"window.js2java"来调用Java对象的方法 3 mWebView.addJavascriptInterface(new JSInvokeClass(), "js2java"); 1 /**网页Javascript调用接口**/ 2 class JSInvokeClass { 3 public void back() { 4 activity.finish(); 5 } 6 } 1 //JavaScript调用Java对象示例 2 <body οnlοad="javascript:window.js2java.back()">

  2.定义被调用的java方法

例子:

1 public class JavaJsDemo extends Activity { 2 3 4 private WebView webview; 5 6 @Override 7 8 public void onCreate(Bundle savedInstanceState) { 9 10 super.onCreate(savedInstanceState); 11 12 setContentView(R.layout.main); 13 14 webview = (WebView)findViewById(R.id.webview); 15 16 webview.getSettings().setJavaScriptEnabled(true); 17 18 webview.addJavascriptInterface(this, "js2java"); 19 20 webview.loadUrl("file:///android_asset/index.html"); 21 22 } 23 24 public void printMsg(String msg){ 25 26 System.out.println("----------msg:" + msg); 27 28 } 29 30 public void clickDoWork(){ 31 32 webview.loadUrl("javascript:doSomeWork()"); 33 34 } 35 36 }

html代码:

1 <html> 2 3 <head> 4 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 6 7 <title></title> 8 9 <script language="javascript" type="html/text"> 10 11 function doSomeWork(){ 12 document.getElementById("helloweb").innerHTML="HelloWebView"; 13 14 } 15 16 </script> 17 18 </head> 19 20 <body οnlοad="javascript:window.js2java.printMsg('HelloWebView')"> 21 22     <div id="hellowebview"> 23 24       <a onClick="window.js2java.clickDoWork"> 25     <img id="androidimg" src="android_normal.png"/> 26     <br> 27     Click me! 28       </a> 29 30     </div> 31 32   </body> 33 34 </html> 1 public class JavaJsWebViewDemo extends Activity { 2 private WebView mWebView; 3 private Handler mHandler = new Handler(); 4 5 public void onCreate(Bundle icicle) { 6 super.onCreate(icicle); 7 setContentView(R.layout.webviewdemo); 8 mWebView = (WebView) findViewById(R.id.webview); 9 WebSettings webSettings = mWebView.getSettings(); 10 webSettings.setJavaScriptEnabled(true); 11 mWebView.addJavascriptInterface(new Object() { 12 public void clickDoWork() { 13 mHandler.post(new Runnable() { 14 public void run() { 15 mWebView.loadUrl("javascript:doSomeWork()"); 16 } 17 }); 18 }, 24      public void printMsg(String msg){ 25 26   System.out.println("----------msg:" + msg); 27 28      } 19      }, "js2java"); 20 mWebView.loadUrl("file:///android_asset/demo.html"); 21 } 22 }

 

注意:

使用addJavascriptInterface在安卓4.2以下是有安全漏洞的,可以用这篇文章http://www.pedant.cn/2014/07/04/webview-js-java-interface-research/ 的原理, 来规避这个漏洞来的问题, 完全是JS层面的解析调用,而且包装得更全面,分析得更彻底!

转载于:https://www.cnblogs.com/CharlesGrant/p/4742689.html

相关资源:详解Android JS相互调用

最新回复(0)