iOS 混合应用的关键点分析 - 仿 Android 平台 WebView 可注入本地对象方法的功能实现要点
2015-03-02 06:44
1041 查看
iOS 混合应用的关键点分析 - 仿 Android 平台 WebView 可注入本地对象方法的功能实现要点
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
对于 iOS 和 Android 平台来说,各自的流畅览器组件 UIWebView 和 WebView 都可以很容易地在本地代码中调用 WebView 内页面 JS 脚本。然后,从 JS 调用本地方法,只有 Android 平台的 WebView 组件提供了,这也很容易理解,毕竟 Android WebView 组件以 Java 实现,想向其反射注入些功能也时很容易的,但具体实现尚未去分析源码证实。
对于 iOS 来说,只有一个切入点,那就是通过 UIWebViewDelegate 的页面加载事件,获得到页面内的加载事件。那么如何在页面内很容易地触发一个页面加载事件,以便能在本地代理方法中截获并响应这一 HTML 页面内事件呢?这一问题,即已抽象出了函数调用方的事件触发,和函数被调方的事件响应机制的映射双方。
1、通过 a 标签,早些年的 PhoneGap 框架即为这样实现的,不过感觉有些拘束;2、加入 input 组件,并设置为隐藏状态,通过设置其 onClick 事件,动态更新其加载的链接,这个对原页面有要求,且附属操作过多;3、像 img 的页面二次加载其 src 指定图片的原理,即不会影响原页面产生刷新,又会触发页面加载; 实际测试发现,该组件只在页面初次加载时,进行串行加载,即使加了 defer 或 async 参数,也无法动态触发。 后发现一个开源库,其采用了 iframe 的 src 来触发加载,动态将 iframe 添加到页面,就会触发加载 src 链接的事件,能被本地捕获,然后马上再移除这个 iframe。
这个开源库能很好地将 iOS 本地对象的所有方法动态加载给当前页面的 window 对象,可以在页面内直接调用对应对象的方法。
不过该库实现者对 iOS 方法签名的理解有误,所以,对于多参数方法,并没有能很好地解决。
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
对于 iOS 和 Android 平台来说,各自的流畅览器组件 UIWebView 和 WebView 都可以很容易地在本地代码中调用 WebView 内页面 JS 脚本。然后,从 JS 调用本地方法,只有 Android 平台的 WebView 组件提供了,这也很容易理解,毕竟 Android WebView 组件以 Java 实现,想向其反射注入些功能也时很容易的,但具体实现尚未去分析源码证实。
对于 iOS 来说,只有一个切入点,那就是通过 UIWebViewDelegate 的页面加载事件,获得到页面内的加载事件。那么如何在页面内很容易地触发一个页面加载事件,以便能在本地代理方法中截获并响应这一 HTML 页面内事件呢?这一问题,即已抽象出了函数调用方的事件触发,和函数被调方的事件响应机制的映射双方。
1、通过 a 标签,早些年的 PhoneGap 框架即为这样实现的,不过感觉有些拘束;2、加入 input 组件,并设置为隐藏状态,通过设置其 onClick 事件,动态更新其加载的链接,这个对原页面有要求,且附属操作过多;3、像 img 的页面二次加载其 src 指定图片的原理,即不会影响原页面产生刷新,又会触发页面加载; 实际测试发现,该组件只在页面初次加载时,进行串行加载,即使加了 defer 或 async 参数,也无法动态触发。 后发现一个开源库,其采用了 iframe 的 src 来触发加载,动态将 iframe 添加到页面,就会触发加载 src 链接的事件,能被本地捕获,然后马上再移除这个 iframe。
这个开源库能很好地将 iOS 本地对象的所有方法动态加载给当前页面的 window 对象,可以在页面内直接调用对应对象的方法。
不过该库实现者对 iOS 方法签名的理解有误,所以,对于多参数方法,并没有能很好地解决。
相关文章推荐
- Android开发实现webview中img标签加载本地图片的方法
- Cocos2d-x 3.x 头像选择器,本地相册与拍照+头像编辑功能(Android、IOS双平台实现)
- Android中通过WebView控件实现与JavaScript方法相互调用的地图应用
- android4.3 webview 实现读取本地照片和摄像机功能
- Android编程使用WebView实现文件下载功能的两种方法
- IOS平台:PhoneGap添加新类(javaScript与webView交互)----功能扩展
- iOS 应用实现条形码扫描功能的方法
- Android中WebView载入本地HTML代码并实现Java与JavaScript交互的例子
- Android的webview支持HTML5的离线应用功能
- iOS 应用实现条形码扫描功能的方法
- android webview 加载本地html 实现 与 java 之间的相互响应
- Android WebView的Js对象注入漏洞解决方案
- iOS 应用实现条形码扫描功能的方法
- Android Webview实现文件下载功能
- [Android实例] webview 实现翻页功能
- 巧用FileSystem组件实现WEB应用中的本地特定打印的方法
- Android WebView的Js对象注入漏洞解决方案
- Android 4.2 webview注入js对象时需要注意的问题
- WebView控件中的javascript与Android本地功能交互
- Android中WebView实现Javascript调用Java类方法