代码之家  ›  专栏  ›  技术社区  ›  laurent emin

uwp webview InvokeScriptAsync中的调用列表框更改

  •  1
  • laurent emin  · 技术社区  · 6 年前

    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();" });
    

    所以我想知道change()调用是否可行? 欢迎任何帮助。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Xie Steven    6 年前

    当我调用jQueryChange方法时,它将触发web页面上的更改事件。

    我制作了一个简单的代码示例进行测试,它在我这方面运行良好。

    <!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();" });
    }
    
        2
  •  0
  •   laurent emin    6 年前

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

    上次我没有发现我做错了,我很确定我以前测试过这个。