12

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

iOS 中的任何外部链接都会在应用程序内部打开,而不是在应用程序内部打开它们打开的 Safari,这使得用户无法在不重新启动应用程序的情况下返回应用程序。

我已经尝试过rel="external"target="_blank"来表明它是一个外部链接,但都没有成功。

我已经看到带有 JQMobile 的 PhoneGap 应该采取的默认方式是我想要的方式。我发现很多对这种行为的要求,但不是这样。

4

4 回答 4

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

于 2013-02-07T02:16:38.163 回答
7

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

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

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

  1. 您需要防止锚标记的默认行为。所以以某种方式抓住你关心的标签。我向我想在外部打开的所有锚标记添加了一个名为“外部”的类。很标准的东西:

    $(document).on('click', ".external", function (e) {
        e.preventDefault();
    };
    
  2. 然后href从您尝试在 Safari 中加载的锚点中获取值。同样,这里没有什么太花哨的添加:

    $(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");
    });
    

就是这样。最后一点代码就是一切。至少这对我有用。

祝你好运!

(为了给予应得的荣誉,这对我帮助最大: http: //www.midnightryder.com/launching-external-urls-in-phonegap-again-phonegap-2-4-x/

于 2013-04-25T03:33:59.360 回答
7

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

<a href="http://www.google.com/" onclick="window.open(this.href,'_system'); return false;">Google</a>
于 2013-04-30T14:00:14.747 回答
-1

在 jQuery Mobile 中打开外部链接:

<a href="http://moorberry.net" data-rel="external">Like this</a>
于 2013-02-07T01:19:38.850 回答