c# - WPF 浏览器控件在使用 ObjectForScripting window.external.invoke() 时抛出对象不支持属性或方法

标签 c# wpf webbrowser-control

我正在尝试从 WPF 浏览器控件网页捕获点击事件。我创建了一个 ObjectForScriptingHelper 类:

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public class ObjectForScriptingHelper
{
    public void Invoke()
    {
        MessageBox.Show("Hello");
    }
}

在托管 Web 浏览器控件的 WPF 窗口的构造函数中,我使用这个帮助程序类作为 ObjectForScripting:

public MainWindow()
{
    InitializeComponent();
    StandardWpfBrowser.ObjectForScripting = new ObjectForScriptingHelper();    
}

然后我有一个 Uri 变量 ViewPageUri 我导航到:

StandardWpfBrowser.Navigate(ViewPageUri);

然后在浏览器控件显示的页面中我引用了jquery,在html页面中添加了一个按钮并添加了javascript:

$('button').click(function () {
    if (window.external === null)
        alert('ObjectForScripting is not set');
    else
    {
        alert('ObjectForScripting is set');
        window.external.Invoke();
    }
})

正在执行 else 分支,但抛出错误消息 object doesn't support property or method 'Invoke'

所有教程和 MSDN 文档都遵循上述方法。我错过了什么吗?

最佳答案

以防其他人遇到同样的问题。事实证明,将方法命名为 Invoke 是问题所在。一旦我更改了方法名称,它就会按预期工作。

关于c# - WPF 浏览器控件在使用 ObjectForScripting window.external.invoke() 时抛出对象不支持属性或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32766780/

相关文章:

c# - 如何实现静态类中的自定义委托(delegate)?

c# - .NET WinForms 应用程序中的异常什么时候可以被吃掉而不被捕获或冒泡到 Windows 异常?

c# - 如何改进 WPF 倒数计时器的时间格式

WPF 数据绑定(bind)必应 map wpf api

c# - 使用 WebBrowser 和单线程单元 C# 进行网页抓取

wpf - 是否有一种 MVVM 友好的方式来使用 WPF 中的 WebBrowser 控件?

c# - 在为 ASP.NET MVC 2.0 应用程序注册区域时提供或过滤程序集

c# - 发送或接收数据的请求被拒绝,因为套接字未连接。 .

C# EF Code first - 创建数据库和添加数据

javascript - 如何使用 webbrowser 控件将 javascript 注入(inject) iframe?