2015-12-13 12 views
9

Sto sviluppando un'applicazione e ho capito quasi tutto, tranne il plug-in personalizzato dello schema URL (https://github.com/EddyVerbruggen/Custom-URL-scheme). Ho installato con successo il plugin e impostato uno schema di URL personalizzato di signsrestaurantandbar. Quindi, quando uso signsrestaurantandbar: //, la mia applicazione si apre. Il problema che sto affrontando è la gestione dell'URL. Nel readme, dice che posso usare function handleOpenURL (url) per questo, ma sto ancora avendo problemi nel tentativo di caricare una pagina particolare all'interno dell'app.Uso di handleOpenURL con schema URL personalizzato in Cordova

Ecco cosa ho provato:

function handleOpenURL(url) { 
     var strValue = url; 
     strValue = strValue.replace('signsrestaurantandbar://',''); 
     window.location.href = strValue + ".html"; 
    } 

Ho messo questo nella mia pagina index.html ... pensano che dovrebbe aprire page.html sul caricamento signsrestaurantandbar: // pagina, ma non lo fa propriamente. Nella mia console di Chrome, dice che ha caricato la pagina, ma appare vuota senza errori e questo accade solo una volta. Quando provo a caricare signsrestaurantandbar: // page la seconda volta, si carica l'app.

Apprezzerei qualsiasi suggerimento su come affrontare il caricamento di particolari pagine utilizzando lo schema di URL personalizzato.

risposta

9

È necessario assicurarsi di elencare l'URL "personalizzato" nel proprio CSP.

Aggiunto il 2016-02-11: NOTA: LA TUA APP ORA È INSICURE. È PROPRIO PER PROTEGGERE LA TUA APP.

Sarebbe simile a questa:

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

Di solito l'impostazione (*) il jolly in grado di gestire la maggior parte delle applicazioni, ma non è il protocollo "custom".
NOTA: Le impostazioni jolly hanno il potenziale di tenere l'app fuori dagli "app store".

Potrebbe anche essere necessario per aggiungere alla vostra config.xml

<allow-intent href="signsrestaurantandbar:" /> 

Questo whitelist foglio di lavoro dovrebbe aiutare. HOW TO apply the Cordova/Phonegap the whitelist system

Si dovrebbe anche leggere il whitelist matrix, in particolare il sectionon <allow-intent (...) /> - Best of Luck

+0

Accidenti, era quello che mancava. Penso di capire meglio il CSP ora. Grazie ancora! – user3839044

+1

Ci sarebbe qualche altra ragione per cui handleOpenURL() non viene invocato? Ho provato l'approccio sopra con '' e il CSP insieme, ma non riesco ancora a ottenere la funzione per essere chiamato. – johnborges

+1

Risolto il problema. Per qualche motivo la funzione handleOpenURL() funziona solo quando l'ho nel tag '

5

Aggiungi funzione handleOpenURL globale utilizzando questo codice:

window.handleOpenURL = function(url) { 
    console.log(">>>>>>>>>>>>>>>>>>>"); 
    // do stuff, for example 
    // document.getElementById("url").value = url; 
    console.log(url); 
}; 

Vedi Cordova Custom URL Scheme Handling.

Nota che se si utilizza alert in questa funzione la vostra applicazione potrebbe bloccarsi:

Non è possibile avviare tutte le funzioni interattive come avvisi nel codice handleOpenURL, se lo fai, la vostra applicazione si bloccherà. Allo stesso modo, non dovresti chiamare nessuna API Cordova, a meno che non la sposti prima in una chiamata setTimeout, con un valore di timeout pari a zero.

Il vantaggio di questo metodo è che non è necessario cambiare la politica di sicurezza contenuti utilizzando Content-Security-Policy meta tag.

+0

Dove esattamente aggiungo il tuo codice? Ho provato 'document.addEventListener ('deviceready', function() {...' ma non ha funzionato .. – sooon

+0

@sooon Sì, è qui che lo posiziono, nel gestore di eventi 'deviceready'. Come testate il vostro' handleOpenURL 'è stato richiamato? Ho notato che gli strumenti di sviluppo di Chrome non vengono registrati correttamente per me. –

+0

Ho messo un'

urlscheme
'a' index.html' e usando 'jQuery' per sostituire il testo' urlscheme' con l'url, solo per vedi se funziona, ma fino ad ora nessun risultato – sooon

Problemi correlati