Open target = "_ blank" -Links außerhalb von UIWebView in Safari
In meinem iOS-Anwendung habe ich ein UIWebView.
Nun möchte ich alle links, die das Attribut target="_blank" nicht öffnen, in meinem WebView sondern extern in Safari.
Wie kann ich dies tun?
InformationsquelleAutor der Frage Norwald2 | 2011-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Antwort, das ist ein von einer Antwort fand ich auf stack overflow für die Android WebView. Aber eigentlich ist beides webview habe das gleiche problem und die gleichen (dreckigen) Update:
Dies löst sowohl die target="_blank" Thema zu öffnen in safari, UND hält öffnen von standard-verbindungen innerhalb der webview.
InformationsquelleAutor der Antwort Benjamin Piette
Das problem mit wedo Lösung ist, dass alle Ihre links öffnet sich in Safari.
Zwei Lösungen:
1 - JavaScript-callback zu Objective-C, wenn target="_blank"
Zu erreichen ist Ihr problem, müssen Sie einige javascript-Code auf alle Ihre links überprüfen, ob Sie das Attribut _blank, dann rufen Sie wieder Ihre objective-C-code aus JavaScript und ausführen:
Ich persönlich weiß nicht, wie diese Lösung weil es eine Menge code, callback, Komplexität und ein bisschen tricky...
2 - Prüfung url-parameter
Wenn Sie Zugriff auf den HTML-code (Hinweis: in beiden Lösung, die Sie brauchen Zugang zu HTML), ich empfehle Ihnen, entfernen Sie die target="_blank" und den parameter hinzufügen ?openInSafari=true
In der UIWebViewDelegate fügen Sie den folgenden code:
Einen schönen (bösen?) Punkt bei dieser Lösung ist, dass, wenn Sie den link x-Ebenen tiefer, kann noch links öffnen in safari-browser
Immer fügen Sie das Protokoll in der URL (http, https,...)
InformationsquelleAutor der Antwort Martin Magakian
Großes Lob an Martin Magakian! Hier ist die Modifikation basiert auf spankmaster79 Vorschlag:
InformationsquelleAutor der Antwort mpemburn
Ich basiert meine Antwort auf die eine von Benjamin Piette aber erforderlich, passen Sie das Skript, denn die links angepasst werden, in meinem Fall waren asynchron erzeugt wird, von einem anderen javascript.
InformationsquelleAutor der Antwort clauswey
Ich hatte die gleiche Frage und leider sind diese Antworten zog mich in eine völlig falsche und sehr komplexe Weise. Wirklich die Frage wird beantwortet, so einfach wie "Sie verwenden müssen WebViewPolicyDelegateProtocol".
In -viewDidLoad des Ansicht-Controllers Umsetzung Sie schreiben:
In Ihrer view-controller-Klasse-Schnittstelle müssen Sie zwei Elemente:
Und setzen diese so einfach wie:
Siehe auch Apple-docs
Habe ich es so in meinem Projekt, wo frameset verwendet wird, in das root-HTML, geladen in der WebView. Alle cross-links, die auf andere vorhandene frame nicht Ursache der zweiten Nachricht aufgerufen wird, so dass nur die neuen (externen) Ziele werden hier bearbeitet. Es funktioniert OK für mich.
InformationsquelleAutor der Antwort DeadlineX