Ios 是否使用safari打开儿童浏览器中的外部链接?

Ios 是否使用safari打开儿童浏览器中的外部链接?,ios,cordova,phonegap-plugins,childbrowser,Ios,Cordova,Phonegap Plugins,Childbrowser,我目前正在使用phoneapp中的ChildBrowser打开一个网站。然而,我想在Safari中打开本网站的所有外部链接 我没有控制这个网站的来源 我的理解是,我必须修改ChildBrowser以打开Safari中以http开头的所有链接 我不能准确地阅读Objective-C,但我相信下面的代码是相关的 - (void)loadURL:(NSString*)url { NSLog(@"Opening Url : %@",url); if( [url hasSuffix:@"

我目前正在使用phoneapp中的ChildBrowser打开一个网站。然而,我想在Safari中打开本网站的所有外部链接

我没有控制这个网站的来源

我的理解是,我必须修改ChildBrowser以打开Safari中以http开头的所有链接

我不能准确地阅读Objective-C,但我相信下面的代码是相关的

- (void)loadURL:(NSString*)url
{
    NSLog(@"Opening Url : %@",url);

    if( [url hasSuffix:@".png" ]  || 
        [url hasSuffix:@".jpg" ]  || 
        [url hasSuffix:@".jpeg" ] || 
        [url hasSuffix:@".bmp" ]  || 
        [url hasSuffix:@".gif" ]  )
    {
        [ imageURL release ];
        imageURL = [url copy];
        isImage = YES;
        NSString* htmlText = @"<html><body style='background-color:#333;margin:0px;padding:0px;'><img style='min-height:200px;margin:0px;padding:0px;width:100%;height:auto;' alt='' src='IMGSRC'/></body></html>";
        htmlText = [ htmlText stringByReplacingOccurrencesOfString:@"IMGSRC" withString:url ];

        [webView loadHTMLString:htmlText baseURL:[NSURL URLWithString:@""]];

    }
    else if ( [url hasPrefix:@"http" ])
    {
        //I have added in this else if.
    }
    else
    {
        imageURL = @"";
        isImage = NO;
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
        [webView loadRequest:request];
    }
    webView.hidden = NO;
}

有什么建议吗?

我发现最简单的方法是,如果您知道最初使用childBrowser请求的域名,并且不打算请求任何其他域,那么您可以将此事件直接写入ChildBrowserViewController.m文件

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request     navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    NSString* domain = [url host];

    // Intercept the external http requests and forward to Safari.app
    // Otherwise forward to the PhoneGap WebView
    if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"] || [[url scheme] isEqualToString:@"www"]) {
        if ( [domain isEqualToString:@"YOURDOMAIN.NAME] ) {
            return YES;
        } else {
            [[UIApplication sharedApplication] openURL:url];
            return NO;
         }
    } else {
         return YES;// [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }
}
这将捕获childBrowser发出的所有请求,如果这些请求与HTTP、HTTPS或WWW之前的标准URL约定相匹配,并且它们不是您预设的域名,那么它将使它们集中在Safari中打开。然后,当用户返回到您的应用程序时,他们仍会在单击链接时所在的上一页

我把这件事搞砸了好几个小时,直到我想出了这个

如果您需要能够使用childBrowser打开多个域主机,但仍然希望每个主机打开Safari中当前域之外的所有外部链接,我建议您执行以下操作

将以下内容添加到ChildBrowserViewController.h

BOOL scaleEnabled;
BOOL isImage;
NSString* originalURL; <- THIS RIGHT HERE
NSString* imageURL;
还有这个

@property(retain) NSString* imageURL;
@property(retain) NSString* originalURL; <- THIS RIGHT HERE
@property(assign) BOOL isImage;
然后将以下内容添加到ChildBrowserViewController.m

@synthesize imageURL;
@originalURL; <- THIS RIGHT HERE
@synthesize supportedOrientations;
@synthesize isImage;
并添加以下内容

- (void)loadURL:(NSString*)url
{
    originalURL = url; <- THIS RIGHT HERE
    NSLog(@"Opening Url : %@",url);
    NSURL *url = [request URL];
    NSString* domain = [url host];

    NSURL *oURL = [NSURL URLWithString: originalURL]; <- THIS RIGHT HERE
    NSString* oDomain = [oURL host]; <- THIS RIGHT HERE

    // Intercept the external http requests and forward to Safari.app
    // Otherwise forward to the PhoneGap WebView
    if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"] || [[url scheme] isEqualToString:@"www"]) {
        if ( [domain isEqualToString:oDomain] ) { <- THIS RIGHT HERE
            return YES;
        } else {
然后在我上面发布的方法中更改以下内容

- (void)loadURL:(NSString*)url
{
    originalURL = url; <- THIS RIGHT HERE
    NSLog(@"Opening Url : %@",url);
    NSURL *url = [request URL];
    NSString* domain = [url host];

    NSURL *oURL = [NSURL URLWithString: originalURL]; <- THIS RIGHT HERE
    NSString* oDomain = [oURL host]; <- THIS RIGHT HERE

    // Intercept the external http requests and forward to Safari.app
    // Otherwise forward to the PhoneGap WebView
    if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"] || [[url scheme] isEqualToString:@"www"]) {
        if ( [domain isEqualToString:oDomain] ) { <- THIS RIGHT HERE
            return YES;
        } else {
我还没有测试第二部分,但它应该可以正常工作

祝你好运