我在GeckoWebBrowser
(Windows Form App)程序中使用VB.NET
。 GeckoWebBrowser
加载了本地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
拜托,有谁可以帮我解决这个问题?我会非常感激...
答案 0 :(得分:1)
好了,因为你设置了点击EventListener
,我认为你不是想找一种方法来调用VB.NET
中的最终功能,但根据你的帖子,这还不太清楚,所以我'下面将举例说明如何调用javascript
函数以及如何使用VB.NET
通过javascript
触发GeckoWebBrowser
代码中的反应。
您尝试从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
中找到具有匹配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...
});