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

How do you call a C# event with a script that is in a webbrower object?

本文关键字:脚本 调用 事件 何使用 webbrower 对象      更新时间:2023-09-26

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

如果以上不可能,或者任何人对如何在带有图标/按钮的表单应用程序上实现映射有更好的想法,这将非常有帮助。

我看过:Sharpmap——但我的雇主不喜欢这个外观和:ThinkGeo]--它需要钱(仍然是一种选择)

本文档描述了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");
}

Thx Scott我得到了From来注册我的java脚本事件。你所要做的就是添加这些名称空间:

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

这个在你的表格上方

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

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