zoukankan      html  css  js  c++  java
  • JS调用App方法及App调用JS方法

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

    (完)

    转自:https://www.cnblogs.com/hanguozhi/p/9565105.html

  • 相关阅读:
    关于js的对象原型继承(一)
    js相关小技巧
    一、WCF学习之旅-创建第一个服务
    .net WebService方法之重载、支持Session、支持request请求和response格式的浅析
    关于反射的BindingFlag浅析
    oracle之TRUNC函数
    start with...connect by子句的浅用
    一个在windows电脑上控制比较全的文件夹的设置方式
    javascript的replace之正则表达式的浅析
    抓取错误之onerror
  • 原文地址:https://www.cnblogs.com/liuxinheng/p/10234810.html
Copyright © 2011-2022 走看看