HTML5 コンテナーの位置オフセットの問題を修正する方法
回答: mPaaS コンテナーで位置オフセットの問題が発生した場合は、次のように設定を更新してください。
- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Skip LBS location.
[LBSmPaaSAdaptor sharedInstance].shouldSkipLBSLocation = YES;
.......
}プリセットのオフラインパッケージが H5_json.json ファイルで動作しない場合の対処法
回答: 10.1.32 ベースラインは plist フォーマットのみをサポートします。10.1.60 ベースラインは plist と JSON の両方のフォーマットをサポートします。
インストール済みのオフラインパッケージアプリケーションに関する情報を取得する方法
回答: 次のコードを使用します: NSDictionary *installedApps = [NAMServiceGet() installApps:nil];。
すべてのオフラインパッケージ情報を強制的に更新する方法
回答: カプセル化された requestAllNebulaApps メソッドを使用して、フルアップデートを実行します。
[[MPNebulaAdapterInterface shareInstance]requestAllNebulaApps:^(NSDictionary *data, NSError *error) {
}];iOS 13 で HTML5 コンテナー内をスライドすると、vux-ui pulldown コンポーネントがフリーズする
回答: この問題は、iOS システムの UIWebview のバグがトリガーされるために発生します。WKWebView への切り替え、またはフロントエンドコンポーネントの置き換えを検討してください。詳細については、「mPaaS 10.1.60 の WKWebView への対応」をご参照ください。
現在のアプリケーションに登録されているすべての JSAPI とプラグインを表示する方法
回答: HTML5 ページを開き、Xcode のビュー階層ページに移動し、lldb コンソールで po [[PSDService sharedInstance] jsApis] を実行して、すべての JavaScript API (JSAPI) を表示します。同様に、po [[PSDService sharedInstance] plugins] を実行して、登録されているすべてのプラグインを表示します。

JavaScript API またはプラグインで現在の HTML5 ページの UIViewController および WebView オブジェクトを取得する方法
回答: 実行中、プラグインは event.context パラメーターに直接アクセスでき、JavaScript API は context にアクセスできます。PSDContext オブジェクトには、必要なすべての情報が含まれています。たとえば、event.currentViewController で現在のコントローラーへのリファレンスを取得したり、context.currentViewController.psdContentView で現在の WebView を取得したりできます。

現在のページが読み込まれるときにフロントエンドから渡される起動パラメーターを取得する方法
回答: 現在のビューコントローラー (VC) の psdScene.createParam.expandParams プロパティを取得します。

JavaScript API が特定のオフラインパッケージでのみ機能するように制限する方法
回答: JSAPI の実行メソッドで、現在のページのオフラインパッケージの appId を取得します。その後、ロジックを実行するかどうかを決定します。

