VB.NET Gecko Web Browser javascript函数调用?

时间:2016-07-28 09:34:12

标签: javascript vb.net web browser gecko

我在GeckoWebBrowser(Windows Form App)程序中使用VB.NETGeckoWebBrowser加载了本地html文件。此html已嵌入svg文件(human body diagram with bones and internal organs),其中包含javascript函数,用于从{{1}中获取所有元素的“ID”文件。我想从svg(Windows窗体应用程序)调用前面提到的javascript函数,但我不知道该怎么做。任何人都可以帮助我,或者给我一个源代码示例吗?我发现的所有内容都基于VB.NET ... 这是我的C#文件中的javascript函数:

html

每次点击<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函数? 我想将通过调用获取的“id”保存到GeckoWebBrowser变量中,以便将其用作string语句中的参数并填充SQL。 我一直在搜索,我能找到的所有内容都与DataGridView相关,而不是单个C#示例。即使我试图找出VB.NET尝试将VB.NET的示例转换为C#时的等效性,但我对如何进行VB.NET调用仍有疑问。根据我的javascript函数它可能是这样的:

javascript

拜托,有谁可以帮我解决这个问题?我会非常感激...

1 个答案:

答案 0 :(得分:1)

好了,因为你设置了点击EventListener,我认为你不是想找一种方法来调用VB.NET中的最终功能,但根据你的帖子,这还不太清楚,所以我'下面将举例说明如何调用javascript函数以及如何使用VB.NET通过javascript触发GeckoWebBrowser代码中的反应。

您尝试从vb代码调用js函数的代码段是正确的。唯一的问题是您没有在html文件中定义任何可调用的js函数。在你的情况下,你应该这样做来从vb:

触发你的主要js功能
//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中找到具有匹配ID的元素,然后点击它。由于您已设置了单击EventListener,因此单击其中一个元素将触发分配给它们的函数。

继续,为了将元素的id保存到vb代码中的string变量,您需要将这些js代码添加到您作为'callback'传递的代码中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...
});