Навигация WebView в пользовательский протокол
Я работаю с WebView в приложении xaml для Windows 8.1 и должен обрабатывать навигацию по пользовательскому протоколу, т.е. "Приложение://12345".
У меня есть WebView, который переходит на веб-сайт для аутентификации, который затем перенаправляет на этот настраиваемый протокол в качестве ответа.
Ни одно из событий навигации WebView не запускается, и Windows выбирает это и пытается открыть с ним приложение ( "Ищите приложение в диалоговом окне" Магазин ").
Можно ли поймать, когда WebView переходит к этому протоколу?
Ответы
Ответ 1
У меня была аналогичная проблема, и я решил ее с помощью этого кода, введенного в HTML. Или вы можете запустить этот код непосредственно в 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');
}
}
После этого вы можете поймать window.external.notify в коде С# и делать то, что хотите.
private void WebView_OnScriptNotify(object sender, NotifyEventArgs e)
{
if (e.Value.StartsWith("app"))
{
DoAction(e.Value);
return;
}
}
Ответ 2
Может быть, это решение переполнения, но вы можете использовать IUriToStreamResolver с помощью метода NavigateToLocalStreamUri: https://msdn.microsoft.com/library/windows/apps/dn299344.
Это решение позволяет создать пользовательский резольвер, который реализует IUriToStreamResolver. Получатель будет уведомлен для каждого ресурса, требуемого WebView. В преобразователе вы должны вернуть поток для каждого запрошенного запроса. Но вы можете обрабатывать собственный протокол таким образом.
Ответ 3
Я просто нашел этот вопрос при попытке сделать что-то подобное, и похоже, что Windows внедрила UnsupportedUriSchemeIdentified (на основе @dkarzon выше комментарий), поэтому теперь это должно работать корректно!