我正在使用webbrowser控件加载网页,其中有一个由javascript生成的表单.
当我尝试访问C#中的元素时,找不到它们.
该页面在普通浏览器中呈现良好,但是在我的winforms应用中,表单元素未呈现,我只能在调试时看到生成表单的javascript
我在堆栈上发现的一个接近的解决方案是将webbrowser.document.domdocument转换为ihtmldocument,但是我没有成功,
这就是想要做的
Dim doc As HtmlDocument = DirectCast(wbMain.Document.DomDocument, MSH.IHTMLDocument)
但我得到这个警告
Runtime errors might occur when converting ‘mshtml.IHTMLDocument’ to
‘System.Windows.Forms.HtmlDocument’.
而当我忽略并运行时,出现此错误
Unable to cast COM object of type ‘mshtml.HTMLDocumentClass’ to class
type ‘System.Windows.Forms.HtmlDocument’. Instances of types that
represent COM components cannot be cast to types that do not represent
COM components; however they can be cast to interfaces as long as the
underlying COM component supports QueryInterface calls for the IID of
the interface.
编辑
一个示例javascript
<SCRIPT type=text/javascript>
(function(){
function runElemGen() {
var ElemGenForm = [{"label":"Email:","name":"ElemGen_email_field","oldName":"","value":"","ElemGen":"text"},{"label":"","name":"ElemGensubscribe","oldName":"","value":"Submit","ElemGen":"submit"}];
ElemGenBuildForm({makeDivs: true, arr:ElemGenForm, place:"ElemGen-email-form-"});
}
if (window.addEventListener) {
window.addEventListener("load", runElemGen, false);
} else {
window.attachEvent("onload", runElemGen);
}
})();
</SCRIPT>
有解决方案的人可以帮忙吗
解决方法:
编辑:以下解决方案修复了OP无法出于调试目的访问dom的问题. OP实际上需要解决文档未在WebBrowserControl中出现(或根本没有出现)的问题. WebBrowserControl是对同名ActiveX控件的重新打包,因此可能会使用当前安装的Internet Explorer版本.如果可能的话,我建议在有问题的计算机上启动IE并尝试呈现相同的文档,包括用于将文档加载到WebBrowserControl中的代码,这也有助于我们诊断问题.
我认为您需要以下方面的帮助:
if (webBrowser1.Document != null)
{
var currentDoc = (MSHTML.IHTMLDocument2)webBrowser1.Document.DomDocument;
return (currentDoc.lastModified);
}
您从IHTMLDocument到HtmlDocument的转换无效.
这是IHTMLDocument2属性和方法文档.
对此进行扩展,在上面的示例中,webBrowser1.Document是System.Windows.Forms.HtmlDocument.它的DomDocument属性是指向文档的非托管指针.仅当您在查找未显示在浏览器控件的托管Document属性中的文档属性时,才需要使用此属性.