【问题标题】:Launch mobile safari from full screen web app on iPhone从 iPhone 上的全屏 Web 应用程序启动移动 Safari
【发布时间】:2011-07-22 08:30:01
【问题描述】:

我在 Google 上搜索了这个问题的几个变体,只能在使用 PhoneGap 或 jQuery mobile 的情况下找到答案。但是,我没有使用...只是普通的旧 html 和 javascript。

我正在尝试使用 window.open()...而不是内联锚点从全屏 Web 应用程序启动移动 Safari。无论我做什么,网址都会在网络应用程序中打开,而不是在 Safari 中。有人有什么建议吗?

谢谢。

【问题讨论】:

    标签: javascript iphone iphone-standalone-web-app


    【解决方案1】:

    我花了一些时间,但我能够将这个解决方案拼凑起来。在 iOS 独立网络应用程序模式中,它使用 jQuery 创建一个链接元素,将其添加到正文中,模拟点击它,然后删除链接。不用 jQuery 也可以完成同样的事情,只是需要更多的代码使用简单的 DOM 方法。

    if (window.navigator.standalone) {
      var $a = $('<a href="' + url + '" target="_blank"/>');
      $("body").append($a);
    
      var a = $a.get(0);
    
      var mouseEvent = a.ownerDocument.createEvent('MouseEvents');
      mouseEvent.initMouseEvent('click');
      a.dispatchEvent(mouseEvent);
    
      $a.remove();
    }
    else {
      window.open(url, '_blank');
    }
    

    【讨论】:

      【解决方案2】:

      从 iOS 4.3 开始,我知道的唯一方法是将 &lt;div&gt; 转换为 &lt;a target="_blank"&gt; 并让默认浏览器处理它。它将新页面启动到外部 Safari。

      【讨论】:

      • 它不适合我...你能给我一个示例 htmlString,我只能加载我的 web 视图,点击它会打开 safari
      • 我也在检查模拟器,希望不会有问题
      【解决方案3】:

      在 PhoneGap 中,默认情况下所有 URL 都加载到 WebView 中。设置目标或喜欢 JS 不会破坏您的外部链接脱离该 WebView。为了将外部 URL 加载到 Safari 而不是 PhoneGap 应用程序本身,您需要修改应用程序委托中处理 URL 的方式。

      打开您的 PhoneGap 应用程序代码并找到 [projectname]AppDelegate.m ... 通常位于 [projectname]/Classes 文件夹下。

      根据需要修改 shouldStartLoadWithRequest。这是一个示例实现,它将评估请求并处理要在 Safari 中加载的 HTTP 或 HTTPS 方案(借用自 http://solutions.michaelbrooks.ca/2011/02/15/open-external-links-in-safariapp/):

      - (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 ];
          }
      }
      

      【讨论】:

      • +1。工作完美。另外,对于那些在AppDelegate.m 中没有成功的人,请注意在PhoneGap/Apache Cordova 的更高版本中,包括1.8.0,webView:shouldStartLoadWithRequest:navigationType: 方法的生成覆盖已被注释掉并移至MainViewController.m 的底部.
      【解决方案4】:

      您是否尝试过使用window.openNative()

      【讨论】:

      • 当您尝试各种 URL 方案选项时会很有趣。邮件链接启动邮件应用程序,地图链接启动地图应用程序等。但是一个普通的旧 www url 不会启动 Safari。
      【解决方案5】:

      您不能使用普通的 A HREF 标签吗?这通常会从 web 应用程序中打开 Safari。

      【解决方案6】:

      如果您无法创建标准 HTML 链接,但必须以编程方式打开 Safari(仅使用 Javascript 代码),代码如下:

      var a = document.createElement("a");
      a.setAttribute('href', facebook);
      a.setAttribute('target', '_blank');
      a.click();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-23
        • 2013-03-10
        • 2011-04-21
        • 2018-05-31
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多