Приложение iOS UIWebView открывает ссылку в Safari
У меня есть приложение для 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 ответа
В некоторых случаях вы можете указать все ссылки в вашем JavaScript, которые имеют target="_blank"
и передайте их в window.open с параметром _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 ];
}
Существует ограничение с ответом выше, вам нужно реализовать механизм уведомления приложения ios из JQuery, возможный обходной путь обсуждается здесь: /questions/26505222/jquery-mobile-ne-zapuskaet-webviewdidstartload-i-webviewdidfinishload-posle-vyihoda-s-domashnej-stranitsyi-v-webview/26505247#26505247