2013-10-14 26 views
10

Windows 8.1 xaml uygulamasında bir Web Görünümü ile çalışıyorum ve özel bir iletişim kuralına göre gezinme işlemlerini gerçekleştirmem gerekiyor. "App: // 12345".WebView, özel bir iletişim kuralı için gezinme yakalama

WebView, kimlik doğrulaması için bir web sitesine giderek daha sonra yanıt olarak bu özel protokole yönlendiriliyor.

WebView gezinme olaylarının hiçbiri tetiklenmez ve Windows bunu alıp bir uygulamayı açmaya çalışır ("Mağazada bir uygulama arayın" iletişim kutusu).

WebView bu protokolde gezinirken yakalamak mümkün mü?

+2

Bunu bir şekilde çözdünüz mü? Benzer sorunla uğraşıyorum. –

+1

Ne yazık ki bu mümkün değil. En azından Windows 10'a kadar bir "MSWebViewUnsupportedUriSchemeIdentified" olayı getiriyor - https://msdn.microsoft.com/library/windows/apps/dn803906.aspx?f=255&MSPPError=-2147217396 Bunu henüz test etmedim. – dkarzon

+0

Cevabınız için teşekkürler. Windows 10'un Windows mağazası geliştirmede daha fazla sorunu çözeceğini umuyorum. Bu davayı enjekte ederek çözdüm. Aşağıdaki cevabı görmeme izin ver –

cevap

0

Benzer bir sorun yaşadım ve HTML'ye enjekte edilen bu kodla çözdüm. Veya bu kodu doğrudan WebView üzerinde çalıştırabilirsiniz.

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'); 
    }  
} 

Bundan sonra C# kodunda window.external.notify'ı yakalayabilir ve istediğinizi yapabilirsiniz.

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

Bu çözüm sadece sayfa kaynağına erişiminiz varsa ve protokole giden link gerçek bir 'a' etiketidir ve JavaScript'ten bir şey değil –

0

Belki bir overkill çözüm, ama yöntem NavigateToLocalStreamUri ile IUriToStreamResolver kullanabilirsiniz: https://msdn.microsoft.com/library/windows/apps/dn299344. Bu çözüm, IUriToStreamResolver'ı uygulayan özel bir çözümleyici oluşturmanıza olanak tanır. WebView tarafından talep edilen her ressource için çözümleyici bildirilecektir. Çözümleyicide, istenen her kaynak için bir Akışı döndürmeniz gerekir. Ancak özel protokolü bu şekilde halledebilirsiniz.

0

Benzer bir şey yapmaya çalıştığınızda bu soruyu şimdi buldum ve Windows UnsupportedUriSchemeIdentified'u (@ dkarzon'un yukarıdaki yorumu temel alarak) uygulamış gibi görünüyor, bu yüzden şimdi düzgün bir şekilde çalışmalı!

İlgili konular