BHO暴露JavaScript方法工作在IE 9,但在早期版本中失败 [英] BHO exposing javascript method works in IE 9+ but fails in earlier versions

查看:270
本文介绍了BHO暴露JavaScript方法工作在IE 9,但在早期版本中失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在做一个BHO暴露方法的JavaScript。

I'm making a BHO that exposes method to JavaScript.

它的工作原理好于IE 9和IE 10,但在IE 8的 RuntimeBinderException失败mshtml.HTMLWindow2Class不包含signJson

It works okey in IE 9 and IE 10, but fails in IE 8 with RuntimeBinderException: "mshtml.HTMLWindow2Class" does not contain "signJson".

代码主要是基于现场重装IE延伸

下面是一个方式功能注入到窗口:

Here is a way that function is injected into window:

    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?什么是注射的方法把它一个适当的方式?

What's different about about mshtml.HTMLWindow2Class in IE 8 from IE 9? What is a proper way to inject method into it?

推荐答案

在发现的回答堆栈溢出。你只需要改变代码如下:

Found an answer on Stack Overflow. You just have to change code to this:

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);
    }
}

这篇关于BHO暴露JavaScript方法工作在IE 9,但在早期版本中失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