0

我正在使用本机的非 .NET WebBrowser 控件向用户显示 HTML 页面或 XPS 文档。我愿意Navigate

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

据记录,它为托管文档WebBrowser.Document返回一个IDispatch。自然,我想获得这个属性并做类似的事情。Webbrowser1.Document.Parent.FitToWidth()

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

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

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

希望避免在浏览器范围内模拟双击。

4

1 回答 1

0

@GSery您是否尝试过从诸如 BeforeNavigate2 和 DocumentComplete 之类的事件中获取 pDisp 以便您可以使用 pDisp (以及事件传递的其他参数)来查看您还能用它做什么?

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

WB.Document.parentWindow.execScript sScript, sLanguage

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

此外,如果您使用 .NET 版本的 WB 控件,欢迎您使用 .InvokeScript 代替 .execScript(但两者都应该工作)。

此外,在解析父/框架窗口层次结构时,您可以在 WB.Document.parentWindow 下或在您正在执行的 JavaScript 中执行此操作,或者您可以使用您的 exe 应用程序代码和您的 javascript 代码混合匹配和解析文档层次结构。

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

于 2012-08-31T13:08:32.143 回答