做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语句后。

(完)

JS调用App方法及App调用JS方法的更多相关文章

  1. [转]JS调用Android里面的方法,Android调用JS里面的方法

    FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...

  2. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  3. js 函数闭包内部返回函数体调用方法难点解答

    今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...

  4. C# 解析js方法,并调用js方法

    本文转载:http://www.cnblogs.com/StudyLife/archive/2013/03/11/2953516.html 本文不是基于B/S的 后台调用前台js方法,而是给你一段js ...

  5. WinForm中嵌入WebBrowser,并且支持C#和JS方法的相互调用

    纯粹WinForm界面不够友好,实现数据复杂度高的处理有些力不从心,所以看了看api以后决定用html来做. 我的wlw的代码插件不是很好用,大家凑合看吧 类前说明引用和权限 1: [Permissi ...

  6. js函数常见的写法以及调用方法

    写在前面:本文详细的介绍了5中js函数常见的写法以及调用的方法,平时看别人代码的时候总是看到各种不同风格的js函数的写法.不明不白的,找了点资料,做了个总结,需要的小伙伴可以看看,做个参考.1.常规写 ...

  7. 【js】手机浏览器端唤起app,没有app就去下载app 的方法

    这种功能的作用: 1.一般公司有自己的app,而app是需要不断有新用户涌入才能持续运营,达到不错的收入.就需要使用这种方式进行引入新的用户. 2.一些内容在网页端体验不好,或者一些功能需要app内才 ...

  8. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  9. Android app启动activity并调用onCreate()方法时都默默地干了什么?

    Android app启动activity并调用onCreate() 方法时都默默地干了什么?   在AndroidManifest.xml文件中的<intent-filter>元素中有这 ...

随机推荐

  1. SSH免密登录(并且免yes交互)

    问题描述:主机A使用ssh协议远程主机B,默认会开启口令认证,即输入主机B对应用户的登录密码,并且第一次登录时,主机A需验证是否接受来自主机B的公钥,输入"yes/no"完成交互. ...

  2. redis解决商品秒杀问题

    博主最近在项目中遇到了抢购问题!现在分享下.抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖" ...

  3. ORACLE中查询被锁定的表,以及如何解锁

    http://www.cnblogs.com/weiyi1314/p/6813325.html

  4. Notes of Daily Scrum Meeting(11.14)

    Notes of Daily Scrum Meeting(11.14) 今天是项目第三周的周五,按原计划这时我们的项目应该已经要进入尾声进行组装调试了,但由于之前放假还有队员们的 效率比较低的原因,我 ...

  5. [2017BUAA软工]结对项目

    软工结对项目 一. Github项目地址 https://github.com/crvz6182/sudoku_partner 二. PSP表格 Psp personal software progr ...

  6. YQCB冲刺周第七天

    站立会议 任务看板 燃尽图 今天的任务为实现个人设置中的修改密码.设置金额的功能.以及界面的美化. 遇到的问题为修改自己密码时获得当前用户的id问题.

  7. Task 10 统计从1到某个整数之间出现的1的次数

    任务:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12) = 5. 在3 ...

  8. 《UML大战需求分析》-读后感三

    用例图是用来描述什么角色通过某某系统能做什么的图,用例图关注的是系统的外在表示想爱你.系统与人的交互系统与其他系统的交互,小人执行者就是角色,角色 是对系统使用者的抽象,一个角色可以代表多个具体的人而 ...

  9. HDU 4281 Judges' response 状压dp+多旅行商问题

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4281 Judges' response Time Limit: 2000/1000 MS (Java ...

  10. java的小学生四则运算

    import java.awt.*; import java.awt.event.*; import java.io.FileNotFoundException; import java.io.IOE ...