强制 iOS 应用在 Safari 中打开外部链接

Posted

技术标签:

【中文标题】强制 iOS 应用在 Safari 中打开外部链接【英文标题】:Force iOS app opens external links in safari 【发布时间】:2013-02-28 15:00:41 【问题描述】:

我有一个使用 PhoneGap 和 JQuery mobile 制作的 ios 应用程序。该应用程序有一些我想在移动 Safari 中打开的外部链接,但到目前为止,它们只是在应用程序视图中打开。链接是这样写的:

<a rel="external" href="wwww.example.com">Click Here</a>

我阅读了 JQuery mobiles 文档,它指出添加 rel="external" 可以解决这个问题,但显然不是。有任何想法吗?请记住,这是一个基于 html 的应用程序。

【问题讨论】:

这是rel=的错字吗? 是的,这是我的错,它在 html 中的拼写是正确的,我只是在我自己中写的。拼写已在帖子中更正 PhoneGap: Opening external URL's in Safari 的可能重复项 是的,我之前看到过这个问题,但在我的项目中找不到任何 cordova.plist 或 phonegap.plist 所以我无法使用它 您是否尝试按照给定答案中的建议将链接目标设置为_blank 【参考方案1】:

最终能够通过导航到 MainviewController.m 并查找其中提到 webView 的部分(如其他帖子中提到的那样)然后将其更改

/* Comment out the block below to over-ride */

/*

- (void) webViewDidStartLoad:(UIWebView*)theWebView

    return [super webViewDidStartLoad:theWebView];


- (void) webView:(UIWebView*)theWebView didFailLoadWithError:(NSError*)error

    return [super webView:theWebView didFailLoadWithError:error];


- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType

    return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];

*/

到这里

/**

 * Start Loading Request

 * This is where most of the magic happens... We take the request(s) and process the response.

 * From here we can re direct links and other protocalls to different internal methods.

 */

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType



    NSURL *url = [request URL];

    // add any other schemes you want to support, or perform additional

    // tests on the url before deciding what to do -jm

    if( [[url scheme] isEqualToString:@"http"] ||

       [[url scheme] isEqualToString:@"https"])

    

        [[UIApplication sharedApplication] openURL:url];

        return NO;

    

    else

    

        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];

    




我没有使用 Objective-c 的经验,所以我不得不对此进行试验,所以我很高兴我能成功。

【讨论】:

【参考方案2】:

Nice 帮了我一些忙,但它会自动打开链接 通过放置:

if (navigationType == UIWebViewNavigationTypeLinkClicked)  

它起作用了,现在当用户点击带有 http:// 或 https:// 的网址时,它会在 safari 中打开

所以我得到了这个代码:

if (navigationType == UIWebViewNavigationTypeLinkClicked) 
if( [[url scheme] isEqualToString:@"http"] ||

   [[url scheme] isEqualToString:@"https"])



    [[UIApplication sharedApplication] openURL:url];

    return NO;



else



    return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];



【讨论】:

以上是关于强制 iOS 应用在 Safari 中打开外部链接的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap / Cordova ios外部链接iframe无法在safari中打开

ios 8 webview在Safari中打开外部链接,除了一个

如何强制 Instagram 在 Safari 而不是应用内浏览器中打开链接

Safari Webapp强制在单击其他链接时打开Safari

在 Safari (cordova) 中打开外部链接

iOS 9 Web 应用程序阻止在移动 Safari 中打开链接