Как лучше открыть ссылку из Webview в safari?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: вы знаете какие-нибудь рабочие варианты открыть url из webview в safari на iOS? Используя только js, или js библиотеки. Все варианты которые указаны в интернете не работают на данный момент.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Web-разработка Ответ

На iOS открыть ссылку из WebView именно в Safari “только JavaScript-ом” можно не всегда. Это зависит от того, какой WebView используется: Safari View Controller, WKWebView внутри приложения, Telegram/Instagram browser, Cordova/Capacitor и т.д. В обычном WKWebView JavaScript не имеет права принудительно открыть внешний Safari без участия нативной части приложения.

Если это ваш iOS-приложение с WKWebView, правильное решение — перехватить ссылку в native-коде и открыть через UIApplication.shared.open. JavaScript может только инициировать переход:

window.location.href = 'https://example.com';

window.location.href = 'https://example.com';

А в Swift нужно решить, открывать внутри WebView или снаружи:

func webView(_ webView: WKWebView,
             decidePolicyFor navigationAction: WKNavigationAction,
             decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if let url = navigationAction.request.url,
       navigationAction.navigationType == .linkActivated {
        UIApplication.shared.open(url)
        decisionHandler(.cancel)
        return
    }
    decisionHandler(.allow)
}

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if let url = navigationAction.request.url, navigationAction.navigationType == .linkActivated { UIApplication.shared.open(url) decisionHandler(.cancel) return } decisionHandler(.allow) }

Если это не ваше приложение, а WebView внутри чужого приложения, надёжного способа нет. Можно пробовать обычную ссылку с target="_blank", но iOS-клиент сам решит, что делать:

<a href="https://example.com" target="_blank" rel="noopener">Открыть</a>

<a href="https://example.com" target="_blank" rel="noopener">Открыть</a>

Схемы вроде googlechrome:// или старые хаки через window.open сейчас работают нестабильно и зависят от приложения. Safari не предоставляет универсальную публичную URL-схему “открой меня в Safari” для любой страницы из любого WebView.

Итог: если WebView ваш — делайте мост JS/native или перехват навигации в WKNavigationDelegate. Если WebView чужой — JavaScript не гарантирует открытие Safari; максимум можно дать обычную внешнюю ссылку и подсказку пользователю открыть в браузере.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно