1. ホーム
  2. Web制作
  3. html5

Html5は、同時に複数のsdkのヒントをサポートする

2022-01-21 14:49:30

必要条件

実際のプロジェクトでは、通常、いくつかのクロスプラットフォームのページを作成する必要があります。例えば、WeChatのアプレットや自社アプリ、Alipayなどのプラットフォームで表示する必要のあるイベントページなどです。今回はh5が非常にニーズに合っています。もし要件がもっと複雑で、例えばこの活動ページで何らかのスイープ機能を呼び出す必要があったり、決済機能を呼び出す必要があったり、その他のネイティブメソッドの呼び出しが必要であれば、異なるエンドのネイティブメソッドを処理するミドルウェアが必要です。

ミドルウェアの実装原理

原理は簡単で、あるクラスを抽象化し、その中で必要なメソッドをネイティブに実装し、他のエンドポイントはそのクラスを継承してすべてのメソッドをオーバーライドします。

もし怠け者なら、pc debug クラスはそのままにして、pc debug クラスのすべてのメソッドを直接親クラスで実装することができます。
実装が終わったら、次は呼び出しです。ページごとに端末の端を判断するのは面倒ですし、端ごとにミドルウェアのコードを読み込む必要はありません(非同期読み込みの場合はrequireを使えばよいでしょう)。ページ読み込みの過程で、対応する端末の判定に従ってミドルウェアオブジェクトaddonを生成し、このミドルウェアオブジェクトをwindowにマウントし、使用する場合は、直接window.addon.scan()を使用すればよい。

注意事項

WeChatとAlipayは、対応する判定方法を持っていますが、独自のアプリの判断は、ネイティブの開発は、userAgent(これは複雑ではありませんが、ネイティブが追加する方法を知っている、斗に依頼してくださいわからないニャン)内のロゴを追加する必要があります。
また、iosのWebViewはもはや同期メソッドをサポートしていません、それはすべてのメソッドが非同期に呼び出されることをお勧めします、例を参照してください。

上記コード

以下は、各端末を決定するための私のコードの一部分です。

class Addon {
  constructor () {
    let ua = window.navigator.userAgent.toLowerCase()
    if (/MPBank/.test(window.navigator.userAgent)) {
      // China Merchants Bank applet
      
    } else if (ua.match(/MicroMessenger/i) == 'micromessenger') {
      // Most phones can use this to determine if it's an applet, but a small number of phones like Huawei are slow to load, so there will be a miscalculation here
      if (window.__wxjs_environment === 'miniprogram' || ua.match(/miniprogram/i) == 'miniprogram') {
        
      } else {
        
      }
    } else if (/AlipayClient/.test(window.navigator.userAgent)) {
      // here use ua and miniprogram judgment, check compatibility first, use my.getEnv for asynchronous, not suitable here
      if (ua.match(/miniprogram/i) == 'miniprogram' || ua.match(/webview/i) == 'webview') {
        // Alipay applet
        
      } else {
        // Alipay
        
      }
    } else if (/xxxx-app/.test(window.navigator.userAgent)) {
      // app
      
    } else {
      // Other processing (web and third-party channel access) touting
      
    }
}

export let addon = new Addon()

以下は、このメソッドの簡単な例です。
ParentAddon.js

export default class ParentAddon {
     scan (data) {
         data.success('xxx')
     }
}


IosAppAddon.js

export default class IosAppAddon extends ParentAddon {
    scan (data) {
        window.scanCallback = data.success
        window.webkit.messageHandlers.scan.postMessage({
          callBack: 'scanCallback'
        })
     }
}


今回の記事は、Html5が複数のsdkを同時にサポートするためのTipsについてです。Html5の複数sdk対応内容については、スクリプトハウスの過去記事を検索していただくか、引き続き以下の関連記事を閲覧してください。