2

为了允许 Vimeo 视频嵌入,我有“OpenAllWhitelistURLsInWebView”=“yes”。但既然我这样做了,它只会打开列入白名单的项目,并显然在 webview 中打开它们。我需要在 safari 浏览器中打开所有非白名单项目,而不是 webview。关于如何做到这一点的任何想法?

科尔多瓦 1.7 | XCode 4.3.2 | jQuery 1.7.1 | jQueryMobile 1.1.0 | IOS 5.1

4

3 回答 3

2

我不知道与 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

<body>
   <a href="http://www.vimeo.com">Vimeo</a>
   <a href="http://www.google.com">Google</a>
</body>

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

更新科尔多瓦 1.7

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

<head>
    <script type="text/javascript" src="cordova-1.7.0.js"></script>
    <script>  
        document.onclick = checkLink;
        function checkLink(e) {
            var url = e.target.href;
            if(url.indexOf('vimeo.com') == -1){
                window.open(url,'_blank');
            }
        }
    </script>
</head>
<body>
    <a href="http://www.vimeo.com">Vimeo</a>
    <a href="http://www.google.com" target="_blank">Google</a>
</body>
于 2012-06-04T20:39:03.173 回答
0

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

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

于 2012-07-05T12:47:11.750 回答
0

它应该已经这样做了,但既然你已经在这里发布了,我猜它没有。

您可以做的是覆盖shouldStartLoadWithRequestAppDelegate.m 文件中的方法。您可以添加要检查的条件(例如包含 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;
于 2012-05-31T20:38:59.900 回答