Skip to content

Latest commit

 

History

History
71 lines (32 loc) · 2.48 KB

spec.md

File metadata and controls

71 lines (32 loc) · 2.48 KB

本文档规定了对 Native 和 JavaScript 实现的约束

Native

【强制】 Native 必须提供返回所有接口描述信息的接口

所有 JavaScript 和 Native 通信的接口对于 JavaScript 应该是可感知的,统一管理、兼容性处理等都依赖于此。

【强制】 接口描述信息必须包含 name 属性做为标识

name 标识主要作用是声明接口在当前环境的唯一性。在 prompt、postMessage 等调用场景下,可能需要回传到 Native 进行路由。

【建议】 接口描述信息的 name 属性采用 . 分隔的 namespace 格式

可读性更好

【强制】 接口标识在调用时如果需要回传,回传参数名称为 _name

避免与接口参数产生冲突。

【强制】 接口参数命名不允许以下划线 _ 开头

避免与需要回传的参数产生冲突。

【强制】 在环境中注入对象,以 _na 开头

避免与当前环境中已有的成员产生冲突。

【强制】 返回所有接口描述信息的接口必须是同步的,并遵循如下定义

获取所有接口描述,对应用来说是环境初始前置工作。同步意味着 返回所有接口描述信息的接口 必须是 注入环境的对象方法prompt

  • 对于 注入环境的对象方法method 必须为 _na.getAPIs
  • 对于 promptname 必须为 na.getAPIs

【强制】 Native 回调 JavaScript 的函数,必须并且只能包含一个 Object 类型的参数,并遵循如下定义

  • status 字段:必选,int 类型。标识 Native 运行结果。0 为成功,非0 为错误码
  • statusInfo 字段:可选,状态信息的额外说明。可以是 string,也可以是 Object
  • data 字段:可选,标识要返回的数据。根据回调场景可以是任何类型

JavaScript

【强制】 禁止在 Native 提供的对象上添加、修改或删除方法

Android WebView addJavaScriptInterface 或 JS Engine 的场景下,Native 可以直接在环境中注入接口。

不允许通过 JavaScript 修改它们。

【建议】 不要直接调用 Native 提供的对象上的方法

原因如下:

  • 部分场景对类型的支持有限,需要先经过编码处理
  • 当调用参数的类型不正确时,可能导致 App 崩溃
  • 无法对调用进行管理,比如统计等

这个项目对调用进行包装的意义,就是解决这些问题。除非调用时能保证绝对信任,否则不要直接调用