2013-03-25 14 views
19

Mam aplikację mobilną wykonaną z Phonegap, która wyświetla artykuły, które mogą zawierać linki. Chcę, aby te linki otwierały się we właściwej przeglądarce, niezależnie od aplikacji. Nie mogę znaleźć jednego sposobu na zrobienie tego, co daje takie same wyniki w systemach Android i iOS po uaktualnieniu z wersji Phonegap do wersji 2.0.0 do wersji 2.1.0 (ponieważ nie można obracać ekranu w systemie iOS przed wersją 2.1).Konsekwentny sposób otwierania linków z aplikacji Phonegap zarówno na urządzeniach z systemem Android, jak i iOS?


<a href="http://blah">
zawsze otwiera się w aplikacji, bez pasków narzędzi przeglądarki i nie sposób się z powrotem do aplikacji bez zakończenia go. iOS przesłuchuje <access origin="http://blah" /> w pliku config.xml, ale Android nie. Nie wydaje się, aby dbał o atrybut browserOnly="true".

<a href="http://blah" target="_blank">
iPhone otwiera to w ciągu przeglądarce Safari jeśli <access> na to pozwala (lub pomija całkowicie), ale Android otwiera go w aplikacji.

<preference name="stay-in-webview" value="false" />
Dodanie tego do pliku config.xml nie ma żadnej różnicy.

<a href="#" onClick="navigator.app.loadUrl('http://blah',{openExternal:true});return false;"> Tylko obsługiwane w systemie Android, gdzie otwiera link w przeglądarce Chrome. Błędy w iOS.

<a href="#" onClick="window.open('http://blah','_blank','location=yes');return false;">
W PhoneGap wersji 2.3.0 będzie to pobyt w ramach aplikacji, ale pokazuje pasek tanie wyglądający przeglądarki w górnej/dolnej części z przyciskiem, który pozwala, aby powrócić do aplikacji. To jest zgodne ... ale nie tego, czego chcę. (W wersji 2.1.0 powoduje Android, aby otworzyć w aplikacji iOS i otworzyć w odpowiedniej przeglądarce.)


Używam PhoneGap Budowanie tak this solution nie będzie działać.
Oficjalna dokumentacja odnosi się do this blog post, która została napisana w odniesieniu do wersji 1.5.0, a moje wnioski od 2.1.0 do 2.3.0 nie pasują do ich tabeli.
Naprawdę nie chcę dodawać wtyczki do czegoś tak prostego.

Czy istnieje pojedynczy fragment kodu, który spowoduje otwarcie linku w przeglądarce urządzenia poza witryną internetową aplikacji, niezależnie od systemu operacyjnego?

Odpowiedz

8

Może nie jest za późno. W każdym razie jest to z naszego kodu i działa na obu platformach.

openURL: function(url) { 
    if(device.platform === 'Android') { 
     navigator.app.loadUrl(url, {openExternal:true}); 
    } else { 
     window.open(url, '_system'); 
    } 
}, 
+0

Kilka miesięcy później znowu pracuję nad tym problemem. Dziękuję za ten świetny fragment kodu. Używam nieco innej piątej linii: window.open (url, '_system', 'location = no') i musiałem dodać do mojej konfiguracji .xml –

+0

gdzie powinien być dołączony ten wycinek? –

+0

Jest to funkcja, którą wywołujesz za pomocą 'url'. Umieść go wszędzie tam, gdzie mieści się w Twojej bazie kodów. W moim przypadku jest to metoda na 'Backbone.View'. – Prinzhorn

0

PhoneGap 2.5.0 dokumenty mówią, że obsługuje cele "_blank", "_self", "_system" - czy któryś z nich robi to, czego potrzebujesz? Zgaduję, ponieważ nie mam jeszcze skonfigurowanego odpowiedniego środowiska testowego, nie mogę jeszcze tego wypróbować.

+0

Po prostu próbowałem, i .... wszystko to otwiera się w widoku webowym aplikacji w systemie Android i iOS. Dzięki za sugestię. –

+0

@MagnusSmith - to trochę smutne. Zaczyna brzmieć tak, jakby w tym celu musieli umieścić natywny interfejs API w Cordova. Może ktoś napisał już wtyczkę? – t0yv0

1

Chciałem tylko podkreślić, że nie rzeczywiście udało się to zrobić samodzielnie, ale używasz wtyczki inAppBrowser i masz określony w config.xml z niezbędnymi uprawnieniami?

Według tego http://docs.phonegap.com/en/3.3.0/cordova_inappbrowser_inappbrowser.md.html#InAppBrowser należy użyć:

var ref = window.open(url, target, options); 

target: The target in which to load the URL, an optional parameter that defaults to _self. (String) 

_self: Opens in the Cordova WebView if the URL is in the white list, otherwise it opens in the InAppBrowser. 
_blank: Opens in the InAppBrowser. 
_system: Opens in the system's web browser. 
+0

Zawsze miałem nadzieję, że uda mi się uniknąć wtyczki do czegoś tak prostego, jak wyświetlanie linków na stronie internetowej! (N.B. Natywne okno.open nie było przydatne.) –

1

trzeba zainstalować wtyczkę inAppBrowser i uruchomić tę funkcję funkcję onDeviceReady z pomocą jQuerys .Na („kliknięcie”) metody podobnie jak

function hijack_externalLinks(){ 

    $(document).on('click', "a[href^='http://']", function (e) { 

     window.open(this.href , '_system', 'location=yes'); 
     this.href = '/#'; 

      }); 
} 
Powiązane problemy