phonegap aprire il collegamento nel browser


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

hey esperti sto usando phonegap 2.9.0 e sto usando il codice sopra per aprire il collegamento nel browser ma lo apre nella stessa app ...... come si apre il browser safari?

apre il sito Web nella stessa app e quindi non riesco a tornare all'app, quindi devo eliminare l'app e installarla di nuovo ...


Se desideri aprire _blankun browser esterno e _selfWebView, controlla la mia soluzione 2015 per Cordova 5.1.1: stackoverflow.com/a/32227524/82609
Sebastien Lorber

Risposte:


225

Come suggerito in una domanda simile , usa JavaScript per chiamare window.opencon l' targetargomento impostato su _system, come da documentazione di InAppBrowser :

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

Questo dovrebbe funzionare, anche se una soluzione migliore e più flessibile sarebbe quella di intercettare tutti gli clickeventi dei collegamenti e chiamare window.opencon argomenti letti dagli attributi del collegamento.

Ricorda che devi installare il plug-in InAppBrowser affinché funzioni:

cordova plugin add cordova-plugin-inappbrowser

3
sì, anch'io ho usato lo stesso target = "_ blank" nella cordova 1.7.0 ma ora sto lavorando con 2.9.0 e mi dà fastidio, anche il tuo sujjestion non ha funzionato ...... :(
ahsan ali

6
si ho provato anche io e ho seguito anche i link che hai condiviso, grazie per il tuo aiuto ma il problema è ancora lì, il sito si sta ancora aprendo nell'app ...... :(
ahsan ali

hey ahsan, ti dispiacerebbe approfondire qual era il tuo problema? Penso di avere lo stesso problema.
cui il

3
Ricorda che devi installare il plug-in InAppBrowser affinché funzioni, istruzioni qui: cordova.apache.org/docs/en/3.0.0/…
jackocnr

7
Ho lo stesso problema .. la soluzione non funziona :( si apre come un normale collegamento (su Android)
Daniel

30

Come risposto in altri post, hai due diverse opzioni per diverse piattaforme. Quello che faccio è:

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
    }
}

Quindi, come puoi vedere, sto controllando la piattaforma del dispositivo e, a seconda di ciò, sto usando un metodo diverso. In caso di browser standard, lascio il comportamento standard. D'ora in poi la soluzione funzionerà bene su Android, iOS e in un browser, mentre la pagina HTML non verrà modificata, in modo che possa avere URL rappresentati come ancoraggio standard

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

La soluzione richiede plug-in InAppBrowser e Device


Ottima risposta. Nel caso in cui non lo sia per gli altri, assicurati che il tuo www / cordova_plugins.js abbia sia il dispositivo che le configurazioni del browser inapp incluse. Quando installo i plugin, aggiunge le configurazioni js e plugins alla cartella di staging e non alla mia cartella www di lavoro principale. Una volta risolta la configurazione e le posizioni, ha funzionato perfettamente.
Michael Bordash

1
Questa è la migliore risposta! Ricorda che non hai installato il plugin InAppBrowser tramite:$ meteor add cordova:org.apache.cordova.inappbrowser@0.5.4
tixastronauta

Se qualcuno volesse contribuire allo snippet, l'ho caricato su Gist. gist.github.com/redolent/e79722b32a48a536b5ba
redolent

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

Funziona per me con Android e PG 3.0


Sembra ancora fallire per me su entrambi, Android 2.3.7 e 4.2.2.
user569825

2
Funziona per me su Android 4.4.2 con Cordova 3.3.0. Ma non funziona su iOS 6.1.
mytharcher

Funziona per me cordova 3.3.0, grazie, e dove hai preso queste informazioni? Impossibile trovare nella documentazione.
Teoman shipahi

Questo ha funzionato per me con Cordova 3.4.1 e Android 4.2. Non avevo bisogno di un plugin. Riporterò indietro dopo il test su iOS7.
pgsandstrom

Questa è l'unica soluzione che ha funzionato per me su Android, grazie
Niraj Chauhan

21

Esistono 2 modi diversi per aprire l'URL in Android e iPhone.

PER IOS usa il seguente codice.

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

e per il sistema operativo Android utilizzare il codice seguente.

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

Cordova può usare window.open("http://google.com", '_system')altrettanto bene. Non dovresti usare navigator.app.loadUrl, perché non funzionerà con gli market://URL: in quel caso, chiuderà semplicemente la tua app e si aprirà nella stessa finestra .. non sempre è preferibile.
Agamemnus

1
Agamemnus, window.open non funziona su Android nella mia applicazione phonegap 3.6. Devo usare la soluzione in questa risposta, per farlo funzionare.
Moulde

10

Finalmente questo post mi aiuta su iOS: http://www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/ .

Apri il file "CDVwebviewDelegate.m" e cerca "shouldStartLoadWithRequest", quindi aggiungi questo codice all'inizio della funzione:

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

Durante l'utilizzo navigator.app.loadUrl("http://google.com", {openExternal : true}); per Android è OK.

Via Cordova 3.3.0.


