做App内嵌H5项目时,经常会遇到js与App的交互,最普遍的就是方法的互相调用,那么如何实现方法的互相调用呢?

写在前面:

  如果只是小项目且后期扩大的可能性不大的时候,可以忽略,可如果是长期项目的话,那么就需要考虑以下一些问题了。

  1. 方法命名规范。

  如果考虑到以后会有大量的方法,那么规范化的命名就很重要了,规范化的命名,既保证了名字的唯一性又保证了代码的可读性方便开发过程,也方便后期维护。

     举个栗子,  如果现在有一个方法,是关闭webview, js调用app的方法, 如果直接叫closePage, 那么根本看不出来是要调用App的方法,混乱且有可能被其他命名覆盖,那么如果叫 JAMS__closePage ,即所有的js 与App的交互的方法都加 JAMS 那么就很容易分辨了,且不易重名。

2.安全性。

    如果在你的App内能打开其他的网页链接,那么这些接口的安全性也是需要考虑的,即保证在指定的webview或者授权的webview内这些方法才能被调用,这点很重要。

    第一种方法是app内判断webview地址来源,来匹配对用方法的使用权,显然这个每次添加新页及方法的时候,App都需要修改授权列表。

    第二种方法是,App打开webview的时候,如果是自己的业务H5那么调用的时候可以传入一个token,每次调用方法时都校验token。

一, js调用App 方法

  假设方法名为  JAMS__mark

  android 系统:

    window.android.JAMS__mark(params)   // @params为传入的参数, app内可以收到
 
  ios 系统:  

    window.webkit.messageHandlers.closePage.postMessage(params)   // @params为传入的参数, app内可以收到

然后可以封装一下 像这样

export function JAMS__mark() {
if (/android/i.test(navigator.userAgent)) {
try {
window.android.JAMS__mark(params)
} catch (e) {
console.log(e)
}
} else if (/ios|iphone|ipod|pad/i.test(navigator.userAgent)) {
try {
window.webkit.messageHandlers.JAMS__mark.postMessage(params)
} catch (e) {
console.log(e)
}
}
}

二、 App调用js方法

App调用js 方法需要js将方法挂载在window下,这样App才能调用到方法,

假设方法名叫    JAMS__success

window.JAMS__success = function () {

  // do some thing

  // if need some params ,you can alse return it

  return params;

}

需要主要的是如果需要返回一些数据给App,那么这些数据不能够通过异步来获取,也不能够有阻断进程的语句如alert,否者,app将不能够获取到正确参数,而是得到 undefined,  例如在方法里加个alert('1'), 而 return 在 alert语句后。

(完)

最新文章

  1. C#泛型详解(转)
  2. mina框架详解
  3. js self = this的解释
  4. c# 重写索引
  5. Android---3种方式限制EditView输入字数(转载)
  6. JDK之jstat的用法
  7. 【python】bytearray和string之间转换,用在需要处理二进制文件和数据流上
  8. Redis源代码-数据结构Adlist双端列表
  9. 快速玩转Apple Pay开发
  10. RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary库其它的常见自动化关键字
  11. 雷林鹏分享:jQuery EasyUI 窗口 - 窗口与布局
  12. 从零开始学习html(十一)CSS盒模型——上
  13. 【ARC082E】ConvexScore
  14. SQL Server 2000 绿色精简版gsql适用于xp/win7/win8/win10
  15. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序的解决方法
  16. 20162318 2018-2019-2《网络对抗技术》Exp0 Kali安装 Week1
  17. SpringBoot入门篇--使用IDEA创建一个SpringBoot项目
  18. mysql 百万级数据库优化方案
  19. iOS json解析中包含“\n”等解析出错
  20. mysql - json - look up subobjects or nested values directly by key or array index without reading all values

热门文章

  1. POM.XML文档汉化
  2. STM平台增加性能测试/稳定性测试部分【一】
  3. 火狐浏览器油猴子GreaseMonkey使用教程
  4. 一切的浮点型进行计算操作都要用BigDecimal
  5. d-ary heap实现一个快速的优先级队列(C#)
  6. Analysis 图标分析 - loadrunner
  7. 从零系列--开发npm包(二)
  8. 记一次nginx -t非常慢的排障经历
  9. python - 定时清理ES 索引
  10. Mac环境搭建以太坊私有链