Как обнаружить щелчок по элементу `<div>`, содержащемуся в элементе управления WebView в Visual Studio 2019? - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу использовать. Net WebView элемент управления в WinForm для отображения символов Unicode больше 0xFFFF.

Я создал следующий прототип VB. Net программа для загрузить страницу HTML, содержащую Javascript и CSS стиль.

Dim sText As XElement =
<html>
    <head>
        <style type="text/css">
            .unicode
                {
                font-size: 32px;
                cursor: pointer;
                }
        </style>
    </head>
    <body>
        <script type='text/javascript'>
            function clickUnicode()
                {
                var sValue = this.event.srcElement.innerText
                alert('Click on Unicode character:' + sValue);
                }  
        </script>
        <span class="unicode" onclick="clickUnicode()">&#x1F600;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F601;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F602;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F603;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F604;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F605;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F606;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F607;</span>
    </body>
</html>

wv.Settings.IsScriptNotifyAllowed = True
wv.Settings.IsJavaScriptEnabled = True
wv.NavigateToString(sText.ToString())

При загрузке моей формы я вижу следующий вывод

enter image description here

Когда я проверяю этот код HTML на Chrome, при нажатии на символ смайлика на экране отображается AlertBox.

Когда я проверяю его с помощью WebView, я вижу ничего!

Выполнен ли код Javascript?

Что нужно сделать, чтобы уведомить VB.Program о нажатии на символ Unicode?

1 Ответ

0 голосов
/ 21 апреля 2020

Я продолжил поиск и нашел решение.

Моя последняя проблема в том, что функция alert() Javascript не работает с WebView! Когда я тестировал код HTML, используя Chrome, он работает.

Итак, чтобы быть уверенным, что мой код Javascript выполняется, я добавил <div> с текстом, который становится red когда Javascript выполняется функция события.

Теперь я уверен, что вызывается функция Javascript!

Работающий код VB. Net следует

    Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim sText As XElement =
<html>
    <head>
        <style type="text/css">
            .unicode
                {
                font-size: 32px;
                cursor: pointer;
                }
        </style>
        <script>
            function clickUnicode()
                {
                var eDiv = document.getElementById("divid");
                eDiv.style.color = "Red";
                var sValue = this.event.srcElement.innerText;
                //alert('Click Unicode character:' + sValue);
                window.external.notify(sValue);
                }  
        </script>
    </head>
    <body>
        <div id="divid">StackOverflow is great</div>
        <span class="unicode" onclick="clickUnicode()">&#x1F600;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F601;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F602;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F603;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F604;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F605;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F606;</span>
        <span class="unicode" onclick="clickUnicode()">&#x1F607;</span>
    </body>
</html>
        wv.Settings.IsScriptNotifyAllowed = True
        wv.Settings.IsJavaScriptEnabled = True
        wv.IsJavaScriptEnabled = True
        wv.NavigateToString(sText.ToString())
    End Sub

Функция Javascript window.external.notify(sValue) перехватывается событием ScriptNotify.

Итак, я добавил следующий VB. Net код

Private Sub wv_ScriptNotify(sender As Object, e As WebViewControlScriptNotifyEventArgs) 
Handles wv.ScriptNotify
    Debug.Print("Unicode character " & e.Value & " has been clicked in WebView")
End Sub

Когда я выполняю Эта маленькая программа, и я нажимаю на последний юникод, я вижу следующие строки в окне отладки Visual Studio 2019.

Юникод, на который нажали, отображается без цвета, но это нормально.

enter image description here

...