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

6

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

这是否可行,没有编写任何iOS代码,而是使用JavaScript本身打开该链接?

我有那段代码,但它一点也没有帮助:

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个回答

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。

0
如果上述答案对您不起作用,您可以按照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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接