すべてのプロダクト
Search
ドキュメントセンター

Mobile Platform as a Service:iOS での HTML5 使用に関する FAQ

最終更新日:Jan 17, 2025

H5 コンテナーの位置オフセットの問題を解決するにはどうすればよいですか?

A: mPaaS コンテナーを使用する場合、H5 コンテナーの位置オフセットの問題が発生する可能性があります。次の方法を参照して設定を更新してください。

- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    // LBS ターゲティングをスキップする
    [LBSmPaaSAdaptor sharedInstance].shouldSkipLBSLocation = YES;

    .......
    
}

ファイル H5_json.json を使用する場合、プリセットオフラインパッケージが有効になりません。

A: ベースライン 10.1.32 では、.plist ファイルのみがサポートされています。ベースライン 10.1.60 では、.plist ファイルと .json ファイルの両方がサポートされています。

オフラインパッケージでインストールされたアプリケーションの情報を取得するにはどうすればよいですか?

A: このコードを参照してください: NSDictionary *installedApps = [NAMServiceGet() installApps:nil];

すべてのオフラインパッケージの情報を強制的に更新するにはどうすればよいですか?

A: カプセル化されたメソッド requestAllNebulaApps を使用して、フルアップデートを実行できます。

[[MPNebulaAdapterInterface shareInstance]requestAllNebulaApps:^(NSDictionary *data, NSError *error) {

 }];

iOS 13 では、コンポーネント vux-ui pulldown が HTML5 コンテナーのスクロール操作中にハングすることがあります。

A: この問題は、iOS オペレーティングシステムで UIWebview のバグがトリガーされるために発生します。 WKWebview に切り替えるか、フロントエンドコンポーネントを変更することを検討してください。 WKWebview への切り替え方法については、「mPaaS 10.1.60 が WKWebView に適応する」をご参照ください。

現在のアプリケーションによって登録されているすべての JSAPI とプラグインを表示するにはどうすればよいですか?

A: HTML5 ページを開き、Xcode [ビュー階層] ページに入り、lldb [コンソール] で po [[PSDService sharedInstance] jsApis] を使用してすべての JSAPI を表示します。同様に、po [[PSDService sharedInstance] plugins] を使用して、登録されているすべてのプラグインを表示します。

image

JSAPI またはプラグインで現在の HTML5 ページの UIViewController オブジェクトと Webview オブジェクトを取得するにはどうすればよいですか?

A: 実際の実行中に、プラグインではパラメーター event.context を直接取得でき、JSAPI では context を取得できます。コンテキストオブジェクト PSDContext では、必要なすべての情報またはリファレンスを取得できます。たとえば、現在のコントローラーへのリファレンス event.currentViewController や現在の WebView へのリファレンス context.currentViewController.psdContentView などです。

image

現在のページの読み込み時にフロントエンドから渡された起動パラメーターを取得するにはどうすればよいですか?

A: 現在の VC の属性 psdScene.createParam.expandParams を直接取得します。

image

特定のオフラインパッケージ内でのみ JSAPI を動作させるにはどうすればよいですか?

A: JSAPI の実際の実行メソッド内で、現在のページのオフラインパッケージの appId を取得してから、ロジックを実行するかどうかを決定します。

image

ページの URL をブロックするにはどうすればよいですか?

A: プラグインをカスタマイズし、関連イベントを監視することでこれを実装できます。

  • 監視対象のイベント名:

[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];
 }}

ネイティブで JSAPI を手動で呼び出すにはどうすればよいですか?

A: 現在のページの基底クラスの callHandler メソッドを直接呼び出すことができます。例については、次のソースコードを参照してください。

image

コンソールがオフラインパッケージの新しいバージョンをリリースした後、クライアントが新しいオフラインパッケージを正常に読み込めません。

A: この問題の解決策を確認する前に、「オフラインパッケージはどのように更新されますか」をすでに理解していることを確認してください。クライアントが新しいパッケージを正常に読み込めない場合、オフラインパッケージのレンダリングで任意の段階でエラーが発生する可能性があります。次の手順を使用して、この問題のトラブルシューティングを行うことができます。

  • オフラインパッケージを完全に更新するための RPC によって返された結果を表示します。コンソールで、bizType: 4 を検索します。返されたオフラインパッケージの詳細を再確認し、コンソールから最新のパッケージ情報が取得されたことを確認します。

  • 前の手順で問題が見つからなかった場合は、サンドボックスディレクトリのオフラインパッケージが正常に解凍されたかどうかを確認します。注: 現在のオフラインパッケージがグローバルリソースパッケージ内のコンテンツを参照している場合、解凍されたディレクトリにはグローバルリソースパッケージも含まれている必要があります。

    image

  • 前の手順でサンドボックスディレクトリに対応するオフラインパッケージが見つからなかった場合は、オフラインパッケージの署名検証を一時的に無効にし、アプリを削除して再実行できます。署名検証を無効にした後、読み込みが正常に戻った場合は、オフラインパッケージの署名の作成に使用された秘密鍵が、クライアントの署名の検証に使用された公開鍵と一致しないことを示唆しています。この問題を解決するには、クライアントの対応する公開鍵情報を更新する必要があります。

  • 前のすべての手順で問題が見つからず、この問題が解決しない場合は、Safari を使用して対応する HTML5 ページをデバッグし、エラーの実際の原因を表示できます。原因の例としては、グローバルリソースパッケージのパスが正しくないことや、オフラインパッケージを読み込むための URL が無効であることなどが挙げられます。

    05f6854b87b815382a5771734be322fb

