zadzwoń, otwórz łącze w przeglądarce


114
<a target="_blank" data-rel="external" href="http://www.kidzout.com">www.kidzout.com</a>

cześć eksperci, używam phonegap 2.9.0 i używam powyższego kodu, aby otworzyć link w przeglądarce, ale otwiera go w tej samej aplikacji ...... jak otworzyć przeglądarkę safari?

otwiera witrynę w tej samej aplikacji, a następnie nie mogę do niej wrócić, więc muszę usunąć aplikację i zainstalować ją ponownie .....


Jeśli chcesz otworzyć _blankprzeglądarkę zewnętrzną i _selfWebView, sprawdź moje rozwiązanie 2015 dla Cordova 5.1.1: stackoverflow.com/a/32227524/82609
Sebastien Lorber

Odpowiedzi:


225

Jak sugerowano w podobnym pytaniu , użyj JavaScript do wywołania window.openz targetargumentem ustawionym na _system, zgodnie z dokumentacją InAppBrowser :

<a href="#" onclick="window.open('http://www.kidzout.com', '_system'); return false;">www.kidzout.com</a>

Powinno to zadziałać, chociaż lepszym i bardziej elastycznym rozwiązaniem byłoby przechwycenie wszystkich clickzdarzeń linków i wywołanie window.openz argumentami odczytanymi z atrybutów linku.

Pamiętaj, że musisz zainstalować wtyczkę InAppBrowser, aby to działało:

cordova plugin add cordova-plugin-inappbrowser

3
tak, ja też użyłem tego samego celu = "_ blank" w cordova 1.7.0, ale teraz pracuję z 2.9.0 i to mnie denerwuje, twój sujjestion też nie działał ...... :(
ahsan ali

6
tak, też próbowałem i skorzystałem z linków, które udostępniłeś, dziękuję za pomoc, ale problem nadal istnieje, strona nadal otwiera się w aplikacji ...... :(
ahsan ali

hej ahsan, czy mógłbyś opisać swój problem? Myślę, że mogę mieć ten sam problem.
whossname,

3
Pamiętaj, że musisz zainstalować wtyczkę InAppBrowser, aby to działało, instrukcje tutaj: cordova.apache.org/docs/en/3.0.0/ ...
jackocnr

7
Mam ten sam problem .. rozwiązanie nie działa :( otwiera się tak jak zwykły link (na Androidzie)
Daniel

30

Jak odpowiedział w innych postach, masz dwie różne opcje dla różnych platform. Co robię to:

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {

    // Mock device.platform property if not available
    if (!window.device) {
        window.device = { platform: 'Browser' };
    }

    handleExternalURLs();
}

function handleExternalURLs() {
    // Handle click events for all external URLs
    if (device.platform.toUpperCase() === 'ANDROID') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            navigator.app.loadUrl(url, { openExternal: true });
            e.preventDefault();
        });
    }
    else if (device.platform.toUpperCase() === 'IOS') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            window.open(url, '_system');
            e.preventDefault();
        });
    }
    else {
        // Leave standard behaviour
    }
}

Jak więc widzisz, sprawdzam platformę urządzenia iw zależności od tego używam innej metody. W przypadku standardowej przeglądarki zostawiam standardowe zachowanie. Od teraz rozwiązanie będzie działało dobrze na Androidzie, iOS iw przeglądarce, a strona HTML nie zostanie zmieniona, więc może mieć adresy URL reprezentowane jako standardowa kotwica

<a href="http://stackoverflow.com">

Rozwiązanie wymaga wtyczek InAppBrowser i Device


Doskonała odpowiedź. Na wypadek gdyby tak nie było w przypadku innych, upewnij się, że Twój www / cordova_plugins.js zawiera zarówno urządzenie, jak i konfigurację inappbrowser. Kiedy instaluję wtyczki, dodaje konfiguracje js & plugins do folderu przemieszczania, a nie do mojego głównego roboczego folderu www. Po ustaleniu konfiguracji i lokalizacji wszystko działało idealnie.
Michael Bordash

1
To najlepsza odpowiedź! Pamiętaj, że nie musisz instalować wtyczki InAppBrowser przez:$ meteor add cordova:org.apache.cordova.inappbrowser@0.5.4
tixastronauta

