Ответы с форумов MSDN

UWP - Обработка события onkeydown в WebView

Date: 15.01.2018 19:02:53

Что-то типа такого?

//MyWebView.AllowedScriptNotifyUris = WebView.AnyScriptNotifyUri; (до Windows 8.1)
await MyWebView.InvokeScriptAsync("eval", 
new[] { "document.onkeydown = function (e) { window.external.notify('Hello, UWP World!'); }" }
);

//и обработчик события

private void MyWebView_ScriptNotify(object sender, NotifyEventArgs e)
{
    string parameter = e.Value;
}
Добавлено: для получения кода нажатой клавиши в onkeydown можно использовать e.keyCode / e.which



Message 563

Date: 16.01.2018 8:26:48

Да, это устарело. Нужно вместо InvokeScript использовать InvokeScriptAsync.

И вместо AnyScriptNotifyURL - включить URL в параметр манифеста ApplicationContentUriRules 

Message 562

Date: 16.01.2018 9:29:37

eval по идее то же самое делает, что и execScript. Если в том же коде eval поставить, сработает? 

Message 561

Date: 16.01.2018 11:40:05

Похоже никак. https://msdn.microsoft.com/ru-ru/library/windows/apps/windows.ui.xaml.controls.webview.anyscriptnotifyuri.aspx?f=255&MSPPError=-2147217396

Прекращение клиентской поддержки

Windows 8.1

Теперь можно только для URL, внесенных в список. Причем внести в список запись типа *.* нельзя. Оно и понятно, такие схемы слишком небезопасны для UWP.

Так что легкого пути нет, если нужно заставить это работать на любых сайтах.

Добавлено: возможно есть какой-то обходной путь, например через CoreWindow.KeyDown

Message 560

Date: 17.01.2018 3:48:52

Да, хоть и редко кто обрабатывает события на уровне отдельных HTML-элементов, а для document могут вместе уживаться несколько обработчиков (при использовании addEventListener вместо "=" ), в целом метод с JS-обработчиками хрупкий. Если где-то вызывается preventDefault, все сломается.

Наверное, должен быть какой-то другой метод, с использованием глобальных событий, вызываемых до передачи события конкретным элементам. Через CoreWindow.KeyDown или CoreWindow.Dispatcher.AcceleratorKeyActivated. В крайнем случае, через периодический опрос CoreWindow.GetKeyState, если не смущает постоянная загрузка процессора.

Message 559

Date: 17.01.2018 7:39:48

"если событие есть в функционале элемента, отображается в окне свойств, и компилятор на него не ругается , то оно должно как то работать"

Не ругается, потому что WebView унаследован от UIElement, у которого есть это событие. По правилам ООП, класс-наследник не может "удалить" элемент, определенный в базовом классе, так и получается событие, которое существует, но ничего не делает.


Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub