2

我正在制作一个向 JavaScript 公开方法的 BHO。

它在 IE 9 和 IE 10 中运行良好,但在 IE 8 中失败并出现RuntimeBinderException : "mshtml.HTMLWindow2Class" does not contain "signJson"

代码大多基于live reload IE extension

这是将函数注入窗口的一种方式:

    public void InjectScriptResource(dynamic window)
    {
        var windowEx = (IExpando)window;

        if (windowEx.GetProperty("signJson", BindingFlags.Default) == null)
        {
            windowEx.AddProperty("signJson");
            window.signJson = this;
        }
    }

mshtml.HTMLWindow2ClassIE 8 与 IE 9有什么不同?将方法注入其中的正确方法是什么?

4

1 回答 1

0

在 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);
    }
}
于 2013-06-21T23:09:22.810 回答