2016-07-28 4 views
0

Я использую GeckoWebBrowser в моей программе VB.NET (Windows Form App). GeckoWebBrowser загружает локальный файл html. В этом html встроен встроенный файл svg (human body diagram with bones and internal organs) с функцией javascript для подбора всех «идентификаторов» элементов из документа svg. Я хотел бы назвать вышеупомянутую функцию javascript с VB.NET (приложение для форм Windows), но я не знаю, как это сделать. Может ли кто-нибудь помочь мне или дать мне пример с исходным кодом, пожалуйста? Весь материал я нашел основан в C# ... Это моя javascript функция в моем html файле:VB.NET Gecko Web Browser вызов функции javascript?

<script type="text/javascript"> 

(funcion() { 

// Function to be called in VB.NET when the DOM is loaded 


var SVGHandler = function() { 

    // Picking up the id Root Node="CUERPO_HUMANO" into svg variable 

    var svg = document.querySelector('#CUERPO_HUMANO'); 


    // In Items we save all the <g> which have an ID 

    var items = svg.querySelectorAll('g[id], path[id]'); 

    //var items = svg.querySelectorAll('g[id]'); 

    // We loop all the nodes saved in Items and add them to click event listener 

    forEach(items, function (index, value) { 

     value.addEventListener('click', function (event) { 



       event.preventDefault(); 

       //We avoid the spread of events 
       event.stopPropagation(); 





       return event.currentTarget.id 

       // console.log(event.currentTarget.id) 

      }); 

    }); 



} 

// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/ 

var forEach = function (array, callback, scope) { 

    for (var i = 0; i < array.length; i++) { 

    callback.call(scope, i, array[i]); // passes back stuff we need 

    } 

}; 



// With this method, we call a SVGHandler when DOM is totally loaded 

document.addEventListener('DOMContentLoaded', SVGHandler); 

})(); 

</script> 

Какой код следует использовать в VB.NET для вызова моя javascript функция каждый раз, когда я нажимаю на специфической кости или органа в диаграмме человеческого тела, загруженной в GeckoWebBrowser? Я хочу сохранить «идентификатор», полученный с вызовом, в переменную string, чтобы использовать ее в качестве параметра в операторе SQL и заполнить DataGridView. Я искал и все, что мог найти, был связан с C#, а не с одним примером VB.NET. Хотя я пытался выяснить эквивалентность в VB.NET, пытаясь преобразовать примеры C# в VB.NET, у меня есть некоторые сомнения относительно того, как сделать вызов javascript. По моей javascript функции Это может быть что-то вроде этого:

browserControl.Navigate("javascript:void(funcion())"); 

Пожалуйста, может кто-нибудь помочь мне решить эту проблему? Я был бы очень благодарен ...

ответ

1

Ну, так как вы установили, нажмите EventListener. Я думаю, что вы не ищете способ назвать возможную функцию от VB.NET, но это довольно неясно в соответствии с вашим сообщением, поэтому я Приведем примеры, как вызвать функцию javascript и как вызвать реакцию в коде VB.NET через javascript с использованием GeckoWebBrowser.

Ваш фрагмент кода вашей попытки вызвать функцию js из вашего кода vb верен. Единственная проблема заключается в том, что вы не определили какую-либо вызываемую функцию js в вашем файле html. В вашем случае, вы должны сделать это, чтобы вызвать вашу основную функцию JS из VB:

//Sorry I don't know vb. I'll give example in c# keeping it as simple as possible so that you can easily convert it to vb 

Gecko.GeckoHtmlElement humanBodyPart = (Gecko.GeckoHtmlElement) browserControl.Document.GetElementById("your id"); 
humanBodyPart.Click(); 

Приведенный выше код находит элемент с идентификатором согласования в GeckoWebBrowser и нажмет на него. Поскольку вы установили клик EventListener, щелкнув один из элементов, это вызовет функцию, назначенную им для запуска.

Перемещение, чтобы сохранить идентификатор элементов в переменной string в коде vb, вам нужно добавить этот немного кода js в код, который вы передаете в качестве параметра «обратного вызова» в своем forEach функция:

var event = document.createEvent('MessageEvent'); 
var origin = window.location.protocol + '//' + window.location.host; 
var event = new MessageEvent('jsCall', { 'view': window, 'bubbles': false, 'cancelable': false, 'data': 'YOUR EVENTUAL ID AS A STRING (THIS STUFF GOES BACK TO THE VB/C# CODE)' }); 
document.dispatchEvent (event); 

Тогда выше фрагмент кода должен обрабатываться в коде VB так:

browserControl.AddMessageEventListener("jsCall", (id) => 
{ 
    //Here in the variable id you have your clicked id as a string. Do what you wanted to do... 
}); 
0

стороне VB: вам нужно подождать, пока документ не будет завершен, чтобы добавить слушателей , например: _DocumentCompleted

Private Sub GeckoWebBrowser1_DocumentCompleted(sender As Object, e As Gecko.Events.GeckoDocumentCompletedEventArgs) Handles GeckoWebBrowser1.DocumentCompleted GeckoWebBrowser1.AddMessageEventListener("my_function_name JS_side", AddressOf my_sub_for_treatment) End Sub

JS сторона:

var event = document.createEvent('MessageEvent'); 
 
var origin = window.location.protocol + '//' + window.location.host; 
 
var event = new MessageEvent('my_function_name JS_side', { 'view': window, 'bubbles': false, 'cancelable': false, 'data': my_data_to transfer }); 
 
document.dispatchEvent (event);

Смежные вопросы