6

我正在使用 Cordova 3.1 构建一个 iOS 应用程序。我有一个想在 Safari 中打开的链接。我已经安装了 org.apache.cordova.inappbrowser 插件,它在我的 iPhone (iOS 7) 和模拟器 (iOS5;iOS6.1;iOS7) 上运行良好,但是如果我在所有设备上尝试 (iOS6) 它就不行不工作。

有人知道如何解决这个问题或在运行 iOS6 的真实设备上尝试过吗?我正在使用此代码打开链接:

window.open('http://www.google.nl', '_system');
4

2 回答 2

3

好吧,我已经通过本机方面实现了这一点(目标 C)

在“MainViewController.m”中添加此方法

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    NSString *str = url.absoluteString;
    NSRange range = [str rangeOfString:@"http://"];
    NSRange range1 = [str rangeOfString:@"https://"];

    if (range.location != NSNotFound || range1.location != NSNotFound) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }
}

这会处理 iOS6 和 iOS7 的“http”和“https”链接,并在设备的默认浏览器中打开链接。

于 2014-01-03T04:43:34.277 回答
0

我知道这是一个老问题,但我也遇到过,只是写了一个小插件来帮助解决它。Siddhartha 的回答几乎是正确的,但是当我使用它时,它拦截了所有网络请求,包括对 my 的请求,index.html这似乎将我的应用程序移到了 Safari 中。我需要的是一种只处理显式请求的方法,这样我就可以在 Safari 中打开特定的(外部)URL。

关于 Phonegap 有很多类似的问题,它似乎嵌入了对 with 的特殊window.open处理_system。那会很好,但 Cordova 没有这个功能。

最后,我编写了一个嵌入了足够多的 Objective C 的小插件(非常模仿 Siddhartha 的答案),但由于插件的魔力,它可以按需执行,使用cordova.exec. 我希望将它修补到 window.open 以实现与 Phonegap 相同的功能,但这将是另一天,它并不会真正影响这个答案。

据我所知,在现代科尔多瓦,这是唯一可行的策略。

于 2015-02-23T21:33:38.093 回答