为什么MSHTML for .Net没有querySelector和querySelectorAll,或者它们在哪里?

Dan*_*ode 4 .net c# microsoft.mshtml

我想使用MSHTML [1]来访问IE中的DOM,但我刚刚发现它缺少HTML文档类中的querySelector和querySelectorAll方法,否则将非常有助于通过CSS选择器获取文档中的元素.

我现在能想到的唯一解决方法是通过执行脚本来完成所有操作,但这很糟糕.

是否有任何MSHTML版本有两个方法(querySelector和querySelectorAll)?是否有其他库(希望是Microsoft的官方.Net库),其中有两种方法或它们的等价物?

[1]%ProgramFiles(x86)%\ Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll

Han*_*ant 7

querySelector()方法和朋友们在MSHtml和IE DOM中都很活跃,问题在于大多数程序员在他们的机器上拥有的PIA已经过时了.在我的机器上注册的GAC上有一个7.0.3300.0版本号,可以追溯到2002年.

有一种解决方法,您可以生成自己的互操作库,并避免使用GAC中的互操作库.诀窍是通过创建没有强名称的互操作程序集来故意产生不匹配,因此它与GAC中的不匹配.请务必仅在VS2010或更高版本上执行此操作,您希望利用嵌入互操作类型功能.

启动Visual Studio命令提示符并导航到项目目录.并执行此命令:

  Tlbimp c:\windows\system32\mshtml.tlb
Run Code Online (Sandbox Code Playgroud)

它会拖延一段时间,类型库很大,并吐出几个你可以忽略的看起来很警觉的警告.返回VS,删除现有的MSHTML引用并使用Add Reference,Browse选项卡.选择由Tlbimp生成的MSHTML.dll文件.

我不能保证完全没有问题,你需要记住你的用户需要有一个最新版本的IE,最好是一个与你相匹配的版本.如果您在IE的旧版本没有的接口上使用某个方法,那么它将很快失败,可能会出现AccessViolationException.