BHO, раскрывающий метод javascript, работает в IE 9+, но не работает в более ранних версиях.

Я делаю BHO, который предоставляет метод JavaScript.

Он нормально работает в IE 9 и IE 10, но не работает в IE 8 с RuntimeBinderException: "mshtml.HTMLWindow2Class" does not contain "signJson".

Код в основном основан на расширении IE для динамической перезагрузки.

Вот как эта функция внедряется в окно:

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

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

Чем отличается mshtml.HTMLWindow2Class в IE 8 от IE 9? Как правильно внедрить в него метод?


person skfd    schedule 28.05.2013    source источник


Ответы (1)


Нашел ответ о переполнении стека. Вам просто нужно изменить код на это:

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);
    }
}
person skfd    schedule 21.06.2013