AFAIK gibt es keine Möglichkeit, dass automatisch zu tun, Sie die in App-Browser js Code Links zu öffnen extern konsequent in jeder Plattform verwenden.
Ihre Frage gibt kein klares Beispiel dafür, was der Server zurückgibt, also gehe ich davon aus, dass Sie einen vollständigen Block von html bekommen und es nur auf dem Bildschirm rendern. Unter der Annahme einer Anfrage Rückkehr etwas Grundsätzliches wie:
<div id="my-links">
<a href='http://externallink.com'> External Link 1 </a>
<a href='http://externallink.com'> External Link 2 </a>
<a href='http://externallink.com'> External Link 3 </a>
</div>
Und Ihre Anfrage wie folgt aussieht:
$http.get('givemelinks').success(function(htmlData){
$scope.myContent = htmlData;
})
Wenn Sie Zugriff auf die Server-Seite und kann Änderungen vornehmen:
hinzufügen " inappbrowser "Parameter zu Ihrer Anfrage, um zu erkennen, ob es inappbrowser kompatible Links zurückgeben soll und ändern Sie die Antwort von Ihrem Server so:
if (inappbrowser) {
<div id="my-links">
<div ng-click='openExternal($event)' data-external='http://externallink.com'> External Link 1 </div>
<div ng-click='openExternal($event)' data-external='http://externallink.com'> External Link 2 </div>
<div ng-click='openExternal($event)' data-external='http://externallink.com'> External Link 3 </div>
</div>
} else {
<div id="my-links">
<a href='http://externallink.com'> External Link 1 </a>
<a href='http://externallink.com'> External Link 2 </a>
<a href='http://externallink.com'> External Link 3 </a>
</div>
}
Und eine allgemeine openExternal Methode haben:
$scope.openExternal = function($event){
if ($event.currentTarget && $event.currentTarget.attributes['data-external'])
window.open($event.currentTarget.attributes['data-external'], '_blank', 'location=yes');
}
Wenn Sie die Server-Seite
Analyse der Antwort und die Links mit ng-Klicks ersetzen ändern können:
$http.get('givemelinks').success(function(htmlData){
htmlData = htmlData.replace(/href='(.*)'/,'ng-click="openExternal($event)" data-external="$1"').replace(/<a/,"<div").replace(/a>/,"div>")
$scope.myContent = htmlData;
})
Und verwenden Sie die gleiche openExternal-Methode wie oben.
Ich ersetze die Anker durch divs, um zu verhindern, dass die App-Routen geändert werden. Das ist möglicherweise nicht in jeder App notwendig.
Um dies noch besser zu machen, sollten Sie es in einer open-external
Richtlinie bündeln, damit Sie es in mehreren Controllern verwenden können und sie sauberer halten.
Sie sagen, diese Verbindungen von einer API kommen. Warum realisieren Sie also nicht eine einfache Suche und ersetzen in den Strings, die Sie von der API erhalten, zum Beispiel mit JavaScript Regex? – arainone
Ist das der einzige Weg, dies zu tun? Ich meine, ich kann durch alle Elemente iterieren, aber ich versuchte, das zu vermeiden, ich dachte, es könnte eine Möglichkeit sein, dies global zu erreichen, vielleicht die Konfiguration des In-App-Browser-Plugins oder so ähnlich –
Aa AngularJS nicht automatisch abfangen Vanilla JavaScript Calls, kann sie nicht durch eckige Direktiven ersetzen – arainone