Jeśli ktoś chciałby wnieść swój wkład do fragmentu, przesłałem go do sedna. gist.github.com/redolent/e79722b32a48a536b5ba
redolent

28
<a onclick="navigator.app.loadUrl('https://google.com/', { openExternal:true });">Link</a>

Działa dla mnie z Androidem i PG 3.0


Wydaje się, że nadal mi się nie udaje na obu Androidzie 2.3.7 i 4.2.2.
user569825

2
Działa dla mnie na Androidzie 4.4.2 z Cordova 3.3.0. Ale nie działa na iOS 6.1.
mytharcher

U mnie działa cordova 3.3.0, dzięki, a skąd masz te informacje? Nie można znaleźć w dokumentacji.
Teoman shipahi,

To działało dla mnie z Cordova 3.4.1 i Androidem 4.2. Nie potrzebowałem wtyczki. Po testach na iOS7 zdam relację.
pgsandstrom

To jedyne rozwiązanie, które działało dla mnie na
Androidzie

21

Istnieją 2 różne sposoby otwierania adresu URL na Androidzie i iPhonie.

DLA IOS użyj następującego kodu.

window.open("http://google.com", '_system');

a dla systemu Android użyj następującego kodu.

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

Cordova może również używać window.open("http://google.com", '_system'). Nie należy tego używać navigator.app.loadUrl, ponieważ nie będzie działać z market://adresami URL: w takim przypadku po prostu zamknie aplikację i otworzy się w tym samym oknie ... nie zawsze jest preferowane.
Agamemnus

1
Agamemnus, window.open nie działa na Androidzie w mojej aplikacji Phonegap 3.6. Muszę użyć rozwiązania w tej odpowiedzi, aby zadziałało.
Moulde

10

W końcu ten post pomaga mi na iOS: http://www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/ .

Otwórz plik „CDVwebviewDelegate.m” i wyszukaj „shouldStartLoadWithRequest”, a następnie dodaj ten kod na początku funkcji:

if([[NSString stringWithFormat:@"%@",request.URL] rangeOfString:@"file"].location== NSNotFound) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

Podczas korzystania navigator.app.loadUrl("http://google.com", {openExternal : true});z Androida jest OK.

Via Cordova 3.3.0.


To jedyna rzecz, która zadziałała dla mnie w 3.0.0. Dziękuję Ci!!
Rocklan,

W wersji 3.0 musisz dołączyć wtyczkę InAppBrowser. Jakkolwiek dziwne może się to wydawać.
Sean Bannister

Zmieniłbym to jedną warstwę powyżej w MainViewController.m: - (BOOL) webView: (UIWebView *) theWebView shouldStartLoadWithRequest: (NSURLRequest *) żądanie navigationType: (UIWebViewNavigationType) navigationType {NSURL * url = [adres URL żądania]; if ([[schemat url] isEqualToString: @ "file"] || [[schemat url] isEqualToString: @ "gap"]) {return [super webView: theWebView shouldStartLoadWithRequest: request navigationType: navigationType]; } else {[[UIApplication sharedApplication] openURL: url]; powrót NIE; }}
Gamadril

10

Żadna z tych odpowiedzi nie jest na tyle wyraźna, aby otworzyć linki zewnętrzne na każdej platformie. Zgodnie z dokumentacją inAppBrowser :

zainstalować

cordova plugin add cordova-plugin-inappbrowser

Nadpisz window.open (opcjonalne, ale zalecane dla uproszczenia)

window.open = cordova.InAppBrowser.open;

Jeśli nie nadpiszesz window.open, będziesz używać window.openfunkcji natywnej i nie możesz oczekiwać, że uzyskasz takie same wyniki na różnych platformach.

Użyj go, aby otworzyć linki w domyślnej przeglądarce

window.open(your_href_value, '_system');

Zauważ, że celem dla inAppBrowser (do czego sugeruje nazwa wtyczki) jest '_blank'zamiast '_system'.


Bez powyższych kroków nie udało mi się uzyskać linków do otwarcia w domyślnej aplikacji przeglądarki na różnych platformach.

Dodatkowy kredyt

Oto przykładowa obsługa kliknięć (na żywo) dla linków:

