在带有PhoneGap的JQuery Mobile中,链接无法在外部浏览器中打开

时间:2013-02-07 00:40:45

标签: jquery ios cordova jquery-mobile

我在使用JQuery Mobile 1.2.0的PhoneGap 2.3.0中遇到了问题。

任何外部链接iniOS都会在应用内打开,而不是打开他们在应用内打开的Safari,这样用户就无法重新启动它而无法重新启动它。

我已经尝试了 rel ="外部" 目标=" _blank" 来表明它是一个&#39>外部链接,但没有成功。

我已经看到PhoneGap与JQMobile应该采取行动的默认方式是我想要的方式。我发现了很多关于这种行为的请求,但没有找到方法。

4 个答案:

答案 0 :(得分:14)

我在我的主播链接中添加了rel="external"

然后添加/覆盖了shouldStartLoadWithRequest类中的MainViewController方法:

- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *url = [request URL];

    // Intercept the external http requests and forward to Safari.app
    // Otherwise forward to the PhoneGap WebView
    if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]){
        [[UIApplication sharedApplication] openURL:url];
        return NO;
    }
    else {
        return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
    }
}

在jQuery Mobile 1.2和Phonegap 2.2.0中对我有用。它应该在Phonegap 2.3.0中也一样 - 但我没有测试过。

=============================================== ===================================

<强>更新

在Phonegap 2.7.0或更高版本中可能没有必要这样做。 Phonegap现在可以在UIWebView,Safari或InAppBrowser组件中打开链接。我个人喜欢InAppBrowser组件,因为它似乎是一个更好的用户体验,适用于很多用例。如果您想在Safari中打开链接,现在可以使用Javascript执行此操作:

window.open('http://whitelisted-url.com', '_system');

或InAppBrowser:

window.open('http://whitelisted-url.com', '_blank');

请点击此处了解更多信息:

http://wiki.apache.org/cordova/InAppBrowser http://docs.phonegap.com/en/2.7.0/cordova_inappbrowser_inappbrowser.md.html#InAppBrowser

答案 1 :(得分:7)

如果您不想覆盖类或根据建议深入挖掘代码,请尝试此操作。它对我来说就像一个魅力。我正在使用Phonegap Build和jQuery Mobile。

*注意 - 我尝试了几种直接向锚标签添加属性的方法,例如<a href="http://externalsite.com target="_blank" data-rel="external" data-ajax="false">也尝试了target="_system - 但没有一个有效,所以我不得不使用javascript(虽然只有5行)。

这不是太复杂,但我会引导你完成它......

  1. 您需要阻止锚标记的默认行为。所以不知怎的抓住你关心的标签。我在外部打开的所有锚标签中添加了一个名为“external”的类。非常标准的东西:

    $(document).on('click', ".external", function (e) {
        e.preventDefault();
    };
    
  2. 然后从您尝试在Safari中加载的锚点中获取href值。再说一遍,这里没有太多花哨的东西:

    $(document).on('click', ".external", function (e) {
        e.preventDefault();
    
        var targetURL = $(this).attr("href");
    };
    
  3. 这是一个需要挖掘的东西 - 我猜Phonegap用2.3改变了他们的方法?无论如何,在新窗口中打开抓取的href(这里是"_system"进来的地方):

    $(document).on('click', ".external", function (e) {
        e.preventDefault();
        var targetURL = $(this).attr("href");
    
        window.open(targetURL, "_system");
    });
    
  4. 就是这样。最后一点代码就是一切。至少这对我有用。

    祝你好运!

    (在信用到期时给予信任,这是最有帮助的:http://www.midnightryder.com/launching-external-urls-in-phonegap-again-phonegap-2-4-x/

答案 2 :(得分:7)

与@KyleSimmons相同的解决方案,但只是内联,更短。但一个简单的修复。对我来说很有用。

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

答案 3 :(得分:-1)

在jQuery Mobile中打开外部链接:

<a href="http://moorberry.net" data-rel="external">Like this</a>