Android WebViewは、ローカルの静的リソースとフォントの概要を読み込みます
- サーバーは、H5で一般的に使用される静的リソースのzipパッケージを送信し、ローカルにダウンロードして解凍します。
- WebViewはパッケージ内のhtmlファイルをロードし、WebViewClientを書き換えます
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
メソッド、リクエストをインターセプトし、URLをインターセプトして照合した後にWebResourceResponseを返します。それ以外の場合は、nullを返します。
- H5はローカルフォントをロードする必要があります。次のようなファイルプロトコルを使用できます。
// H5端
@font-face {
font-family: 'xxx';
src: url('file:///android_asset/fonts/xxx.ttf');
}
Android側のassets / fontsフォルダーにフォントファイルを置くだけです。
フォントファイルが大きすぎる場合は、フォントファイルをsdディレクトリに配置するか、サーバーがフォントファイルを送信して、フロントエンドがそれに応じてパスを変更することもでき
ます。たとえば、フォントファイルを
storage /に配置します。Android側のemulated / 0 / WebResource / fonts
/ xxx.ttfのフロントエンドはそれに応じて変更できます
@font-face {
font-family: 'xxx';
src: url('file:///storage/emulated/0/WebResource/fonts/xxx.ttf');
}
Android側では、傍受やその他の処理を行う必要はありません。WebViewにローカルフォントファイルをロードさせることができます。
発生した問題
-
jsbを介してStringを渡すと、スタックオーバーフローエラーが発生します。その理由は、AndroidがJsonObjectをStringに使用するためです。データが大きすぎると、JsonObjectはスタックオーバーフローエラーをスローします。
解決策:jsbはオブジェクトを直接渡します -
フロントエンドはインターフェースを呼び出すことができません。
解決策:フロントエンドは、jsbを介してインターフェースを要求し、ヘッダーを要求するようにクライアントに指示します。
クライアントはインターフェースを呼び出し、データをフロントエンドに返します。 -
iOSとAndroidには、ローカルフォントをロードする統一された方法がありません。
解決策:フロントエンドに2つのパッケージ