ios - Objective-C:打开 UIWebView 外部的链接

标签 ios objective-c uiwebview

我正在尝试从 UIWebView 打开链接并将其打开到另一个应用程序。 我首先在社交媒体上对其进行测试,Facebook 和 Twitter 运行良好,但 Instagram 和 Youtube 则不然。请参阅下面的代码。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (navigationType == UIWebViewNavigationTypeLinkClicked ) {
        if ([request.URL.scheme isEqualToString:@"https"]) {
            if ([request.URL.host isEqualToString:@"www.facebook.com"]) {
                NSLog(@"FB FROM WEBVIEW BUTTON");
                if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) {
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"fb://profile/FlawlessFaceandBody"]];
                }
                else {
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.facebook.com/FlawlessFaceandBody/"]];
                    NSLog(@"No FB APP");
                }
                [self homepage];
            }
            return YES;
        }
        else if ([request.URL.scheme isEqualToString:@"https"]) {
            if ([request.URL.host isEqualToString:@"twitter.com/myflawless"]) {
                NSLog(@"TW FROM WEBVIEW BUTTON");
                if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitter://"]]) {
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"twitter://profile/myflawless"]];
                }
                else {
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://twitter.com/myflawless?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor"]];
                    NSLog(@"No TW APP");
                }
                [self homepage];
        }
            return YES;
        }
        else if ([request.URL.scheme isEqualToString:@"https"]) {
            if ([request.URL.host isEqualToString:@"instagram.com/myflawless"]) {
                NSLog(@"IG FROM WEBVIEW BUTTON");
                if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"instagram:/user/"]]) {
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"instagram://profile/myflawless"]];
                }
                else {
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.instagram.com/myflawless/"]];
                    NSLog(@"No IG APP");
                }
                [self homepage];
            }
            return YES;
        }
    }
    else if ([request.URL.scheme isEqualToString:@"https"]) {
        if ([request.URL.host isEqualToString:@"youtube.com/FlawlessFaceandBody"]) {
            NSLog(@"YT FROM WEBVIEW BUTTON");
            if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"youtube://"]]) {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"youtube://profile/FlawlessFaceandBody"]];
            }
            else {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.youtube.com/user/FlawlessFaceandBody"]];
                NSLog(@"No YT APP");
            }
            [self homepage];
        }
        return YES;
    }

    return YES;
}

另外,在这之后我会尝试从 UIWebView 打开不同的选择链接并将其传递给 Safari,我希望你也能给出答案。

谢谢!

最佳答案

您是否遇到过在您的系统日志中看到此类错误“不允许此应用查询方案 xxx”?我猜 Youtube 和 Instagram 不在您的白名单中。您可以通过观察在不在白名单中的 URL 上调用“canOpenURL”方法来检查这一点,它会返回“NO”,即使如您所说,手机上安装了 Instagram 和 Youtube。希望对您有所帮助。

关于ios - Objective-C:打开 UIWebView 外部的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37248767/

相关文章:

ios - 如何快速隐藏静态 UItableview 中的特定单元格?

IOS10 将所有 xcode 控制台日志打印到 iPhone 应用程序页面内的 UITextview

iphone - 为什么我无法再存储 UIWebView 的 UIScrollView 委托(delegate)属性?

iOS UIScrollView setScrollEnabled 失败

ios - 处理从 QR 码读取的数据

ios - 升级到 iOS 13 后,钥匙串(keychain)查询总是返回 errSecItemNotFound

ios - 如何在使用 UIImagePickerController 选择照片后显示 'preview' 屏幕

在它自己的 .h 文件中定义的 objective-c 协议(protocol)?

objective-c - 如何确定 Apple 方法是否异步?

iPhone UIWebview——保存已下载的图像