SORU
28 Kasım 2010, Pazar


Nasıl bir UİWebView app URL işlemek için?

Geçenlerde benim UİWebView ITMS bağlantıları boğulduğunu bulundu. Özellikle, UİWebView benim app, ben gitmek için bir site gibi this one ve tıklayın "Mevcut App Store" bağlantı, UİWebView ki hata ile "Error Domain=WebKitErrorDomain Kodu=101 URL olamayacağını göstermiştir."

Google'da biraz araştırdıktan sonra, app links için istekleri yakalamak ve iOS onlarla başa konuşmam gerektiğini fark ettim. Eğer düzeni "" sistem işleyebilir app bağlantıları başka türlü olabileceğini fark -webView:shouldStartLoadWithRequest:navigationType:, ama. ıtms ile başlar olmadığını görmek için bakarak başladım Bunu, onun yerine ben geldim:

- (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…
}

Bu konuda iki sorum var:

  1. Bu mantıklı mı? Özellikle hata etki ve hata kodunu kontrol ve kullanıcı bilgisi URL dize getirme ediyorum. Bu şeyler kalması muhtemeldir?
  2. Bu yukarıda bağlantılı app store bağlantısı için çalışır, ama benim app için geri geçiş yaptığınızda, o başarısız oldu, sonraki başarısız bir istek var gibi görünüyor "Çerçeve yük kesildi". bundan nasıl kurtulabilirim? Ben bu sinir bozucu bir durum yani OS isteği işlemek -webView:shouldStartLoadWithRequest:navigationType:, zaman olmuyor.

Nasıl yapmaksanaböyle istekleri?

CEVAP
14 Aralık 2010, Salı


Aklıma gelen şey şu. webView:shouldStartLoadWithRequest:navigationType:, OS non-http ve https olmayan gibi olmasını talep eder: herhangi işlemek için soruyorum

- (BOOL)webView:(UIWebView *)wv shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    // Determine if we want the system to handle it.
    NSURL *url = request.URL;
    if (![url.scheme isEqual:@"http"] && ![url.scheme isEqual:@"https"]) {
        if ([[UIApplication sharedApplication]canOpenURL:url]) {
            [[UIApplication sharedApplication]openURL:url];
            return NO;
        }
    }
    return YES;
}

Bu çok kanlı "Yük Kesildi" hatası. Çerçeve dışında çalışır Web görünümü isteği yük olmaz webView:shouldStartLoadWithRequest:navigationType: yanlış dönen ve bu nedenle tarafından ele hataları olacağını hiç sanmazdım. Ama ben NO yukarıda, döndüğüm halde hala "Yük" hata. Kesintiye Çerçeve Bu yüzden mi?

Her neyse, -webView:didFailLoadWithError: göz ardı edilebilir sanıyorum:

- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
    // Ignore NSURLErrorDomain error -999.
    if (error.code == NSURLErrorCancelled) return;

    // Ignore "Fame Load Interrupted" errors. Seen after app store links.
    if (error.code == 102 && [error.domain isEqual:@"WebKitErrorDomain"]) return;

    // Normal error handling…
}

Ve şimdi iTunes URL mailto:s ve app bağlantılar gibi doğru düzgün çalışıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • LimeFire

    LimeFire

    2 ŞUBAT 2012
  • Top Gear

    Top Gear

    27 Mart 2006