当前位置:   article > 正文

H5 混合开发(更新中)_h5 和ios 安卓混合开发

h5 和ios 安卓混合开发

1 流行的混合开发方案

基于 WebView UI (JSBridge)

基于 Native UI(ReactNative、weex

小程序方案(微信、支付宝小程序

JS通过JSBridge来调用native api,如拍照/扫一扫

2 H5和原生互相调用

2.1 注册全局api

异步情况导致卡顿

传递数据格式不同:面向 Android 只能接受 基本数据 类型数据。面向 IOS 可以接受任意类型数据。

返回值不同:面向 Android 可以直接接收返回值。面向 IOS 没有办法直接获取返回值。

  1. // H5 调用 Android 方法
  2. function onAndroidFunction1 (str) {
  3. window.AndroidJSBridge.androidTestFunction1(str);
  4. }
  5. // Android 调用 H5 方法
  6. window.onFunction = function (str) {
  7. alert(str);
  8. return 'onFunction 方法已经调用完成';
  9. }
  10. // H5 调用 IOS 方法
  11. function onIOSFunction1 (str) {
  12. window.webkit.messageHandlers.IOSTestFunction1.postMessage({
  13. msg: str
  14. });
  15. }
  16. // IOS 回调 H5 方法
  17. window.onFunctionIOS = function (str) {
  18. alert(str);
  19. return 'onFunctionIOS 方法已经调用完成';
  20. }

2.2 url scheme

APP中转返回网页

  1. const iframe1 = document.getElementById('iframe1')
  2. iframe1.onload = () => {
  3. const content = iframe1.contentWindow.document.body.innerHTML
  4. console.info('content', content)
  5. }
  6. iframe1.src = 'my-app-name://api/getVersion'
  7. // // URL scheme
  8. // 封装 JS-bridge:自造协议标准,不用发请求:fn1代表各种功能
  9. const sdk = {
  10. invoke(url, data = {}, onSuccess, onError) {
  11. const iframe = document.createElement('iframe')
  12. iframe.style.visibility = 'hidden'
  13. document.body.appendChild(iframe)
  14. iframe.onload = () => {
  15. const content = iframe1.contentWindow.document.body.innerHTML
  16. onSuccess(JSON.parse(content))
  17. iframe.remove()
  18. }
  19. iframe.onerror = () => {
  20. onError()
  21. iframe.remove()
  22. }
  23. iframe.src = `my-app-name://${url}?data=${JSON.stringify(data)}`
  24. },
  25. fn1(data, onSuccess, onError) {
  26. this.invoke('api/fn1', data, onSuccess, onError)
  27. },
  28. fn2(data, onSuccess, onError) {
  29. this.invoke('api/fn2', data, onSuccess, onError)
  30. },
  31. fn3(data, onSuccess, onError) {
  32. this.invoke('api/fn3', data, onSuccess, onError)
  33. },
  34. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/710362
推荐阅读
相关标签
  

闽ICP备14008679号