2013-03-20 15 views
18

Zewnętrzne adresy URL nie otwierają się w przeglądarce systemu w mojej aplikacji PhoneGap dla systemu Android. Używam PhoneGap Build 2.3.0.PhoneGap Build: jak otworzyć zewnętrzny adres URL w przeglądarce urządzenia na Androida?

Według Cordova documentation użyłem docelowy '_system':

window.open('http://www.myurl.nl', '_system'); 

W moim config.xml mam:

<plugin name="InAppBrowser" value="org.apache.cordova.InAppBrowser" /> 
<access origin="*" browserOnly="true" /> 

ale nadal otwarte linki w moim apps WebView.

Jak rozwiązać ten problem?

+0

Wydaje mi się, że domyślnie działa dobrze w Androidzie (ale używam także wtyczki Crosswalk ...). Sprawdź moją odpowiedź na 2015 rok tutaj, aby otworzyć '_self' w WebView, a' _blank' w zewnętrznej przeglądarce: http://stackoverflow.com/questions/32208609/cordova-why-would-inappbrowser-plugin-be-required-to-open -links-in-system-brows/32227524 –

Odpowiedz

15

To nie jest odpowiedź, jeśli chcesz nadal korzystać PhoneGap Build, ale rozwiązał ten problem poprzez stworzenie warunków rozwoju dla Cordova (PhoneGap) na moim komputerze i kompilacji aplikacja lokalnie. W Cordova 2.5.0 window.open('http://www.myurl.nl', '_system'); działa idealnie, otworzy link w przeglądarce systemu.

Moja rada jest taka, aby przestać używać aplikacji PhoneGap Build i zacząć kompilowanie aplikacji lokalnie. Here's how to set up your development environment for Cordova >>

+0

Czy można wyjaśnić, co może być różnica od kompilacji lokalnych kompilacji i phonegap? – realtebo

+1

Głównie różnica polega na ustawieniach. Podczas kompilacji lokalnie łatwiej jest zmienić niektóre ustawienia. Ale ponieważ Cordova 2.5 na PhoneGap Build nie daje takich samych rezultatów jak przy instalacji lokalnej, musi istnieć pewna różnica w kodzie źródłowym, ale nie ma pojęcia dlaczego. – Joan

+0

@ Joan naprawdę nie jestem pewien, czy to problem z budową phonegapa. Czy na pewno używasz odpowiedniej deklaracji wtyczki, a wtyczka jest skutecznie ładowana do Twojej aplikacji przez Phonegap? Widziałem ludzi używających 'gap: plugin' zamiast tagu' plugin', który warto przetestować –

-1

Użyj tego

window.open('http://www.myurl.nl', '_blank', 'location=yes');

+13

Nie, nie działa. – Joan

+0

Dlaczego zagłosowałeś na ten komentarz? Jeśli zaznaczysz na stronie internetowej phonegap, ta linia poleceń to ac/p instrukcji instalacji InAppBrowser ... https://github.com/apache/cordova-plugin-inappbrowser/blob/dev/doc/index.md Twój profil też powinien zostać odrzucony. – Dimitri

+0

Powinieneś wspomnieć o rozwiązaniu, które wymaga wtyczki InAppBrowser. W przeciwnym razie nie będzie. –

7

To pytanie jest teraz trochę stare, ale czułem, że warto było je zaktualizować. To teraz działa dobrze z PhoneGap Build, gdy jest używane z 2.9.0.

Mam skompilowane i przetestowane na Androida 4.3 i iOS 6.1.3. Nie mam wtyczki InAppBrowser w mojej aplikacji, jak to otwarcie strony w aplikacji, zamiast powodować natywną przeglądarkę, aby je otworzyć, a ja mam tylko następujące po tagach dostępu:

<access origin="http://127.0.0.1*"/> 
<access origin="http://phonegap.com" subdomains="true" /> 
+0

w moim przypadku. dziękuję :) –

+0

z phonegap 3.0, android cli build –

14

Późne odpowiedź, ale może być w stanie pomóc komuś.

navigator.app.loadUrl('https://google.com/', { openExternal:true }); 

Cordova 3.3.1

+0

To było dość błędne dla mnie, moja aplikacja ładowałaby wiele zakładek, mimo że link był tylko raz kliknięty! –

+0

@IanJamieson oh! jakoś to działa teraz dla mnie teraz – AtanuCSE

+0

Ja też, skończyło się na tym, że korzystałem z Hammera JS, aby słuchać zdarzeń dotknięcia, uniemożliwiło to wielokrotne otwieranie linku. –

6

Ten pracował dla mnie. Phonegap 3.1.0.

kod html:

<a id="ext-link" href="#">Google it</a> 

lub

<button id="ext-link" href="#">Google it</button> 

Javascript (jQuery + Cordova):

$("#ext-link").on("click"), function() { 
    if (typeof navigator !== "undefined" && navigator.app) { 
     // Mobile device. 
     navigator.app.loadUrl('http://www.google.com/', {openExternal: true}); 
    } else { 
     // Possible web browser 
     window.open("http://www.google.com/", "_blank"); 
    } 
}); 

nadzieję, że pomoże.

+1

mi nie pomógł 04-11 11: 47: 48.186: E/Web Console (22063): Uncaught TypeError: Can not call method 'loadUrl' of undefined: 88 – Dimitri

1

@George Siggouroglou: Nie jest dobrym pomysłem użycie identyfikatora dla elementów, które ostatecznie pojawią się więcej niż jeden raz w dokumencie. Zamiast tego dobrą praktyką jest uczynienie kodu bardziej modułowym.

Jeśli spodziewasz się urządzeń dotykowych, jest to również dobry wybór, aby użyć "dotknij" przed "kliknięciem", ponieważ uruchamia się znacznie szybciej i wcześniej niż kliknięcie. aby sprawdzić, czy jest w stanie obsłużyć dotyk, wolę używać modernizatora, ponieważ ułatwia wykrywanie funkcji.

The jQuery Mobile tap event triggers after a quick, complete touch event that occurs on a single target object. It is the gesture equivalent of a standard click event that is triggered on the release state of the touch gesture. https://api.jquerymobile.com/tap/

nadzieję, że ktoś pomoże

**html code:** 

<a class="ext-link" href="#">Google it</a> 

lub

<button class="ext-link" href="#">Google it</button> 

Javascript (jQuery):

//define tab or click event type on rool level (can be combined with modernizr) 
iaEvent = "click"; 
if (typeof navigator !== "undefined" && navigator.app) { 
    iaEvent = "tap"; 
} 
$('.ext-link').each.bind(iaEvent, function() { 
    if (typeof navigator !== "undefined" && navigator.app) { 
     // Mobile device. 
     var linktarget = this.attr("href"); 
     navigator.app.loadUrl(linktarget, {openExternal: true}); 
    } else { 
     // Possible web browser 
     window.open(linktarget, "_blank"); 
    } 
}); 
Powiązane problemy