BHO暴露javascript方法在ie9 +中工作,但在早期版本中失败

本文关键字:版本 失败 工作 暴露 方法 ie9 BHO javascript | 更新日期: 2023-09-27 18:15:56

我正在制作一个BHO,将方法暴露给JavaScript。

在ie9和ie10中工作正常,但在ie8中失败RuntimeBinderException: "mshtml.HTMLWindow2Class" does not contain "signJson" .

代码主要基于实时加载IE扩展。

下面是将函数注入window的方法:

    public void InjectScriptResource(dynamic window)
    {
        var windowEx = (IExpando)window;
        if (windowEx.GetProperty("signJson", BindingFlags.Default) == null)
        {
            windowEx.AddProperty("signJson");
            window.signJson = this;
        }
    }

ie8和ie9中的mshtml.HTMLWindow2Class有什么不同?给它注入方法的合适方式是什么?

BHO暴露javascript方法在ie9 +中工作,但在早期版本中失败

在Stack Overflow上找到答案。你只需要把代码改成这样:

public void InjectScriptResource(dynamic window)
{
    var windowEx = (IExpando)window;
    if (windowEx.GetProperty("signJson", BindingFlags.Default) == null)
    {
        // windowEx.AddProperty("signJson");
        PropertyInfo p = windowEx.AddProperty("signJson");
        // window.signJson = this;
        p.SetValue(windowEx, this);
    }
}