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

 webview.getSettings().setJavaScriptEnabled(true);//允许JS执行

2 settings.setJavaScriptCanOpenWindowsAutomatically(true);//允许JS执行
 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文件

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

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

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

在javascript中调用java方法

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

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

  2.定义被调用的java方法

例子:

 public class JavaJsDemo extends Activity {

     private WebView webview;

     @Override

     public void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);

         setContentView(R.layout.main); 

         webview = (WebView)findViewById(R.id.webview);

         webview.getSettings().setJavaScriptEnabled(true);

         webview.addJavascriptInterface(this, "js2java");

         webview.loadUrl("file:///android_asset/index.html");

     }

     public void printMsg(String msg){

             System.out.println("----------msg:" + msg);    

     }

     public void clickDoWork(){

            webview.loadUrl("javascript:doSomeWork()");

     }

 }

html代码:

 <html>

     <head>

         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

         <title></title>

         <script language="javascript" type="html/text"> 

             function doSomeWork(){
document.getElementById("helloweb").innerHTML="HelloWebView"; } </script> </head> <body onload="javascript:window.js2java.printMsg('HelloWebView')">     <div id="hellowebview">       <a onClick="window.js2java.clickDoWork">
    <img id="androidimg" src="android_normal.png"/>
    <br>
    Click me!
      </a>     </div>   </body> </html>
 public class JavaJsWebViewDemo extends Activity {
private WebView mWebView;
private Handler mHandler = new Handler(); public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.webviewdemo);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new Object() {
public void clickDoWork() {
mHandler.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:doSomeWork()");
}
});
},
24          public void printMsg(String msg){
25
26   System.out.println("----------msg:" + msg);
27
28      }
       }, "js2java"); 
mWebView.loadUrl("file:///android_asset/demo.html"); } }

注意:

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

Android js相互调用的更多相关文章

  1. 关于action script与js相互调用的Security Error问题

    大家都知道,as和js相互调用可以通过ExternalInterface.call和ExternalInterface.addCallback来进行. 比较好的做法是使用之前通过ExternalInt ...

  2. android js 互相调用

    代码地址如下:http://www.demodashi.com/demo/13107.html android js 互相调用 第二版 支持js匿名函数接收 支持js json对象接收 支持js函数返 ...

  3. CefSharp 与 js 相互调用及注意事项

    CefSharp 与 js 相互调用 一. CefSharp调用 js CefSharp.WinForms.ChromiumWebBrowser wb; ... 方式1. ExecuteScriptA ...

  4. WebView使用详解(一)——Native与JS相互调用(附JadX反编译)

    念念不忘,必有回响,永远坚持你所坚持的! 一直在用WebView,还没有系统的总结过它的用法,下面就系统的总结下,分享给大家 一.基本用法 1.加载在线URL void loadUrl(String ...

  5. WebBrowser(IE) 与 JS 相互调用

    在开发中我们经常将WebBrowser控件嵌入Winform 程序来浏览网页,既然是网页那么少不了JS.下面就让我们来说说他们两之间的相互调用. 在C#封装的浏览器内核中,Chromium 内核封装有 ...

  6. flex与js相互调用

    1.flex调用js方法 调用方法例如:ExternalInterface.call("UploadComplete",oldName,uidName,_dir+"/&q ...

  7. 【转】CefSharp 与 js 相互调用

    转自CSDN博客博主ghui,虽然博主说要经过他同意才能转,我只是做笔记用,没做他用,所以请博主理解,在此感谢博主! 一. CefSharp调用 js CefSharp.WinForms.Chromi ...

  8. CefSharp 与 js 相互调用

    https://blog.csdn.net/gong_hui2000/article/details/48155547

  9. Android中通过WebView控件实现与JavaScript方法相互调用的地图应用

    在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...

随机推荐

  1. 使用dynatrace+showslow进行前端性能测试

    1.背景 应用的性能测试与优化目前主要停留在服务器端的反馈,而对于前端性能标准的研究与测试相对比较空白,缺乏统一的标准与工具.众所周知,浏览器html组件的下载及渲染性能直接影响最终的用户体验,目前应 ...

  2. 与你相遇好幸运,Waterline的多表关联

    >一对一关联 表示一个模型可能只与另一个模型关联.为了使模型知道它与其他哪些模型关联,外键必需包含在记录中.. http://imfly.github.io/sails-docs/concept ...

  3. Spring.Net的IOC入门

    1.构造器注入 namespace Spring.Net { class Program { //构造器注入 static void Main(string[] args) { IApplicatio ...

  4. 通过url获取图片尺寸的几种方法:JS和php

    首先是js的方法,通过new一个Image对象,设置src属性,并监听complete和onload事件,图片加载完成后输出图片的宽度和高度 function checkPicurl(url){ va ...

  5. 重温WCF之一个服务实现多个契约(二)

    public class ServiceImp : IService1,IService2,IService3 { public string SayHelloA() { return "你 ...

  6. 笔记本win7共享WIFI

    创建无线网络 (1)netsh wlan set hostednetwork mode=allow ssid=网络名 key=密码 启动承载网络(2)netsh wlan start hostedne ...

  7. Windows+Git+TortoiseGit+COPSSH 安装图文教程

    转自:http://blog.csdn.net/aaron_luchen/article/details/10498181 准备工作: 1. Git-1.8.1.2-preview20130201.e ...

  8. linux SecureCRT ssh key认证登陆

    转自:http://blog.chinaunix.net/uid-20639775-id-3207171.html 通过SecureCRT创建key登录认证 一.生成公钥/密钥对 使用SecureCR ...

  9. 四种方案解决ScrollView嵌套ListView问题(转)

    以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollVie ...

  10. 在Salesforce中对某一个Object添加 Validation Rule

    在Salesforce中可以对某一个Object添加相应的 Validation Rule 来进行一个全局的条件判断,比如满足什么样的条件的修改允许提交,不满足的要提示相应的错误信息. 要创建一个Va ...