我正在使用here所述的方式将IE
窗口的句柄转换为mshtml.HTMLDocumentClass
。
这里发生了一些非常奇怪的事情。
当我为框架文档挂钩onreadystatechange
事件时(使用frame
获取document.getElementById
并挂钩到框架onreadystatechange
),该事件仅被触发一旦。
当我分离事件处理程序并将其重新连接到同一方法时,问题#1就会消失。
主要问题,执行此操作后,网络文档冻结,文本框无法获得焦点,按钮可以被点击但它们看起来像只读按钮所有文本类型控件变为readonly,在仔细研究了这个问题之后,我发现只要你挂钩到框架文档的onreadystatechange
事件中就会出现这种行为。从事件中分离会使页面恢复正常行为。
这是我正在使用的代码。
this.GuideDocument = this.GetHtmlDocumentByWindowHandle(handle) as mshtml.HTMLDocumentClass;
var frame = (this.GuideDocument.frames.item(0) as mshtml.IHTMLWindow2).frames.item(1) as mshtml.IHTMLWindow2;
var frameDocument = frame.document as mshtml.HTMLDocumentClass;
frameDocument.HTMLDocumentEvents2_Event_onreadystatechange += frameDocument_HTMLDocumentEvents2_Event_onreadystatechange;
void frameDocument_HTMLDocumentEvents2_Event_onreadystatechange(IHTMLEventObj pEvtObj)
{
frameDocument.HTMLDocumentEvents2_Event_onreadystatechange -= frameDocument_HTMLDocumentEvents2_Event_onreadystatechange;
frameDocument.HTMLDocumentEvents2_Event_onreadystatechange += frameDocument_HTMLDocumentEvents2_Event_onreadystatechange;
this.DisableButton("btnClose", string.Empty, framedocument);
}
我不确定这里缺少什么,你觉得这里有什么问题,或者任何其他方法。此网页由许多framesets
组成,因此frames
。任何对此的见解都将是一个帮助。
我不知怎的感觉,它需要一些base.onreadystatechange
的东西,但我不知道是否有可用的东西。或者其他一些让原始事件被调用的方式等。
谢谢,