OpenAllWhitelistURLsInWebView

为了允许Vimeovideo嵌入我有“OpenAllWhitelistURLsInWebView”=“是”。 但是,自从我这样做以后,它只会打开列入白名单的项目并在webview中打开它们。 我需要在Safari浏览器中打开所有非白名单项目,而不是webview。 有关如何实现这一点的任何想法?

cordova1.7 | XCode 4.3.2 | Jquery 1.7.1 | JqueryMobile 1.1.0 | ios 5.1

我不知道与Cordovoa的确切区别,但我正在使用PG 1.4.1,我在PhoneGap.plist中有这个设置

在此处输入图像描述

这在我的AppDelegate.m中

- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; if([[url absoluteString] rangeOfString:@"vimeo.com"].length > 0 || [[url scheme] isEqualToString:@"file"]){ return [self.viewController webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; } [[UIApplication sharedApplication] openURL:url]; return NO; } 

这是由PG打开的非常简单的index.html

  Vimeo Google  

vimeo链接在webview中打开,Google链接在Safari中打开。

更新 Cordova 1.7

显然,在PhoneGap / Cordova的最新版本中没有调用shouldSTartLoadWithRequest函数(我认为是1.6.1)。 所以,现在如果你想在Safari中打开一个链接,你需要将一个标签的target属性设置为_blank 。 由于您并不总是可以访问代码,因此这是一个可以帮助的脚本。

      Vimeo Google  

它应该已经这样做但是因为你已经发布在这里我猜它没有。

您可以做的是覆盖AppDelegate.m文件中的shouldStartLoadWithRequest方法。 您可以添加要检查的条件(例如包含vimeo的URL)并返回true,否则返回false。

  if ( [request.URL.absoluteString rangeOfString:@"vimeo.com"].location != NSNotFound) { return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; } //open in Safari [[UIApplication sharedApplication]openURL:request.URL]; return NO; 

所以我正在使用Cordova 1.9。 稍微调试之后,我看到函数shouldStartLoadWithRequest现在应该在MainViewController.m文件中实现,而不是在AppDelegate.m文件中。 这就是它永远不会被触发的原因。

从PhoneGap 1.4.1更新到Cordova 1.9后发现了这一点。