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