如何使用webbrower对象中的脚本调用C#事件?

时间:2016-04-19 13:48:37

标签: javascript c# google-maps-api-3

美好的一天

我为我的谷歌api建立了一个小网站(因为我没有找到在我的C#表单程序中使用它的方法)。我的想法是,当我点击地图图标时,事件需要在C#程序旁边触发。我在C#From上使用webbrowser工具来显示我的网站。我真的希望这是可能的。

如果无法实现上述目标,或者任何人对如何使用图标/按钮在表单应用程序上实现地图有更好的了解,那么这将非常有用。

我看过:Sharpmap - 但我的雇主并不喜欢这种表情 并且:ThinkGeo] - 花钱(仍然是一种选择)

2 个答案:

答案 0 :(得分:0)

This documentation描述了Web浏览器控件与其所在表单之间的双向通信,其中包括从浏览器控件中引发要由表单处理的事件。

一些关键细节:

Form_Load事件中,控件的ObjectForScripting属性设置为以下格式:

webBrowser1.ObjectForScripting = this;

在浏览器控件的HTML中,window.external用于访问'对象中的方法以进行脚本编写。'

webBrowser1.DocumentText =
        "<html><head><script>" +
        "function test(message) { alert(message); }" +
        "</script></head><body><button " +
        "onclick=\"window.external.Test('called from script code')\">" +
        "call client code from script code</button>" +
        "</body></html>";

所以这个:

window.external.Test('called from script code')

在表单中调用Test方法,将called from script code作为参数传递。

public void Test(String message)
{
    MessageBox.Show(message, "client code");
}

答案 1 :(得分:0)

Thx Scott  我得到了From来注册我的java Script事件。所有你需要做的就是Scot说的是添加这些命名空间:

using System.Runtime.InteropServices;
using System.Security.Permissions;

,这在您的表单obj

之上
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class Form1 : Form
   {...}

我也没有使用webBrowser1.DocumentText我用过webBrowser1.Url--我把网站设为第一,只是添加了它。这有问题,网站需要托管,所以使用XAMPP本地托管它(用于测试)