изменение списка вызовов в UWP WebView InvokeScriptAsync - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю с webview в uwp для взаимодействия с веб-страницами.Все отлично работает, кроме списка.Я звоню:

await Webview.InvokeScriptAsync("eval", new string[] { "document.getElementsByClassName('select-box')[0].getElementsByTagName('select')[0].selectedIndex = 1;" });

Выбор визуально изменяется, но функция изменения веб-страницы не была вызвана.Значит нет эффекта!Поэтому я пытаюсь вызвать этот вызов и добавить (слушатель изменений находится в поле выбора 0)

await Webview.InvokeScriptAsync("eval", new string[] { "document.getElementsByClassName('select-box')[0].dispatchEvent(new Event('change', { bubbles: true }));" });
        await Webview.InvokeScriptAsync("eval", new string[] { "document.getElementsByClassName('select-box')[0].getElementsByTagName('select')[0].dispatchEvent(new Event('change', { bubbles: true }));" });
        await Webview.InvokeScriptAsync("eval", new string[] { "document.getElementsByClassName('select-box')[0].change();" });
        await Webview.InvokeScriptAsync("eval", new string[] { "document.getElementsByClassName('select-box')[0].getElementsByTagName('select')[0].change();" });

Ни одна из этих 4 строк не работает.Так что я подумал, возможен ли вызов change ()?Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Nevermind.Я повторяю множество решений, и на этот раз оно работает!

await webView1.InvokeScriptAsync("eval", new string[] { "document.getElementsByClassName('select-box')[0].getElementsByTagName('select')[0].selectedIndex=1;" });
        await webView1.InvokeScriptAsync("eval", new string[] { "document.getElementsByClassName('select-box')[0].getElementsByTagName('select')[0].dispatchEvent(new Event('change', { bubbles: true }));" });

Не обнаружил, что в прошлый раз я ошибался, я уверен, что проверял это раньше.Еще раз спасибо Ксавье Се

0 голосов
/ 26 ноября 2018

Когда я вызываю метод изменения jquery, он вызывает событие изменения на веб-странице.

Я сделал простой пример кода для тестирования, он хорошо работал на моей стороне.

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
$(document).ready(function(){
    $("#select").on('change', function () {
        $("#ptext").text(this.value);
    });
});
    </script>
</head>
<body>
    <select id="select">
        <option value="volvo">Volvo</option>
        <option value="saab">Saab</option>
        <option value="mercedes">Mercedes</option>
        <option value="audi">Audi</option>
    </select>

    <p id="ptext">Write something</p>
</body>
</html>
<Grid>
    <WebView x:Name="webview" Source="ms-appx-web:///HTMLPage1.html"></WebView>
    <Button Content="call js" Click="Button_Click"></Button>
</Grid>
private async void Button_Click(object sender, RoutedEventArgs e)
{
    await webview.InvokeScriptAsync("eval", new string[] { "document.getElementById('select').selectedIndex=2;$('#select').change();" });
}
...