HTML5 ページを開くと空白のページまたは 400 エラーコードが表示されるのはなぜですか?

A: 空白のページまたは 400 エラーコードの通常の原因は、ローカルオフラインパッケージの読み込みに失敗し、オンラインフォールバックアドレスが使用されることです。ただし、対応するページのフォールバックアドレスが存在しないため、ページの読み込みに失敗します。

  • 前のトピックの手順を使用して、クライアントがオフラインパッケージを読み込めない理由を調べてください。

  • オンラインフォールバックアドレスの読み込みに失敗する問題に関しては、対応するオフラインパッケージの正しいバージョンが生成され、通常のオフラインパッケージとグローバルリソースパッケージを含め、コンソールを使用してすでにアップロードされていることを確認してください。詳細については、「HTML5 オフラインパッケージを生成する」をご参照ください。

  • プリセットオフラインパッケージのオンラインフォールバックアドレスが無効な場合は、まず、同じプリセットオフラインパッケージがコンソールを使用してアップロードされていることを確認してください。

  • ローカルプリセットパッケージ情報 fallback_base_url の fallback_base_url と、コンソールからダウンロードされた構成ファイル h5_json.json の fallback_base_url fallback_base_url が同じであることを確認してください。

    image

    image

  • そして、fallback_base_url + main_url の組み合わせアドレス「fallback_base_url + main_url」は Web ブラウザーで正常に読み込むことができます。

    image

HTML5 ページで前のページに戻るためのスワイプジェスチャを無効にするにはどうすればよいですか?

A: フロントエンド HTML5 ページまたはネイティブ HTML5 コンテナーの基底クラスでこのジェスチャを無効にすることができます。

  • フロントエンド HTML5 ページでジェスチャを無効にする: setGestureBack JSAPI を呼び出してこれを実装します。特定の HTML5 ページで前のページに戻るためのスワイプジェスチャを無効にする必要がある場合に、この方法を使用します。

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;
          }
      }

現在のページがミニプログラム内のページかどうかを判断するにはどうすればよいですか?

A: 現在のページのセッションを取得し、isTinyAppWithSession を呼び出してこれを判断します。コードサンプルは次のとおりです。

PSDSession *session = self.psdSession;
BOOL isTinyApp = [NBUtils isTinyAppWithSession:session];

HTML5 ページはどのようにカスタムパラメーターを渡しますか?

A: パラメーターを渡す方法に基づいて、次のシナリオが存在します。

  • ネイティブ HTML5: メソッド startH5ViewControllerWithParams を呼び出すときに、[[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithParams:@{@"url": @"https://tech.antfin.com", @"key1":@"value1"}]; を渡します。

  • ネイティブ - オフラインパッケージ: メソッド startH5ViewControllerWithNebulaApp を呼び出すときに、[[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"70000000",@"param":@{@"key2":@"value2"}}]; を渡します。

  • HTML5 - HTML5: 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 ページから渡されたパラメーターを取得するにはどうすればよいですか?

A: フロントエンドまたはネイティブから取得できます。

  • フロントエンドから取得する: startupParams メソッドを使用して取得します。

// 現在のページの起動パラメーター。
AlipayJSBridge.startupParams
  • ネイティブから取得する: 現在のページの VC オブジェクトを使用して取得します。

// 現在のページの起動パラメーター。
NSDictionary *expandParams = self.psdScene.createParam.expandParams;
NSLog(@"[mpaas] expandParams: %@", expandParams);

JSAPI の呼び出しをブロックするにはどうすればよいですか?

A: プラグインをカスタマイズし、関連イベントを監視することでこれを実装できます。

  • 監視対象のイベント名: 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、H5 コンテナーを解放できない場合はどうすればよいですか?

背景: オフラインパッケージの H5 コンテナーの WebView をアプリのホームページにネストする必要がある特別なシナリオがいくつかあります。WebView のスーパービューが破棄されると、H5 コンテナーが破棄されない場合があり、メモリリークの問題が発生します。

コードサンプルは次のとおりです:image.png

A: 次のコードで処理してみてください。

image.png