2013-10-14 11 views
10

Sto lavorando con una WebView in un'app xaml di Windows 8.1 e devo gestire la navigazione su un protocollo personalizzato, ad es. "App: // 12345".WebView acquisisce la navigazione in un protocollo personalizzato

Ho la visualizzazione Web che si sposta su un sito Web per l'autenticazione che quindi reindirizza a questo protocollo personalizzato come risposta.

Nessuno degli eventi di navigazione di WebView viene attivato e Windows lo sta rilevando e tenta di aprire un'app con esso (finestra di dialogo "Cerca un'app nel negozio").

È possibile rilevare quando WebView sta navigando su questo protocollo?

+2

hai risolto in qualche modo per favore? Ho a che fare con il problema simile. –

+1

Purtroppo questo non è possibile. Almeno fino a Windows 10 che porta un evento 'MSWebViewUnsupportedUriSchemeIdentified' - https://msdn.microsoft.com/library/windows/apps/dn803906.aspx?f=255&MSPPError=-2147217396 Non ho ancora testato questo però. – dkarzon

+0

grazie per la risposta. Spero che Windows 10 risolverà più problemi nello sviluppo di Windows Store. Questo caso ho risolto con l'iniezione di script vedi il mio commento sotto –

risposta

0

Avevo un problema simile e l'ho risolto con questo codice iniettato in HTML. Oppure puoi eseguire questo codice direttamente su WebView.

for (var i = 0; i < document.links.length; i++) { 
    if(document.links[i].href.indexOf('app') === 0){ 
     var currentHref = document.links[i].href; 
     document.links[i].setAttribute('href', 'javascript:window.external.notify(\'' + currentHref + '\')'); 
     document.links[i].removeAttribute('target'); 
    }  
} 

Dopo questo puoi prendere window.external.notify nel codice C# e fare ciò che vuoi.

private void WebView_OnScriptNotify(object sender, NotifyEventArgs e) 
{ 
    if (e.Value.StartsWith("app")) 
    { 
     DoAction(e.Value); 
     return; 
    } 
} 
+0

Questa è una soluzione solo se si ha accesso all'origine della pagina e il collegamento al protocollo è un vero tag 'a' e non qualcosa da JavaScript –

0

Forse è una soluzione eccessivo, ma è possibile utilizzare un IUriToStreamResolver con il metodo NavigateToLocalStreamUri: https://msdn.microsoft.com/library/windows/apps/dn299344. Questa soluzione consente di creare un resolver personalizzato che implementa IUriToStreamResolver. Il resolver riceverà una notifica per ogni risorsa richiesta da WebView. Nel resolver, devi restituire un flusso per ogni risorsa richiesta. Ma puoi gestire il protocollo personalizzato in questo modo.

0

Ho appena trovato questa domanda quando provo a fare qualcosa di simile, e sembra che Windows abbia implementato UnsupportedUriSchemeIdentified (basato sul commento sopra di @ dkarzon) quindi questo dovrebbe funzionare correttamente ora!