ページ URL をインターセプトする方法
回答: プラグインをカスタマイズし、イベントをリッスンして URL をインターセプトします。
リッスンするイベント名:
[PSDProxy addEventListener:kEvent_Proxy_Request_Start_Handler withListener:self useCapture:YES]; `インターセプトの処理:
else if ([kEvent_Proxy_Request_Start_Handler isEqualToString:event.eventType] && [event isKindOfClass:[PSDProxyEvent class]] ){ NSLog(@"-----kNBEvent_Scene_NavigationItem_Right_Setting_Click----"); PSDProxyEvent *proxyEvent = (PSDProxyEvent*) event; NSMutableURLRequest *redirectReq = proxyEvent.request.mutableCopy; NSString *appId = event.context.currentSession.createParam.expandParams[@"appId"]; NAMApp *app = [NAMServiceGet() findApp:appId version:nil]; NSString *fallBackUrl = app.fallback_host; NSString *vhost = app.vhost;; NSString *url = redirectReq.URL.absoluteString; NSLog(@"url__%@______fallBackUrl:%@",url,fallBackUrl); if ([url containsString:@"www.baidu.com"]) { [proxyEvent preventDefault]; }}
ネイティブコードから JavaScript API を手動で呼び出す方法
回答: 現在のページのベースクラスの `callHandler` メソッドを直接呼び出します。次のコードは一例です。

コンソールからオフラインパッケージの新バージョンを公開した後、クライアントが読み込みに失敗する問題
回答: この問題をトラブルシューティングする前に、「オフラインパッケージの更新メカニズム」を理解していることを確認してください。クライアントが新しいパッケージの読み込みに失敗した場合、オフラインパッケージのレンダリングプロセス中にエラーが発生した可能性があります。この問題は、以下の手順でトラブルシューティングを行ってください。
オフラインパッケージのフルアップデートに関する Remote Procedure Call (RPC) の結果を確認します。コンソールで
bizType: 4を検索してオフラインパッケージの詳細を表示し、コンソールから最新のパッケージ情報が取得されたことを確認します。前の手順が成功した場合は、サンドボックスディレクトリでオフラインパッケージが正常に解凍されたかどうかを確認します。オフラインパッケージがグローバルリソースパッケージのコンテンツを参照している場合、グローバルリソースパッケージもこのディレクトリに存在する必要があります。

オフラインパッケージがサンドボックスディレクトリにない場合は、一時的にオフラインパッケージの署名検証を無効にし、アプリを削除してから再度実行します。署名検証を無効にした後にパッケージが正しく読み込まれる場合は、署名用の秘密鍵とクライアントの検証用の公開鍵が一致していません。クライアントの公開鍵を更新してください。
これまでのすべての手順をパスしてもオフラインパッケージの更新が失敗する場合は、Safari を使用して HTML5 ページをデバッグし、エラーの具体的な原因を特定します。エラーの例としては、グローバルリソースパッケージのパスが正しくない、またはオフラインパッケージの URL が存在しない、などが挙げられます。

オフラインパッケージの HTML5 ページを開くと空白画面または 400 エラーが表示される原因
回答: 空白画面または 400 エラーは、通常、ローカルのオフラインパッケージの読み込みに失敗したことを示します。その後、アプリケーションはオンラインフォールバックアドレスを使用しようとします。ページのフォールバックアドレスが存在しない場合、ページの読み込みは失敗します。
オフラインパッケージのトラブルシューティング手順に従って、クライアントがパッケージの読み込みに失敗した原因を特定します。
オンラインフォールバックアドレスの読み込みに失敗した場合の修正として、コンソールに正しいオフラインパッケージバージョンが生成され、アップロードされていることを確認します。これには、通常のオフラインパッケージとグローバルリソースパッケージの両方が含まれます。詳細については、「オフラインパッケージの生成」をご参照ください。
プリセットのオフラインパッケージがオンラインフォールバックアドレスから読み込みに失敗した場合は、プリセットパッケージもコンソールにアップロードされていることを確認してください。
ローカルのプリセットパッケージ情報にある
fallback_base_urlが、コンソールからダウンロードした h5_json.json 設定ファイルのfallback_base_urlと一致していることを確認してください。

また、
fallback_base_url + main_urlを連結して作成されたアドレスがブラウザで読み込めることを確認してください。
HTML5 ページの「スワイプして戻る」ジェスチャーを無効にする方法
回答: この機能は、フロントエンドの HTML5 ページまたはネイティブの HTML5 コンテナーのベースクラスから無効にできます。
特定のフロントエンド HTML5 ページでスワイプバックジェスチャーを無効にするには、setGestureBack JSAPI を呼び出します。
AlipayJSBridge.call('setGestureBack',{val:false});ネイティブの HTML5 コンテナーのベースクラスから:ベースクラスの `viewDidAppear` メソッドで、システム API を呼び出して「スワイプして戻る」ジェスチャーを無効にし、`guestBack` パラメーターを設定します。この方法は、複数またはすべての HTML5 ページでジェスチャーを無効にする必要があるシナリオに適しています。
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.options.gestureBack = NO; if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = NO; } }
現在のページがミニプログラム内にあるかどうかを判断する方法
回答: 現在のページのセッションを取得し、isTinyAppWithSession メソッドを呼び出します。次のコードは一例です。
PSDSession *session = self.psdSession;
BOOL isTinyApp = [NBUtils isTinyAppWithSession:session];HTML5 ページにカスタムパラメーターを渡す方法
回答: 次のシナリオは、パラメーターの渡し方に基づいています。
ネイティブから H5 へ:
startH5ViewControllerWithParamsメソッドを呼び出す際に、次のようにパラメーターを渡します:[[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithParams:@{@"url": @"https://tech.antfin.com", @"key1":@"value1"}];。ネイティブからオフラインパッケージへ:
startH5ViewControllerWithNebulaAppメソッドを呼び出す際に、次のようにパラメーターを渡します:[[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"70000000",@"param":@{@"key2":@"value2"}}];。HTML5 から H5 へ:
pushWindowを呼び出す際に、カスタムパラメーターをpassDataに記述します。AlipayJSBridge.call('pushWindow', { // 開くページの URL url: 'https://m.taobao.com/', // ページを開くための設定パラメーター param: { readTitle: true, // タイトルを自動的に読み取る showOptionMenu: false, // 右側のメニューを非表示にする transparentTitle:'always', }, // オプション。新しいページにパラメーターを渡すために使用されます。 // 新しいページでは、AlipayJSBridge.startupParams を使用して passData を取得します。 passData: { key1: "key1Value", key2: "key2Value" } });HTML5 からオフラインパッケージへ: startApp JSAPI を呼び出す際に、カスタムパラメーターを param パラメーターに記述します。
AlipayJSBridge.call('startApp', { appId: '70000000', param: { key1:'value1' } }, function(result) { // noop });
HTML5 ページから渡されたパラメーターを取得する方法
回答: フロントエンドからパラメーターを取得する場合と、ネイティブコードから取得する場合の 2 つのシナリオがあります。
フロントエンドから: startupParams メソッドを使用します。
// 現在のページの起動パラメーター AlipayJSBridge.startupParamsネイティブコードから: 現在のページの VC オブジェクトからパラメーターを取得します。
// 現在のページの起動パラメーター NSDictionary *expandParams = self.psdScene.createParam.expandParams; NSLog(@"[mpaas] expandParams: %@", expandParams);
JavaScript API 呼び出しをインターセプトする方法
プラグインをカスタマイズしてイベントをリッスンできます。
リッスンするイベント名:
kEvent_Invocation_Event_Start。インターセプトの処理: JSAPI の名前や渡されたパラメーターなどを取得します。
else if([kEvent_Invocation_Event_Start isEqualToString:event.eventType]) { PSDInvocationEvent * invocationEvent = (PSDInvocationEvent *)event; NSString * apiName = invocationEvent.invocationName; if([apiName isEqualToString:@"setOptionMenu"] || [apiName isEqualToString:@"showOptionMenu"] ) { NSLog(@"wwww"); } }
ホームページに WebView がネストされている場合に HTML5 コンテナーがリリースされない問題の対処法
背景: 特殊なシナリオでは、オフラインパッケージの HTML5 コンテナーの WebView をアプリのホームページにネストする必要がある場合があります。WebView のスーパービューが破棄されると、HTML5 コンテナーがリリースされないことがあります。これにより、メモリリークが発生する可能性があります。
コード例:

回答: この問題は次のように対処します。
