最近、UIWebView が ITMS リンクで窒息していることがわかりました。具体的には、アプリの UIWebView から、このようなサイトに移動して[App Store で利用可能] リンクをクリックすると、UIWebView は「Error Domain=WebKitErrorDomain Code=101 The URL can't be示した。」
少しグーグルで調べた後、アプリ リンクのリクエストをキャッチし、iOS で処理する必要があることに気付きました。スキームが の「itms」で始まるかどうかを確認することから始めましたが-webView:shouldStartLoadWithRequest:navigationType:
、システムが処理できる他の種類のアプリ リンクがある可能性があることに気付きました。だから私は代わりにこれを思いついた:
- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
// Give iOS a chance to open it.
NSURL *url = [NSURL URLWithString:[error.userInfo objectForKey:@"NSErrorFailingURLStringKey"]];
if ([error.domain isEqual:@"WebKitErrorDomain"]
&& error.code == 101
&& [[UIApplication sharedApplication]canOpenURL:url])
{
[[UIApplication sharedApplication]openURL:url];
return;
}
// Normal error handling…
}
これについて 2 つの質問があります。
- これは正気ですか?具体的には、エラー ドメインとエラー コードをチェックし、userInfo から URL 文字列を取得しています。そのようなものは残っている可能性がありますか?
- これは上記のリンクのアプリ ストア リンクでは機能しますが、自分のアプリに戻ると、「フレームの読み込みが中断されました」というエラーで失敗した後続のリクエストがあったようです。どうすればそれを取り除くことができますか? からのリクエストをOSに処理させると発生しない
-webView:shouldStartLoadWithRequest:navigationType:
ので、ちょっと面倒です。
そのような要求をどのように処理しますか?