document.addEventListener('click', function (e) {
    if (e.target.tagName === 'A' &&
        e.target.href.match(/^https?:\/\//)) {
        e.preventDefault();
        window.open(e.target.href, '_system');
    }
});

Gdzie dokładnie nadpisujesz window.open? Na stronie internetowej lub w aplikacji cordova
Ellisan

Najlepiej u góry pliku JavaScript, który
ładujesz

7

Jeśli zdarzy ci się mieć jQuery w pobliżu, możesz przechwycić kliknięcie linku w następujący sposób:

$(document).on('click', 'a', function (event) {
    event.preventDefault();
    window.open($(this).attr('href'), '_system');
    return false;
});

W ten sposób nie musisz modyfikować linków w html, co pozwala zaoszczędzić dużo czasu. Skonfigurowałem to za pomocą delegata, dlatego widzisz, że jest on powiązany z obiektem dokumentu, ze znacznikiem „a” jako drugim argumentem. W ten sposób wszystkie tagi „a” będą obsługiwane, niezależnie od tego, kiedy zostaną dodane.

Oczywiście nadal musisz zainstalować wtyczkę InAppBrowser:

cordova plugin add org.apache.cordova.inappbrowser

to fajny pomysł, z którego skorzystam, ale powinieneś także zadbać o bezpośrednie okno. otwarte połączenia (nie wszystko przechodzi przez link)
Sebastien Lorber

3
window.open('http://www.kidzout.com', '_system');

Będzie działać, ale tylko wtedy, gdy masz zainstalowaną wtyczkę inappbrowser. Aby zainstalować, używając terminala, przejdź do folderu www w swoim projekcie i wpisz:

phonegap plugin add org.apache.cordova.inappbrowser

lub

cordova plugin add org.apache.cordova.inappbrowser

Wtedy twój link otworzy się w przeglądarce.


Komenda phonegap local <command>została WYCOFANA. Polecenie zostało przekazane użytkownikowi phonegap <command>. Polecenie phonegap local <command>zostanie wkrótce usunięte.
Ajay Suwałka

W przeszłości nie wiem, ale obecnie poprawną instalacją tej wtyczki jest cordova plugin add cordova-plugin-inappbrowser.
Plinio FM

2

W przypadku wersji 5.0 i nowszych wtyczki InAppBrowser została zmieniona nazwa wtyczki w rejestrze wtyczek Cordova, dlatego należy ją zainstalować za pomocą

cordova plugin add cordova-plugin-inappbrowser --save

Następnie użyj

<a href="#" onclick="window.open('http://www.kidzout.com', '_system');">www.kidzout.com</a>


1

Używam PhoneGap Build (v3.4.0), koncentrując się na iOS, i potrzebowałem tego wpisu w moim config.xml, aby PhoneGap rozpoznał wtyczkę InAppBrowser.

<gap:plugin name="org.apache.cordova.inappbrowser" />

Następnie użycie window.open (url, target) powinno działać zgodnie z oczekiwaniami, jak opisano tutaj .


1
Używam m also using PhoneGap Build (v3.5.x) and added the plugin via the config.xml. But what i get is an InAppBrowser without controls an cannot call the safari browser. Itylko window.open (). Jakakolwiek rada?
Reinos

Jeśli jest poprawnie skonfigurowany, window.open powinno po prostu działać. W mojej sytuacji window.open otwiera inny adres URL przeglądarki i działa dobrze. Upewnij się, że adres URL jest prawidłowy.
contactmatt

Właśnie wypróbowałem to z Phonegap Build i pojawia się błąd: „plugin nieobsługiwany: org.apache.cordova.inappbrowser”
David Ball

1

Napotkałem również problem, który nie otwierał się w przeglądarce, tutaj jest moja poprawka z krokami:

1: Zainstaluj tę wtyczkę cordova.

cordova plugin add cordova-plugin-inappbrowser

2: dodaj otwarty link w html, jak poniżej.

<a href="#" onclick="window.open('https://www.google.com/', '_system', 'location=yes');" >Google</a>

3: jest to najważniejszy krok, dlatego napotkałem wiele problemów: pobierz cordova.jsplik i wklej go do wwwfolderu. Następnie umieść odniesienie do tego w index.htmlpliku.

<script src="cordova.js"></script>

To rozwiązanie sprawdzi się zarówno w środowisku Android jak i iPhone.


-2

Lubię to :

<a href="#" onclick="window.open('https://www.nbatou.com', '_system'); return false;">https://www.nbatou.com</a>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.