【问题标题】:How do I detect if a link in my iOS in-app browser will launch the App Store?如何检测我的 iOS 应用内浏览器中的链接是否会启动 App Store?
【发布时间】:2014-03-20 23:39:03
【问题描述】:

我正在构建一个带有应用内网络浏览器的 iOS 应用。

Tweetbot 包含的一项功能是能够检测链接在打开时是否会退出 Tweetbot。以下是点击 App Store 链接时发生的屏幕截图:

我将如何检测应用程序是否会因打开链接而关闭?

更新:我想这个问题还不够清楚:我知道UIWebViewDelegate 方法和[[UIApplication sharedApplication] openURL:url] 位。

我要弄清楚的不是如何打开 URL如何知道 Web 视图是否正在打开 URL - 这是关于 如何评估 URL 以确定它是否会导致在不先打开 URL 的情况下离开应用程序?

我在关注itms:// 网址吗?是否有一种简洁明了的方法可以知道给定的 URL 是否会退出应用程序而不仅仅是itms:// URL?

【问题讨论】:

    标签: ios iphone nsurl nsurlrequest url-scheme


    【解决方案1】:

    我无法确切知道另一个应用在做什么,但很可能他们实现了UIWebViewDelegate 方法webView:shouldStartLoadWithRequest:navigationType:

    检查类型是否为UIWebViewNavigationTypeLinkClicked,然后检查requestURL。如果 URLs 方案是自定义方案,则将启动另一个应用程序。

    【讨论】:

    • 这听起来完全合理——我也想看看是否有一种方法可以做到这一点涉及使用 UIWebViewDelegate,但这完全可以工作。谢谢!
    • 您为什么不使用代理来进行 Web 视图?它可以做这样的事情。
    • 查看我上面的更新——我知道 UIWebViewDelegate 是我获取 URL 的地方,但我的问题不是那个——而是关于我如何评估那个 URL 并确定它是否会导致申请退出。谢谢!
    • 查看网址的scheme。如果它是 http 或 https URL,那么 Web 视图通常只会加载新页面。如果它是文件 URL,那么文件可能会被打开。如果它是 mailto URL,则可能会打开 Mail 应用程序。几乎任何其他方案都可能适用于另一个应用程序。可以使用UIApplication canOpenURL:查看网址是否可以打开。
    【解决方案2】:

    除了@rmaddy:

    在 UIWebView 中,检测和拦截链接的唯一解决方案是 webView:shouldStartLoadingWithRequest:navigaitonType: 并检查 navigationType 是否为 UIWebViewNavigationTypeLinkClicked,正如 @rmaddy 所说。

    您可能会想到并试图找到的是这个,但它不会拦截 UIWebView 中的链接: // 在你的代码中:

    [[UIApplication sharedApplication] openURL:myURL];
    

    // 在您的 App Delegate 中:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
    {
        // Intercept links from openURL and links from other components like UITextView - present custom alert and on the alert delegate either cancel or redirect to the link
    } 
    

    【讨论】:

    • 谢谢 - 我已经更新了问题以更清楚:我完全知道如何打开一个 URL,但我的主要问题更多的是 拦截代码是什么样的?谢谢!
    猜你喜欢
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多