【问题标题】:iPhone: After UIWebView opens external browser, then returning to app opens it a second timeiPhone:UIWebView打开外部浏览器后,返回应用程序再次打开它
【发布时间】:2012-05-23 12:08:33
【问题描述】:

我有一个UIWebView,它会加载一个 HTML 页面,其中包含一些指向 App Store 的链接(<a herf="http://itunes/bla/bla/bla"> 类型的链接)。

单击一个链接,打开外部 Safari,然后打开外部 App Store 应用程序并成功转到正确的页面。

如果你然后点击主页按钮并返回跳板并再次点击应用程序,它将短暂打开到显示的UIWebView,然后再次跳转到外部Safari和外部App Store应用程序。

如果您再次返回应用程序,它会留在应用程序中。

所以发生的情况是,从UIWebView HTML 页面打开外部浏览器链接后返回应用程序,然后会再次跳转回同一个链接。

有人知道是什么原因造成的吗?

我使用的是 Xcode 4.2.1,它发生在模拟器和实际设备上(iPad 1 和 iOS 4.3)。

编辑 - 解决方案:

好的,这是我解决问题所必须做的(感谢 Ben 在下面的回复,他让我看到了正确的区域):

这是我原来的方法:

- (BOOL)webView:(UIWebView *)_webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (didLoad) { //Do not jump to URL when view first loads
        return YES;
    }

    [[UIApplication sharedApplication] openURL:[request URL]];
    return YES;
}

这是我的固定方法,不会一直跳转到 URL:

- (BOOL)webView:(UIWebView *)_webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (didShowURL) { //Do not jump to URL when returning to app
        didShowURL = 0;
        return NO;
    }

    if (didLoad) { //Do not jump to URL when view first loads
       return YES;
    }

    didShowURL = 1;
    [[UIApplication sharedApplication] openURL:[request URL]];
    return YES;
}

【问题讨论】:

    标签: iphone objective-c ios cocoa-touch ios4


    【解决方案1】:

    我建议为您的链接使用itms-apps:// 协议。这会将用户直接发送到 App Store 中的应用程序,而无需重定向。

    NSURL *appStoreLink = [NSURL URLWithString:@"itms-apps://itunes.apple.com/us/app/instagram/id389801252?mt=8"];
    [[UIApplication sharedApplication] openURL:appStoreLink];
    

    【讨论】:

    • 我不知道你能做到这一点!谢谢!尽管在使用 bit.ly 之类的链接缩短器时,这不适用于跟踪目的,但这是需要了解的好信息! :)
    • 是的。尽管如果需要,您可以在应用内使用 Google Analytics 或 Flurry 等分析库跟踪事件。
    • 这是另一个好主意(Flurry)...感谢您的提示...为此给了您 +1。
    【解决方案2】:

    您的 webview 正在重新加载到其最后一页(应用商店页面),并再次自动将用户重定向。您只需要确保在重新加载应用时不会再次尝试加载应用商店链接。

    根据您的应用设置,您可以使用

    viewWillAppear
    

    并在每次视图被带到前面时重新加载带有链接的原始 HTML 页面。

    【讨论】:

    • 谢谢 Ben... 我会尽快调查一下,看看是否可行!
    • 我将此标记为正确答案,因为它让我在正确的领域寻找答案...将我的解决方案添加到我上面的问题中。谢谢
    猜你喜欢
    • 2013-07-30
    • 2015-11-02
    • 2014-09-02
    • 2023-03-30
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多