【问题标题】:Is it possible to open a link in Google chrome and Opera like safari in iOS from iOS Application是否可以从 iOS 应用程序在 iOS 中打开类似 Safari 的 Google chrome 和 Opera 中的链接
【发布时间】:2012-01-19 05:14:15
【问题描述】:

我需要澄清一下,是否可以从 iOS 应用程序在 iOS 中的 Safari 等 Google Chrome 和 Opera 浏览器中打开 URL。

任何人的帮助将不胜感激。

【问题讨论】:

  • 嗯...是的,您可以在任何浏览器中打开链接...您要动画吗?
  • 不,我不是要动画。我想知道如何在 chrome 和 safari 中打开链接。
  • 如果我们在 safari 中打开一个链接,它会在 safari 中打开单独的应用程序,对吗?链接是否会打开到 google chrome 和 Opera?
  • 哦,那么回答您的第一个请求。可能的欺骗:stackoverflow.com/questions/2899699/…
  • 嘿抱歉,您提供的链接是针对 safari 的。我想知道如何从我们的应用程序中打开 google chrome 浏览器中的链接

标签: objective-c ios google-chrome safari opera


【解决方案1】:

对于谷歌浏览器,你可以在这里查看一些来自谷歌的示例代码,展示如何在 Chrome 而不是 Safari 中加载 URL https://developers.google.com/chrome/mobile/docs/ios-links

Opera 支持“ohttp”方案,因此也可以为此做类似的事情。

【讨论】:

  • 仅供参考,这个类现在包含在 Google 开源框架中。因此,如果您已经在应用程序中使用了它,只需 #import <GoogleOpenSource/GoogleOpenSource.h> 即可访问 OpenInChromeController 类。
  • @orta 只是我还是这个答案中的链接现在已经死了?
【解决方案2】:

这是一个使用的 URLOpener 类,

用法,

NSString * url = @"http://www.apple.com";
NSString * userAgent = BROWSER_CHROME;
URLOpener * opener = [[URLOpener alloc] initWithURLString:url browser:userAgent];
[opener openURL];

URLOpener.h

#define BROWSER_CHROME  @"chrome"
#define BROWSER_OPERA   @"opera"

@interface URLOpener : NSObject

@property (nonatomic, retain) NSURL * url;
@property (nonatomic, retain) NSString * browser;

- (id) initWithURL:(NSURL *)u;
- (id) initWithBrowser:(NSString *)b;
- (id) initWithURL:(NSURL *)u browser:(NSString *)b;
- (id) initWithURLString:(NSString *)us browser:(NSString *)b;

- (BOOL)openURL;

@end

URLOpener.m

#import "URLOpener.h"

@implementation URLOpener

@synthesize url, browser;

- (id) initWithURL:(NSURL *)u
{
    self = [super init];
    if (self) {
        self.url = u;
    }
    return self;
}

- (id) initWithBrowser:(NSString *)b
{
    self = [super init];
    if (self) {
        self.browser = b;
    }
    return self;
}

- (id) initWithURL:(NSURL *)u browser:(NSString *)b
{
    self = [super init];
    if (self) {
        self.url = u;
        self.browser = b;
    }
    return self;
}

- (id) initWithURLString:(NSString *)us browser:(NSString *)b
{
    NSURL * u = [NSURL URLWithString:us];
    return [self initWithURL:u browser:b];
}


- (BOOL)openURL
{
    if ([BROWSER_CHROME compare:self.browser options:NSCaseInsensitiveSearch] == NSOrderedSame) {
        return [self openInChrome];
    } else  if ([BROWSER_OPERA compare:self.browser options:NSCaseInsensitiveSearch] == NSOrderedSame) {
        return [self openInOperaMini];
    }else  if ([[UIApplication sharedApplication] canOpenURL:self.url] )
    {
        return [[UIApplication sharedApplication] openURL:self.url];
    } else {
        NSLog(@"Could not open url: %@", self.url);
        return NO;
    }
}

- (BOOL) openInChrome
{
    // is chrome installed??
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"googlechrome://"]])
    {
        NSString *scheme = self.url.scheme;

        // Replace the URL Scheme with the Chrome equivalent.
        NSString * chromeScheme = nil;
        if ([scheme compare:@"http" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
            chromeScheme = @"googlechrome";
        } else if ([scheme compare:@"https" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
            chromeScheme = @"googlechromes";
        }

        if (chromeScheme) {
            NSString *absoluteString = [self.url absoluteString];
            NSRange rangeForScheme = [absoluteString rangeOfString:@":"];
            NSString *urlNoScheme = [absoluteString substringFromIndex:rangeForScheme.location];
            NSString *chromeURLString = [chromeScheme stringByAppendingString:urlNoScheme];
            NSURL *chromeURL = [NSURL URLWithString:chromeURLString];
            return [[UIApplication sharedApplication] openURL:chromeURL];
        } else {
            return [[UIApplication sharedApplication] openURL:self.url];
        }

    } else {
        return [[UIApplication sharedApplication] openURL:self.url];
    }
}

- (BOOL) openInOperaMini
{
    // is opera mini installed??
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"ohttp://"]])
    {
        NSString *scheme = self.url.scheme;

        // Replace the URL Scheme with the opera equivalent.
        NSString * operaScheme = nil;
        if ([scheme compare:@"http" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
            operaScheme = @"ohttp";
        } else if ([scheme compare:@"https" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
            operaScheme = @"ohttps";
        }

        if (operaScheme) {
            NSString *absoluteString = [self.url absoluteString];
            NSRange rangeForScheme = [absoluteString rangeOfString:@":"];
            NSString *urlNoScheme = [absoluteString substringFromIndex:rangeForScheme.location];
            NSString *operaURLString = [operaScheme stringByAppendingString:urlNoScheme];
            NSURL *operaURL = [NSURL URLWithString:operaURLString];
            return [[UIApplication sharedApplication] openURL:operaURL];
        } else {
            return [[UIApplication sharedApplication] openURL:self.url];
        }

    } else {
        return [[UIApplication sharedApplication] openURL:self.url];
    }
}

- (void) dealloc {
    [url release];
    [browser release];

    [super dealloc];
}

@end

【讨论】:

  • 为什么要检查 Chrome 的方案?你不能用 googlecrome 替换 http,如果 's' 留在那里,它就已经在那里了吗?
【解决方案3】:

偶然发现这个...@karim 在这里提供了很棒的代码。我遇到了类似的问题,最终写了Choosy - 你可以在你的项目中使用它来添加对许多 3rd-party 应用程序的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-12
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2015-09-17
    相关资源
    最近更新 更多