如何使用GeckoFX作为XULRunner的包装器在javascript中调用C#方法

我在我的项目中使用GeckoFX16xulrunner-16.0.2.en-US.win32 。 问题是,我想在javascript中调用C#方法。

我好奇,有办法做到这一点吗?

如下所示:

C#部分:

 private GeckoWebBrowser weBrowser; public browser() { InitializeComponent(); Gecko.Xpcom.Initialize("xulrunner"); weBrowser = new GeckoWebBrowser(); weBrowser.Parent = this; weBrowser.Dock = DockStyle.Fill; weBrowser.Navigate("test.html"); } public string loadData(){ //load data from local file. return str; } 

javascript部分:

  var data = window.loadData(); alert(data);  

我是这个领域的新人,如果可能的话我会很感激!

您可以使用MessageEvent来调用c#中的代码,但据我所知,您无法返回类似于您想要的字符串。 其中一个unit testing演示了如何调用c#代码:

 [Test] public void AddEventListener_JScriptFiresEvent_ListenerIsCalledWithMessage() { string payload = null; browser.AddMessageEventListener("callMe", ((string p) => payload = p)); browser.LoadHtml( @"   "); browser.NavigateFinishedNotifier.BlockUntilNavigationFinished(); Assert.AreEqual("some data", payload); } 

我知道这很尴尬,但你可以使用ac# – > javascript调用将数据恢复到javascript-land。 请参阅此问题以了解如何执行此操作。 所以你的javascript会首先将此消息发送到c#land,然后它将获得一个带有你需要的字符串值的回调。

希望有所帮助。

重要更新:

目前使用event.initMessageEvent代码不起作用,因为此结构已被替换

 var event = new MessageEvent('yourEventName', { 'view': window, 'bubbles': false, 'cancelable': false, 'data': 'some data' }); 

您可以将消息事件侦听器添加到Web浏览器并调用您的方法,如下所示:

 private void load() { browser.AddMessageEventListener("myFunction", ((string s) => this.showMessage(s))); browser.LoadHtml ( @"       " ); } 

 private void showMessage(string s) { MessageBox.Show(s); } 

现在,您可以向msg侦听器添加更多msg事件(如果需要),并以相同方式触发它们。

Interesting Posts