2016-07-28 2 views
0

J'utilise GeckoWebBrowser dans mon programme VB.NET (Windows Form App). Le GeckoWebBrowser charge un fichier local html. Ce html a incorporer en ligne un fichier svg (human body diagram with bones and internal organs) avec une fonction javascript pour ramasser tous les "ids" des éléments du document svg. Je voudrais appeler la fonction javascript susmentionnée de VB.NET (application de formulaire Windows), mais je ne sais pas comment le faire. Quelqu'un peut-il m'aider, ou me donner un exemple de code source s'il vous plaît? Tous les trucs que j'ai trouvé est basé à C# ... Ceci est ma fonction javascript dans mon dossier html:VB.NET Gecko Web Browser fonction javascript appelant?

<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> 

Quel code dois-je utiliser dans VB.NET pour appeler ma javascript fonction chaque fois que je clique sur un os spécifique ou organe dans le diagramme du corps humain chargé dans GeckoWebBrowser? Je veux enregistrer le "id" ramassé avec l'appel dans une variable string afin de l'utiliser comme un paramètre dans une instruction SQL et remplir un DataGridView. J'ai cherché et tout ce que je pouvais trouver était lié à C#, pas un seul exemple VB.NET. Même si j'essayais de comprendre l'équivalence dans VB.NET en essayant de convertir les exemples de C# en VB.NET, j'ai des doutes sur la façon de faire l'appel javascript. Selon ma fonction javascript Ce pourrait être quelque chose comme ceci:

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

S'il vous plaît, quelqu'un peut me aider à résoudre ce problème? Je serais très reconnaissant ...

Répondre

1

Eh bien depuis que vous avez mis cliquez sur EventListener de je pense que vous ne cherchez pas un moyen d'appeler la fonction éventuelle de VB.NET mais ce n'est pas clair en fonction de votre poste, donc je Je vais vous donner des exemples sur la façon d'appeler une fonction javascript et comment déclencher une réaction dans votre code VB.NET à javascript en utilisant GeckoWebBrowser.

L'extrait de code de votre tentative d'appel d'une fonction js à partir de votre code vb est correct. Le seul problème est que vous n'avez défini aucune fonction js callable dans votre fichier html. Dans votre cas, vous devez le faire pour déclencher votre fonction principale js de 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(); 

Le code ci-dessus trouve l'élément avec l'id correspondant dans la GeckoWebBrowser et clique dessus. Depuis que vous avez défini cliquez sur EventListener, en cliquant sur l'un des éléments cela déclenchera la fonction qui leur est assignée.De plus, afin de sauvegarder l'identifiant des éléments dans une variable string dans votre code vb, vous devrez ajouter ce petit code js au code que vous passez en paramètre "callback" dans votre code vb. forEach fonction:

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

Ensuite, l'extrait ci-dessus doit être manipulé dans votre code vb comme ceci:

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

côté VB: vous devez attendre que le document soit terminé pour ajouter des écouteurs par exemple: _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

côté 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);