Internet Explorer addon。我如何在c#中使用postMessage

时间:2018-04-23 11:14:32

标签: c# postmessage bho ieaddon

我有一个互联网浏览器插件 我有一个事件监听器,我附加在文档加载:

private void attachOnChangeEvent(HTMLDocument doc, Boolean flag)
{ 
   IHTMLWindow3 rawWindow = (IHTMLWindow3)(webBrowser.Document as HTMLDocument).parentWindow;
   rawWindow.attachEvent("onmessage", new HtmlHandler(onmessageWindow, (IHTMLWindow2)rawWindow));
    }

private void onmessageWindow(object sender, EventArgs e)
{
  MessageBox.Show(typeof(sender).ToString());
}

以上工作正常。

现在我正在尝试发布消息

HTMLWindow2 rawWindow = (HTMLWindow2)(webBrowser.Document as HTMLDocument).parentWindow; 

rawWindow.postMessage(s, rawWindow.location.pathname);

但我一直在例外。

如何更正调用postMessage?

继承事件处理程序代码

using MSHTML;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Authenticator
{
    class HtmlHandler : IReflect
    {
        public HtmlHandler(EventHandler evHandler, IHTMLWindow2 sourceWindow)
        {
            this.eventHandler = evHandler;
            this.htmlWindow = sourceWindow;
        }

        public IHTMLWindow2 SourceHTMLWindow
        {
            get { return this.htmlWindow; }
        }

        #region IReflect

        FieldInfo IReflect.GetField(string name, BindingFlags bindingAttr)
        {
            return this.typeIReflectImplementation.GetField(name, bindingAttr);
        }

        FieldInfo[] IReflect.GetFields(BindingFlags bindingAttr)
        {
            return this.typeIReflectImplementation.GetFields(bindingAttr);
        }

        MemberInfo[] IReflect.GetMember(string name, BindingFlags bindingAttr)
        {
            return this.typeIReflectImplementation.GetMember(name, bindingAttr);
        }

        MemberInfo[] IReflect.GetMembers(BindingFlags bindingAttr)
        {
            return this.typeIReflectImplementation.GetMembers(bindingAttr);
        }

        MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr)
        {
            return this.typeIReflectImplementation.GetMethod(name, bindingAttr);
        }

        MethodInfo IReflect.GetMethod(string name, BindingFlags bindingAttr, Binder binder, Type[] types, ParameterModifier[] modifiers)
        {
            return this.typeIReflectImplementation.GetMethod(name, bindingAttr, binder, types, modifiers);
        }

        MethodInfo[] IReflect.GetMethods(BindingFlags bindingAttr)
        {
            return this.typeIReflectImplementation.GetMethods(bindingAttr);
        }

        PropertyInfo[] IReflect.GetProperties(BindingFlags bindingAttr)
        {
            return this.typeIReflectImplementation.GetProperties(bindingAttr);
        }

        PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr)
        {
            return this.typeIReflectImplementation.GetProperty(name, bindingAttr);
        }

        PropertyInfo IReflect.GetProperty(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
        {
            return this.typeIReflectImplementation.GetProperty(name, bindingAttr, binder, returnType, types, modifiers);
        }

        public object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
        {
            if (name == "[DISPID=0]")
            {
                if (this.eventHandler != null)
                {
                    this.eventHandler(this, EventArgs.Empty);
                }
            }

            return null;
        }

        Type IReflect.UnderlyingSystemType
        {
            get
            {
                return this.typeIReflectImplementation.UnderlyingSystemType;
            }
        }

        #endregion


        private IReflect typeIReflectImplementation = typeof(HtmlHandler);
        private EventHandler eventHandler;
        private IHTMLWindow2 htmlWindow;
    }
}

0 个答案:

没有答案