Cordova 3.1 在 iOS6 上的 Safari 中打开链接

Posted

技术标签:

【中文标题】Cordova 3.1 在 iOS6 上的 Safari 中打开链接【英文标题】:Cordova 3.1 open link in Safari on iOS6 【发布时间】:2013-10-10 23:19:30 【问题描述】:

我正在使用 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');

【问题讨论】:

你已经看过this了吗? 是的,我尝试了所有可以在 Google 上找到的方法。 如果您从硬编码的<a> html 标签打开链接会发生什么? 【参考方案1】:

我已经通过本机端(目标 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”链接,并在设备的默认浏览器中打开链接。

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

以上是关于Cordova 3.1 在 iOS6 上的 Safari 中打开链接的主要内容,如果未能解决你的问题,请参考以下文章

InAppBrowser 没有在 ios6 上显示工具栏与 cordova 3.3.0

Cordova:我无法使用 android 在 cordova 3.1 中获取 fakeGPS 的位置

我如何将 Phonegap 项目创建的 cordova 1.9 更新为 cordova 3.1

Cordova/Phonegap 3.1 键盘(仍然)覆盖焦点表单字段 - iOS 7

Cordova 3.1 和 Phone Gap Geolocation 在 Android 上因“位置检索超时”而失败

可以从 Windows 机器在 iPad 上远程调试 javascript 吗?