BHO暴露javascript方法适用于IE 9+但在早期版本中失败

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

它在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; } } 

IE 9中IE 8中的mshtml.HTMLWindow2Class什么不同? 注入方法的正确方法是什么?

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