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

iOS UIWebView app opens link in Safari

本文关键字:链接 Safari UIWebView 应用程序 iOS      更新时间:2023-09-26

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

是可行的,不写任何iOS代码,而不是让JavaScript打开Safari本身的链接?

我有那个代码,但是它一点用都没有:

<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有target="_blank",并将它们传递给窗口。使用'_system'参数打开。这将在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上)

如果上面的答案不适合你,你可以在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