PhoneGap:在Safari中打开外部URL

时间:2012-04-20 11:01:59

标签: cordova

我刚刚升级到PhoneGap 1.6.1,我无法再在Safari中打开外部网址。

在此版本之前,我修改了AppDelegate.m,如下所示:

- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];
    if ([[url scheme] isEqualToString:@"http"]) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    } else {
        return [self.viewController webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
    }
}

我注意到之前曾提出类似的问题: How can I open an external link in Safari not the app's UIWebView?

但我觉得这个答案不再适用于版本1.6.1。

我也尝试在Cordova.plist中设置OpenAllWhitelistURLsInWebView,但两种设置都没有给我Safari。

提前致谢。

12 个答案:

答案 0 :(得分:40)

在新网址中打开链接的最佳方式实际上是window.open。只需将目标设置为“_system”:

window.open("http://stackoverflow.com", "_system");

在我在文档中找到这个之前,我实际上写了一个插件来做同样的事情。我将在这里留下这个答案,因为这样可以更精细地控制链接的处理。

使用PhoneGap 2.3+,我无法以任何方式在Mobile Safari中打开网址。使用_blank不起作用,我尝试了window.open(url,'_ blank'),但现在使用InAppBrowser插件打开URL(这非常糟糕)。我觉得有趣的是,那个人使用了一个插件,所以我决定使用在iOS应用程序中打开URL的标准方法编写一个打开URL的插件。您可以在this gist here: https://gist.github.com/typeoneerror/5097118上查看/获取代码。

在我的示例中,我使用jQuery连接了一个名为“_blank”的类的链接,并使用插件调用打开了这些URL:

// execute the plugin called OpenUrl, signature:
// exec(successCallback, errorCallback, pluginName, pluginMethod, params)
cordova.exec(success, error, "OpenUrl", "openUrl", [url]);

答案 1 :(得分:9)

我在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://"];
    //HACK to make url open in safari
    if (range.location != NSNotFound) {
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else {
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    }
}

答案 2 :(得分:8)

在早期版本的cordova中,您可以通过在链接中添加target =“_ blank”来在浏览器中加载网址。但现在您可以使用inApp浏览器功能。

var ref = window.open(encodeURI('your url'), '_system', 'location=no');

这会在浏览器中打开网址。使用 cordova2.7.0

Android iPhone 中进行测试

答案 3 :(得分:6)

升级到Cordova 1.6.1后出现同样的问题。

尝试添加 target="_blank" 到你的链接。

这对我有用。

答案 4 :(得分:4)

我设法使其适用于此设置:

<强> 1 将以下行添加到config.xml - PhoneGap 3.1及更高版本:

<gap:plugin name="org.apache.cordova.inappbrowser" />

<强> 2 之后你可以这样做:

<a onclick="window.open("http://www.yoururl.com/", "_system");">Link</a>

答案 5 :(得分:3)

尝试简化解决方案,这就是我最终使用的PhoneGap / Cordova 2.5.0和jQuery 1.9.1

  • OpenAllWhitelistURLsInWebView并不重要。将其设置为true,false或省略它似乎与结果无关。
  • 网址的目标是_system,如下所示:<a target="_system" href="https://rads.stackoverflow.com/amzn/click/com/B009CZICQ8" rel="nofollow noreferrer">
  • 然后我致电:

    $("a[target='_system']").click(function(event) {
    
        event.preventDefault();
        window.open($(this).attr("href"), "_system");
    });
    

答案 6 :(得分:3)

这样做:

<a href="http://www.google.com/" onclick="window.open(this.href,'_system'); return false;">Google</a>

答案 7 :(得分:2)

使用Phonegap / Cordova 1.7我已经能够通过JavaScript在外部浏览器中打开URL:

window.location.href = "http://www.google.com";

我还在Cordova.plist中将OpenAllWhitelistURLsInWebView设置为NO

答案 8 :(得分:2)

如果您使用的是Phonegap(在iOS 6中测试过),这是100%保证的解决方案。

要在Safari中打开外部URL,请执行以下操作:

  1. 外部主机(白名单)中添加链接。例如:http://google.com/
  2. Cordova.plistPhonegap.plist中,将OpenAllWhitelistURLsInWebViewYes更改为No
  3. 在您的应用中,将target="_blank"添加到您的链接中。例如:

    <a href="http://google.com" target="_blank">Google.com</a>
    
  4. 谢谢。

答案 9 :(得分:2)

今天使用此设置解决:

  1. Android:4.4
  2. iOS:8.2
  3. Cordova CLI:5.1.1
  4. In App Browser plugin: 1.2.2
  5. 然后按照以下步骤操作:

    1. 如上所述添加In App Browser插件
    2. 您的.html文件中的
    3. 自定义此行:
    4. <a href='http://www.arsdigitalia.it' target='_blank'>Go to my nice website</a>

        .js文件中的
      1. 使用以下行:
      2. document.addEventListener("deviceready", onDeviceReady, false);
        function onDeviceReady() {
            window.open = cordova.InAppBrowser.open;
        }
        window.addEventListener('load', function () {    
            $(document).on('click', 'a[target="_system"],a[target="_blank"]', function (e) {
                    e.preventDefault();
                    var url = this.href;
                    window.open(url,"_system");                    
            });
          }
        }, false);

答案 10 :(得分:1)

我认为这个方法曾经在/Classes/[yourAppName]AppDelegate.m中,现在它位于/Classes/MainViewController.m只是将它移到那里看它是否有效。

答案 11 :(得分:1)

在Safari中打开外部URL 请执行以下步骤。

1)。在外部主机(白名单)中添加链接。带完整网址 如果你想谷歌网址然后添加
例如:http://google.com/

2)。在Cordova.plist或Phonegap.plist中,更改

  

OpenAllWhitelistURLsInWebView,从Yes到No

for Android True to false。

3)。编写此代码以打开URL

window.location.href = "http://www.google.com";