2016-07-28 51 views
0

VB.NET(Windowsフォームアプリケーション)プログラム内でGeckoWebBrowserを使用しています。 GeckoWebBrowserはローカルのhtmlファイルをロードします。このhtmlには、svg文書の要素のすべての「ids」を取得するためのjavascriptファンクションのsvgファイル(human body diagram with bones and internal organs)がインラインで埋め込まれています。前述のjavascript機能をVB.NET(Windowsフォームアプリ)から呼び出したいと思いますが、その方法はわかりません。誰か助けてくれますか、私にソースコードの例を教えてください。私が見つけたすべてのものはC#に基づいています... これは私のhtmlファイルで私のjavascript機能である:私は私のjavascript機能私はAをクリックするたびに呼び出すためVB.NETに使用する必要がありますどのようなコードVB.NET Gecko Webブラウザの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> 

人体図の特定の骨または器官はGeckoWebBrowserにロードされていますか? SQLステートメントでパラメータとして使用し、DataGridViewを入力するために、呼び出された "id"をstring変数に保存します。 私は検索してきましたが、私が見つけたものはすべて、C#に関連していました。ただ1つではなく、VB.NETの例です。 VB.NETC#の例をVB.NETに変換しようとしているのと同じことを理解しようとしていましたが、私はjavascriptコールを行う方法に疑問を抱いています。それはこのようなものかもしれない私のjavascript機能によると:

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

してください、誰も私がこの問題を解決するのに役立つことはできますか?私は非常に感謝しています...

答えて

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を設定したので、要素の1つをクリックすると、割り当てられた機能が実行されます。

あなたのVBコードで変数のstring変数に要素のidを保存するには、この小さなjsコードを、あなたの 'コールバック'パラメータとして渡すコードに追加する必要がありますforEach機能:次に上記のスニペットは、このようなあなたのVBのコードで処理されなければならない

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

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側: あなたはドキュメントがリスナーを追加するために完了するまで待つ必要がありますは、例えば:

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

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

関連する問題