2012-12-28 20 views
14

używam PhoneGap (Cordova 2.2)PhoneGap - Otwórz link w przeglądarce

mam linku tak:

<a href="http://twitter.com/foobar" target="_blank">twitter</a> 

iOS - otwiera odnośnik w przeglądarce (Safari)

Ale Android - otwiera się w przeglądarce internetowej (w mojej aplikacji na telefon)

Czy istnieje sposób na to, aby Android działał tak samo jak iOS?

Odpowiedz

27

To jak mam go uruchomić za pomocą Cordova 2.2 i jQuery mobile na Androidzie

Javascript:

$('.link').live('tap', function() { 
    url = $(this).attr("rel"); 
    loadURL(url); 
}); 

function loadURL(url){ 
    navigator.app.loadUrl(url, { openExternal:true }); 
    return false; 
} 

html:

<a href='#' class='link' rel='http://www.someurl.com'>Go Somewhere</a> 
+1

Dobrze wiedzieć, że to zadziałało dla mnie, używając Cordova 2.3, jQuery Mobile na Androida. –

+0

Na żywo jest przestarzałe. Do diabła, myślałem, że został usunięty w nowszych wersjach JQ. Poszedłbym za pomocą delegata lub metody on, ale styl delegowania. Właściwie tak jest delegat, ale znacznie bardziej niedawno. –

+0

@Erik Reppen - jest to bardzo stara odpowiedź. – someuser

6

Spróbuj tego dla Androida:

function loadURL(url){ 
    navigator.app.loadUrl(url, { openExternal:true }); 
    return false; 
} 

HTML:

<a click="loadURL('http://twitter.com/foobar')">twitter</a> 

Można również spróbować tego w swojej config.xml:

<access origin="*twitter.com" browserOnly="true"/> 
+0

dzięki! działa dla mnie –

+0

Pracował dla mnie z onclick zamiast kliknięcia. Kliknięcie właściwości nie istnieje lub nie? –

1

Używam tego jako zasada ogólna:

$('a').live('tap',function(e){ 
    // if external link then open a browser 
    if(String($(this).attr('href')).substring(0,4)=='http' || String($(this).attr('href')).substring(0,5)=='https'){ 
     navigator.app.loadUrl($(this).attr('href'), { openExternal:true }); 
     e.stopPropagation(); 
     return false; 
    } 
}); 
+0

FYI, twoje porównanie https jest zbędne, zawsze będzie prawdziwe w pierwszym wyrażeniu. :) –

+0

w rzeczywistości, ma na celu wykrycie, czy jest to link zewnętrzny, czy nie. ale tak, masz rację. :) – thedjaney

3

Jeśli chcesz użyć jak w wersji iOS z target="_blank" atrybutów:

$(document).on('tap', 'a[target="_blank"]', function(e){ 
    navigator.app.loadUrl(e.target.href, { openExternal: true }); 
    return false; 
}); 
1

Miałem ten sam dokładny problem i zauważyłem, że większość odpowiedzi jest mieszana dla różnych platfom. Rozwiązanie działa dla mnie jest Detail Explanation for different platforms

+0

Edytuj odpowiedź, aby zawierała wszystkie istotne informacje tutaj i podaj link jako bardziej szczegółowe informacje o kopii zapasowej. Utrzymuje to również przydatność odpowiedzi, nawet jeśli te linki stają się nieważne – Anthon

0

ten pracował dla mnie na iOS

    $("a[target='_blank']").on('tap touch click',function(e){ 
         e.stopPropagation(); 
         e.preventDefault(); 
         window.open($(this).attr('href'), "_system"); 
         return false; 
        }); 
4

link podany przez user1879822 był rzeczywiście najbardziej użyteczny dla mnie: https://build.phonegap.com/blog/access-tags

Podsumowując, PhoneGap ma whitelist dozwolonych adresów URL w pliku config.xml. Oznacza to, jeśli ma takiego wpisu ...

<access origin="*" /> 

... to będzie próbować otwierać wszystkie linki wewnątrz własnej WebView. Jeśli jednak ograniczysz swoją białą listę tylko do określonych adresów URL, wówczas dowolny link do adresu URL , a nie na tej liście zostanie automatycznie otwarty w zewnętrznej przeglądarce, a nie w lokalnym widoku internetowym. Na przykład, jeśli ograniczysz go tylko do tego ...

<access origin="http://127.0.0.1*" /> 

... następnie link twitter wspomniany w pytaniu oryginalnym powinien zostać otwarty w nowej przeglądarce zewnętrznej.

1

Nawet jeśli kwestia ta został poproszony jakiś czas temu chciałem poinformować o następującym wpisu blod który pomógł mi:

https://build.phonegap.com/blog/access-tags

W android wszystkim musiałem się było unwhitelist mój określonej domeny . Więc w moim pliku config.xml nie mam żadnych `w ogóle.

0

Nawigator do gry na phonegap!

handler: function (btn, evt) { 
loadURL('http://www.google.com'); 
} 

...

function loadURL(url){ 
navigator.app.loadUrl(url, { openExternal:true }); 
return false; 
} 
-1

pracuje używając PhoneGap 3,5

<a href="javascript:loadURL('http://www.lavidaenbinario.com');" class="link ">Example</a> 

function loadURL(url){ 
    navigator.app.loadUrl(url, { openExternal:true }); 
    return false; 
} 
Powiązane problemy