Ich habe eine sehr einfache UIWebView mit Inhalten aus meinem Anwendungspaket. Ich möchte, dass alle Links in der Webansicht in Safari anstatt in der Webansicht geöffnet werden. Ist das möglich?
ios
uiwebview
mobile-safari
David Beck
quelle
quelle
Antworten:
Fügen Sie dies dem UIWebView-Delegaten hinzu:
(bearbeitet, um nach dem Navigationstyp zu suchen. Sie können auch
file://
Anfragen weiterleiten, die relative Links sind.)Schnelle Version:
Swift 3 Version:
Swift 4 Version:
Aktualisieren
Wie
openURL
in iOS 10 veraltet:quelle
switch
für Aufzählungstypen vorzuziehenWenn sich jemand wundert, würde Drawnonwards Lösung in Swift so aussehen :
quelle
UIWebViewDelegate
Ein kurzer Kommentar zur Antwort von user306253: Vorsicht, wenn Sie versuchen, etwas in die UIWebView selbst zu laden (dh sogar aus dem Code), verhindert diese Methode, dass dies geschieht.
Was Sie tun können, um dies zu verhindern (danke Wade), ist:
Möglicherweise möchten Sie auch die Typen
UIWebViewNavigationTypeFormSubmitted
und behandelnUIWebViewNavigationTypeFormResubmitted
.quelle
Die anderen Antworten haben ein Problem: Sie hängen von der Aktion ab, die Sie ausführen, und nicht vom Link selbst, um zu entscheiden, ob er in Safari oder in der Webansicht geladen werden soll.
Manchmal ist es genau das, was Sie wollen, was in Ordnung ist. In einigen anderen Fällen, insbesondere wenn Ihre Seite Ankerlinks enthält, möchten Sie in Safari wirklich nur externe und keine internen Links öffnen. In diesem Fall sollten Sie die
URL.host
Eigenschaft Ihrer Anfrage überprüfen .Ich verwende diesen Code, um zu überprüfen, ob ich einen Hostnamen in der URL habe, die analysiert wird, oder ob er in HTML eingebettet ist:
Sie können den regulären Ausdruck natürlich an Ihre Bedürfnisse anpassen.
quelle
if (request.URL?.scheme != "file")
In Swift können Sie den folgenden Code verwenden:
Stellen Sie sicher, dass Sie nach dem URL-Wert und dem Navigationstyp suchen.
quelle
Hier ist das Xamarin iOS-Äquivalent zu Drawonwards Antwort.
quelle
Die akzeptierte Antwort funktioniert nicht.
Wenn Ihre Seite URLs über Javascript lädt, ist dies der
navigationType
FallUIWebViewNavigationTypeOther
. Dies beinhaltet leider auch das Laden von Hintergrundseiten wie Analytics.Zur Erkennung Seitennavigation, müssen Sie das vergleichen ,
[request URL]
um die[request mainDocumentURL]
.Diese Lösung funktioniert in allen Fällen:
quelle
App-Ablehnung Hinweis:
Schließlich
UIWbView
ist es tot und Apple wird es nicht mehr akzeptieren.Apple hat damit begonnen, E-Mails an alle App-Besitzer zu senden, die noch Folgendes verwenden
UIWebView
:Veraltete API-Nutzung - Apple akzeptiert keine Einsendungen von Apps mehr, die
UIWebView
APIs verwenden.Apple nimmt den Datenschutz der Benutzer sehr ernst und es ist offensichtlich, dass sie keine unsichere Webansicht zulassen .
Entfernen Sie UIWebView also so schnell wie möglich aus Ihrer App. Verwenden Sie nicht versuchen,
UIWebView
in einer neu erstellten App zu verwenden, und ich bevorzuge die Verwendung,WKWebView
wenn möglichBeispiel:
quelle
In meinem Fall möchte ich sicherstellen, dass absolut alles in der Webansicht Safari außer dem anfänglichen Laden öffnet und ich verwende ...
quelle