Vba 当内容为XPS时,如何使用Webbrowser.Document属性?

Vba 当内容为XPS时,如何使用Webbrowser.Document属性?,vba,webbrowser-control,domdocument,xps,Vba,Webbrowser Control,Domdocument,Xps,我使用本机的非.NET WebBrowser控件向用户显示HTML页面或XPS文档。我只需导航到其中一个 我对HTML部分很满意,但是XPS文档通常不适合浏览器的范围。我想按宽度来配它。如果我双击内容,就会发生这种情况,但我希望在加载文档时以编程方式执行 这就是WebBrowser.Document返回托管文档的IDispatch。当然,我想获得这个属性并执行类似于Webbrowser1.Document.Parent.的操作 问题是,我无法计算返回的IDispatch实际有哪些方法以及如何使用

我使用本机的非.NET WebBrowser控件向用户显示HTML页面或XPS文档。我只需导航到其中一个

我对HTML部分很满意,但是XPS文档通常不适合浏览器的范围。我想按宽度来配它。如果我双击内容,就会发生这种情况,但我希望在加载文档时以编程方式执行

这就是
WebBrowser.Document
返回托管文档的
IDispatch
。当然,我想获得这个属性并执行类似于
Webbrowser1.Document.Parent.
的操作

问题是,我无法计算返回的
IDispatch
实际有哪些方法以及如何使用它。
我试图用
TypeLib Info
获取类/接口信息,但运气不好,对象不支持该信息。
我尝试了一些常用属性,例如
Name
Parent
,它们似乎也不存在。
我假设它可能类似于
DocumentViewer
,但同样,“对象不支持此操作。”

那么,当内容为XPS时,如何使用Webbrowser.Document属性?

(顺便说一句,这个错误很奇怪。在VBA世界中,它应该是“对象不支持此属性或方法”,但事实上是“对象不支持此操作”。是webbrowser阻止我使用该文档(因为,比方说,它对脚本编写不安全)?)


希望避免在浏览器边界内模拟双击。

@GSery您是否尝试过从BeforeNavigate2和DocumentComplete等事件获取pDisp,以便您可以使用pDisp(以及事件传入的其他参数)来查看您还可以对其做些什么

当然,WBControl.Document提供了.Width和.Height属性,我相信您已经尝试过这些属性,如果没有尝试过,请尝试一下。另一种选择是在文档窗口中运行javascript。像这样(WB是你的WebBrowser控件名),sScript是你的javascript文件,用来改变window.height和window.width,每一行新的js代码都可以用;一行可以包含多行,以;分隔;。此外,俚语必须设置为等于“JScript”,您就可以开始了

WB.Document.parentWindow.execScript sScript, sLanguage
否则,我们可以使用另一个技巧,在主/父文档内的iframe中加载.XPS,并在由父/主文档承载的HTML中设置iframe的宽度。这将强制XPS正常工作,当然,您也可以在主/父文档上运行.execScript(javascript行od代码)(并从那里访问框架)

此外,如果您使用的是.NET版本的操作系统WB控件,则欢迎您使用.InvokeScript代替.execScript(但两者都可以使用)

此外,在解析父/帧窗口继承权限时,可以在WB.Document.parentWindow下执行,也可以在正在执行的JavaScript中执行,或者可以使用exe应用程序代码和JavaScript代码混合、匹配和解析文档层次结构


让我知道你是如何相处的,如果有什么我可以帮忙的。

我怀疑发生的事情是WebBrowser控件正在托管xpsviewer浏览器插件,而不是以本机方式显示xps。@Jon这是否给浏览器留下了发送命令的机会?如果你能找到该插件的api引用,这可能是可能的,但这将是脆弱的,可能会在较新版本的windows上出现故障。能够在IE中直接查看XPS文档只是一个暂时的解决方案——我不认为该插件是在较新的安装上发布的。对不起,但这些都没有意义。XPS文档由XPS查看器显示,该查看器在webbrowser中加载,而不是HTML文档。没有父文档,没有HTML DOM模型,没有iFrame,没有地方执行脚本,.width和.height属性都是无用的,因为它们总是等于控件的大小。即使有一个地方可以执行脚本,我的问题仍然是托管XPS查看器有哪些方法。我不知道它们的名字,所以我不能从脚本或其他东西中调用它们。@GSerg我理解你的意思,但我的建议之一是,如果你创建了一个父HTML文档,其中包含一个iframe标记,其src属性指向你的XPS文档,我感觉XPS文档将加载到HTML父文档中,您可以从父HTML文档执行脚本,包括更改iframe宽度,甚至在编写iframe HTML标记时设置iframe宽度。我认为这是一个现实的工作机会,因为XPS查看器不太可能尝试劫持整个父HTML。