Questa è l'unica cosa che ha funzionato per me nella 3.0.0. Grazie!!
Rocklan

Nella 3.0 è necessario includere il plug-in InAppBrowser. Per quanto strano possa sembrare.
Sean Bannister

Lo cambierei di uno strato sopra in MainViewController.m: - (BOOL) webView: (UIWebView *) theWebView shouldStartLoadWithRequest: (NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType {NSURL * url = [request URL]; if ([[schema url] isEqualToString: @ "file"] || [[schema url] isEqualToString: @ "gap"]) {return [super webView: theWebView shouldStartLoadWithRequest: request navigationType: navigationType]; } else {[[UIApplication sharedApplication] openURL: url]; ritorno NO; }}
Gamadril

10

Nessuna di queste risposte è sufficientemente esplicita da consentire l'apertura di collegamenti esterni in ciascuna piattaforma. Secondo la documentazione di inAppBrowser :

Installare

cordova plugin add cordova-plugin-inappbrowser

Sovrascrivi window.open (opzionale, ma consigliato per semplicità)

window.open = cordova.InAppBrowser.open;

Se non sovrascrivi window.open, utilizzerai la window.openfunzione nativa e non puoi aspettarti di ottenere gli stessi risultati multipiattaforma.

Usalo per aprire i collegamenti nel browser predefinito

window.open(your_href_value, '_system');

Si noti che l'obiettivo per inAppBrowser (che è ciò per cui il nome del plug-in suggerisce che deve essere utilizzato) è '_blank', invece di '_system'.


Senza i passaggi precedenti, non sono stato in grado di ottenere collegamenti da aprire nell'applicazione multipiattaforma del browser predefinita.

Credito extra

Di seguito è riportato un esempio di gestore di clic (live) per i collegamenti:

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

Dove esegui l'override di window.open? Nel sito web o nell'app
cordova

Preferibilmente la parte superiore del tuo file JavaScript che carichi nella tua pagina index.html (il tuo sito web, se questo aiuta)
bozdoz

7

Se ti capita di avere jQuery in giro, puoi intercettare il clic sul link in questo modo:

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

In questo modo non è necessario modificare i collegamenti nell'html, il che può far risparmiare molto tempo. L'ho impostato utilizzando un delegato, ecco perché lo vedi legato all'oggetto documento, con il tag "a" come secondo argomento. In questo modo verranno gestiti tutti i tag "a", indipendentemente da quando vengono aggiunti.

Ovviamente devi ancora installare il plug-in InAppBrowser:

cordova plugin add org.apache.cordova.inappbrowser

questa è una bella idea che userò ma dovresti anche occuparti delle chiamate dirette window.open (non tutto passa attraverso un link)
Sebastien Lorber

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

Funzionerà ma solo se hai installato il plugin inappbrowser. Per installare, utilizzando il terminale, vai alla cartella www nel tuo progetto e digita:

phonegap plugin add org.apache.cordova.inappbrowser

o

cordova plugin add org.apache.cordova.inappbrowser

Quindi il tuo link si aprirà nel browser.


Il comando phonegap local <command>è stato DEPRECATO. Il comando è stato delegato a phonegap <command>. Il comando phonegap local <command>verrà presto rimosso.
Ajay Suwalka

Non lo so in passato, ma al giorno d'oggi il corretto per installare questo plugin è cordova plugin add cordova-plugin-inappbrowser.
Plinio FM

2

Con Cordova 5.0 e versioni successive il plug-in InAppBrowser viene rinominato nel registro dei plug-in di Cordova, quindi è necessario installarlo utilizzando

cordova plugin add cordova-plugin-inappbrowser --save

Quindi usa

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


1

Sto usando PhoneGap Build (v3.4.0), con focus su iOS, e avevo bisogno di questa voce nel mio config.xml per PhoneGap per riconoscere il plug-in InAppBrowser.

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

Dopodiché, l'utilizzo di window.open (url, target) dovrebbe funzionare come previsto, come documentato qui .


1
Sto 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. Isolo usando window.open (). Qualche consiglio?
Reinos

Se è impostato correttamente, window.open dovrebbe funzionare. Nella mia situazione, window.open sta aprendo un altro URL del browser e funziona bene. Assicurati che l'URL sia corretto.
contattateci

L'ho appena provato con Phonegap Build e si verifica un errore con: "plugin unsupported: org.apache.cordova.inappbrowser"
David Ball

1

Ho anche riscontrato il problema che il collegamento non si apriva sul browser, ecco la mia soluzione con i passaggi:

1: installa questo plugin cordova.

cordova plugin add cordova-plugin-inappbrowser

2: aggiungi il link aperto nell'html come segue.

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

3: questo è il passaggio più importante per questo ho affrontato molti problemi: scarica il cordova.jsfile e incollalo nella wwwcartella. Quindi fai riferimento a questo nel index.htmlfile.

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

Questa soluzione funzionerà sia per l'ambiente Android che per iPhone.


-2

Come questo :

<a href="#" onclick="window.open('https://www.nbatou.com', '_system'); return false;">https://www.nbatou.com</a>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.