MICHELEPISANI.IT
 

Quando window.open non funziona

Aprire un Link esterno all'App nel Browser in Ionic

Ionic - Aprire un URL esterno nel Browser
October 06
07:332016

Dopo una serie di grattacapi sono riuscito a risolvere un problema che mi ha tenuto attivo per diverse ore in quanto stavo cercando la soluzione nel posto sbagliato. La questione era aprire un link esterno all'app nel browser dove, nonostante una lunga serie di tentativi che hanno visto installare e disinstallare il plugin necessario quale cordova-plugin-inappbrowser oppure utilizzare ngCordova tramite il metodo $cordovaInAppBrowser, ottenevo sempre lo stesso risultato ovvero, al lancio di window.open(url, '_system', 'location=yes') nessuna azione veniva effettuata (quindi nessun browser aperto) e nessun errore veniva segnalato in console.

Il problema in realtà non stava né all'interno dei plugin né nel codice di Ionic dell'app bensì era dovuto ad una questione di permessi da gestire all'interno del file config.xml (non quello nella cartella platform Android che si aggiornerà di conseguenza bensì quello nella root dell'app di Ionic):

Ionic - file config.xml nella root
Fig. 1 - Ionic - file config.xml nella root dell'app

Le righe di codice da modifica/inserire per far sì che l'app sia abilitata ad aprire URL esterni sono le seguenti:

<access origin="*" launch-external="yes"/>
<allow-navigation href="*"/>

Che visto direttamente nel codice xml del file config.xml sono:

Ionic - file config.xml modificato abilitando i permessi di apertura di url esterni
Fig. 2 - Ionic - file config.xml modificato abilitando i permessi di apertura di url esterni

Ricompilando l'app il risultato è stato immediato.
Spero che questo articolo gioverà a qualcuno in termini di tempo guadagnato.

Tags

Autore

Michele Pisani

Michele Pisani

Ho uno spiccato orientamento al problem-solving, se è troppo facile non mi diverto :)
Credo nella volontà e nel cambiamento perchè hanno fatto della mia passione il mio pane quotidiano.
Se devo descrivermi con una sola parola direi... "Concretezza", la mia stretta di mano è una garanzia.

7 Commenti

  1. Giovanni Monday, August 10, 2020 alle ore 11:11

    Ciao,
    ho riscontrato anche io il problema che descrivi e mi sono messo alla ricerca della soluzione.
    Sono finito nel tuo sito, ben fatto, che descriveva il problema e forniva la soluzione.
    Ma inserendo quelle 2 righe nel mio file config.xml non ho risolto il problema.
    Anzi ti dirò di più non riesco nemmeno a visualizzare nome e icona dell'app (questo anche prima dell'intervento delle 2 riche).

    Riesci a darmi una mano?

    Grazie
    Giovanni

    Rispondi a questo commento
    • Michele Pisani Monday, August 10, 2020 alle ore 15:26

      Ciao Giovanni,
      se non visualizzi neanche il nome e l'icona dell'app è probabile che il tuo problema sia ancora a monte da quello descritto se non diverso.

      Prova a vedere se ci sono o nel caso aggiungere, queste righe nel file config.xml:


      <allow-navigation href="*" />
      <allow-intent href="*" />
      <access origin="*" />


      E questa nell'index.html o pagina principale:


      <meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">


      Se non risolve il problema servono maggiori dettagli sul tuo caso perché potrebbe non trattarsi di quello in oggetto.

      Rispondi a questo commento
      • Giovanni Tuesday, August 11, 2020 alle ore 09:25

        <?xml version="1.0" encoding="UTF-8" ?>
        <widget xmlns = "http://www.w3.org/ns/widgets"
        xmlns:gap = "http://phonegap.com/ns/1.0"
        id = "com.phonegap.example"
        versionCode = "10"
        version = "1.0.0">
        <name>Report Lite</name>
        <description>
        CONDIVISIONE DATI E ACCESSO ALLA MESSAGGISTICA
        Versione lite del portale, studiata e realizzata per la condivisione dati dei report condivisi e accesso diretto alla piattaforma di messaggistica Whatsapp
        </description>
        <icon src="icona.png">
        <allow-navigation href="*" />
        <allow-intent href="*" />
        <access origin="*" />
        </widget>

        ****************************************
        Questo è il mio file Config.xml

        ho inserito anche la stringa che mi hai suggerito nell'index
        (<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">)

        Ma non ho avuto risultati positivi.
        La mia App prevede 3 pagine che sono correttamente visualizzate ma quando cerco di aprire un link esterno questo non si apre.

  2. Michele PisaniAutore Tuesday, August 11, 2020 alle ore 10:07

    L'articolo è riferito al framework ionic mentre nel tuo caso non sembra che lo stai utilizzando, questo potrebbe essere uno dei motivi per il quale la soluzione in questione non si adatta al tuo caso.

    Posso provare a suggerirti di inserire i link in questo modo:

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

    Assicurandoti di aver installato il plugin:

    cordova plugin add cordova-plugin-inappbrowser

    Rispondi a questo commento
    • Giovanni Friday, August 21, 2020 alle ore 09:28

      Grazie per la risposta!
      Solo un'ultima cosa, l'installazione del plugin devo farla all'interno del file config.xml o dentro ogni pagina ove presente il link verso l'esterno?

      Rispondi a questo commento
      • Michele PisaniAutore Friday, August 21, 2020 alle ore 14:21

        Ciao Giovanni,
        i plugin sono installati a livello di applicazione, non di pagine.
        Ti consiglio di prendere visione della documentazione ufficiale per chiarimenti sul tema: https://cordova.apache.org/docs/it/latest/guide/cli/#aggiungere-funzionalit\%C3\%A0-di-plugin

  3. David Frassi Wednesday, May 4, 2022 alle ore 19:38

    scusate una domanda, come si fa a chiudere una finestra aperta tramite inappbrowser _system?
    magari riuscendone a leggere un parametro sulla url

    Rispondi a questo commento

Scrivi un Commento

Il tuo indirizzo email non sarà pubblicato.
I campi contrassegnati da un * sono obbligatori

Articoli e Argomenti correlati

Il Canale YouTube in ITALIANO

1 VIDEO GRATIS ogni 2 settimane! ISCRIVITI!

Entra a far parte della community su Facebook

Categorie popolari

Iscriviti alla mia newsletter

La tua e-mail con me sarà al sicuro.
Non fornirò mai le tue informazioni a nessuno!

Ultimi commenti

Michele Pisani

Hai verificato se succede per tutte le pagine da un certo periodo di tempo in poi o solo su alcune?

Tecnowiz

Sono amministratore di un blog pure io... Intanto ti faccio i complimenti per questo articolo. …

Michele Pisani

Ciao Antonio, grazie per la fiducia :) In caso di più fogli è necessario inserire il codice del …

Antonio

Ciao Michele, ho acquistato il tuo libro che unitamente ai tuoi video sta diventando il mio corso …