Html5は、同時に複数のsdkのヒントをサポートする
必要条件
実際のプロジェクトでは、通常、いくつかのクロスプラットフォームのページを作成する必要があります。例えば、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対応内容については、スクリプトハウスの過去記事を検索していただくか、引き続き以下の関連記事を閲覧してください。
関連
-
HTML5のmeta viewportパラメータの解析
-
videoタグによるストリーミング読み込みのhtml5実装
-
音声付き動画の自動再生機能の実装方法
-
中国語の文字にピンインを追加してコンポーネントを折りたたみ、展開するためのHTML5コード
-
html2canvasのスクリーンショットが空白になる問題の解決法
-
html5でhotcss.jsを使い、携帯電話の自己適合を実現する方法
-
data:画像データのurlファイルをBlobアップロードバックエンドメソッドに渡す。
-
キャンバスの描画は、contain または cover モードで適応され、中央に配置されます。
-
HTML5タイマーrequestAnimationFrameの使い方を深く理解する。
-
キャンバスサーチライトエフェクトのサンプルコード
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Html5モバイルdivは、ナビゲーションバーの下部を達成するために下部に固定されているいくつかの方法
-
HTML5 ドラッグ&ドロップによるファイルアップロードのサンプルコード
-
amazeuiのページチェック機能を実装するためのコード
-
canvas.toDataURL()エラーの詳細な解決策はすべてこちら
-
Webフォント読み込み方式最適化のまとめ
-
QRコードポスター付きキャンバス生成の落とし穴記録
-
Canvasユーティリティライブラリ Fabric.jsマニュアル
-
キャンバス・クロスドメイン・デピットの実践の説明
-
キャンバスの幅と高さの設定に関する問題点
-
Canvas wave garlandのサンプルコード