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