iOS UIWebView应用程序在Safari中打开链接

时间:2015-07-17 13:19:08

标签: javascript ios uiwebview

我有一个只有一个视图的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);

        });

2 个答案:

答案 0 :(得分: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上)

答案 1 :(得分:0)

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

 - (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