【问题标题】:iOS UIWebView app opens link in SafariiOS UIWebView 应用在 Safari 中打开链接
【发布时间】:2015-07-17 13:19:07
【问题描述】:

我有一个 iOS 应用程序,它只有一个视图,即 UIWebView(它打开应用程序的主要内容)。 我希望当我在某处(例如在表格行上)单击应用程序以在 Safari 浏览器中打开特定链接,而不是在 UIWebView 内。

这是否可行,无需编写任何 iOS 代码,而是让 JavaScript 在 Safari 本身中打开该链接?

我有那个代码,但它根本没有帮助:

HTML 代码

<tr class='link-to-pdf' data-href='www.example.com'>

JS 代码:

 $(".link-to-pdf").click(function () {

            var a = document.createElement('a');
            a.setAttribute("href", this.getAttribute("data-href"));
            a.setAttribute("target", "_blank");

            var dispatch = document.createEvent("HTMLEvents");
            dispatch.initEvent("click", true, true);
            a.dispatchEvent(dispatch);

        });

【问题讨论】:

    标签: javascript ios uiwebview


    【解决方案1】:

    在某些情况下,您可以告诉 javascript 中具有target="_blank" 的所有链接,并使用“_system”参数将它们传递给 window.open。这适用于 iOS 和 Android。

    $(document).on('click', 'a[target="_blank"]', function(ev) {
      var url;
    
      ev.preventDefault();
      url = $(this).attr('href');
      window.open(url, '_system');
    });
    

    或者在您的情况下,只需将 a.setAttribute("target", "_blank"); 替换为 a.setAttribute("target", "_system");

    这在一个古老的项目中对我有用,但我不确定它是否仍然有效(在 iOS 和 Android 上)

    【讨论】:

      【解决方案2】:

      如果上述答案对您不起作用,您可以通过 iOS 方式修复它。为此,您需要实现 webView:shouldStartLoadWithRequest UIWebViewDelegate 协议方法来检查您的 URL。

       - (BOOL) webView: (UIWebView *) theWebView shouldStartLoadWithRequest:(NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType
      {
          NSURL *url = [request URL];
          // check URL in your if condition
          if (...) {
              //open URL in Safari
              [[UIApplication sharedApplication] openURL:url];
              return NO;
          }
          else
              return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
      }
      

      上面的答案有一个限制,你需要实现从JQuery通知ios应用的机制,可能的解决方法在这里讨论:https://stackoverflow.com/a/11633460/3317354

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 2014-03-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2011-12-01
        • 2016-04-16
        • 2015-12-02
        相关资源
        最近更新 更多