JavaScript和Android代码相互调用

通过WebView,可以在JavaScript代码和客户端的Android代码间创建接口。例如,JavaScript代码可以调用Android代码中的方法来展示一个Dialog,而不需要使用JavaScript中的alert()函数。为了在你的JavaScript和Android代码间绑定一个新的接口,需要调用addJavascriptInterface(),传给它一个类实例来绑定到JavaScript,还需要一个接口名让JavaScript可以调用,以便来访问类。

例如,在Android应用中包括如下类:
public class JavaScriptInterface {
      Context mContext;
      /* 实例化接口 */
      JavaScriptInterface(Context c) {
                mContext = c;
      }
      public void showToast(String toast) {
                Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
      }
}

在这个例子中,JavaScriptInterface类让Web页面可以使用showToast()方法来创建一个Toast消息。

可以通过addJavascriptInterface()绑定JavaScriptInterface类到正在WebView运行的JavaScript,并将接口命名为Android。例如:
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");

这段代码为在WebView上运行的JavaScript创建了一个名为Android的接口。这时候,你的Web app就能访问JavaScriptInterface类了。例如,下面是一些HTML以及JavaScript,在用户单击按钮的时候,它们使用这个新接口创建一个Toast消息。
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast) {
      Android.showToast(toast);
}
</script>

不需要从JavaScript初始化Android接口,WebView会自动让它为你的Web页面所用。所以,在单击按钮的时候,showAndroidToast()函数会用这个Android接口来调用JavaScriptInterface.showToast()方法。

注意 绑定到你的JavaScript的对象在另一个线程中运行,而不是在创建它的线程中运行。使用addJavascriptInterface()可以让JavaScript控制你的Android应用。这是一把双刃剑,既有用同时也可能带来安全威胁。当WebView中的HTML不可信时(例如,HTML的部分或者全部都是由一个未知的人或者进程提供的),那么一个攻击者就可能使用HTML来执行客户端的任何他想要的代码。因此,不应该使用addJavascriptInterface(),除非WebView中的所有HTML以及JavaScript都是你自己写的。同样不应该让用户将你的WebView定向到另外一个不是你自己的Web页面上去(相反,让用户的默认浏览器应用打开外部链接——用户浏览器默认打开所有URL链接,因此一定要小心处理页面导航,像下面所描述的那样)。

转自 http://book.2cto.com/201308/30076.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值