【发布时间】:2011-06-29 08:21:52
【问题描述】:
我创建一个带有片段(又名锚点#)的 URI。
UriBuilder ub = new UriBuilder("file://path/doc.pdf");
ub.Fragment = "chapterX";
url 在调试器中正确显示 (ub -> file://path/doc.pdf#chapterX)。但是当我将它分配给 WebBrowser 控件时,片段部分会丢失(片段的原因请参阅PDF Open parameter)。
this._myWebBrowser.Url = ub.Uri;
// Alternative this._myWebBrowser.Navigate("file://path/doc.pdf#chapterX");
当我检查this._myWebBrowser.Url 时,它显示file://path/doc.pdf。 this._myWebBrowser.Url.Fragment 为空 - 也是只读的,无法分配。
正如 C.Haas 在下面显示的那样,这个概念通常是有效的,由于某些原因,当资源是 LOCAL(!) pdf 文件时它会失败。
总结:
- 在协议为 http 时有效
- 资源为 .htm / .html 时有效 - 即使协议为 file://
- 适用于文件为 .pdf 且协议为 http(与 1 相同)的情况。
- 如果引用本地 pdf 文件失败,片段会丢失
有什么解决方法吗?
修订:
- 20110219 - 感谢 C.Haas 更新。正如 Chris 所示,“.htm”可以,但“.pdf”失败,并且只有当它引用本地资源时。
- 20110218 - 感谢 abatishchev 的一些发现:如果我使用
Navigate它也不起作用,但Navigate提供了一个框架名称。在这种情况下,会弹出一个外部 IE(因为控件页面中没有框架),然后正确显示带有片段的 URL。不是我想要的,但它显示 URL 本身是正确的,并且错误似乎在控制范围内。
【问题讨论】:
-
我删除了 C# 和 Windows 窗体标签,因为导航(以及 URL 解析)是由 adobe 的 ActiveX 文档服务器中的超链接框架实现的。超链接框架提供部分文档显示、下载进度、取消能力等。更多关于webbrowser在ActiveX文档超链接中的作用,请查看msdn.microsoft.com/en-us/library/aa740928(v=VS.85).aspx
-
感谢您的反馈,但我认为它不正确。恕我直言,它是片段的底层 .net 类(很可能是 UriBuilder)切割。否则我会在 WebBrowser.Url 中看到完整的 URL - 还是我错了?我确实有这样的理论,即底层类提供了一些智能 - 认为资源是本地文件,因此忽略了片段。因为如果我使用不同的协议(不是 file://),片段仍然存在。所以这很可能是一个 .net(当然不是纯 c#)问题,而不是 ActiveX 控件的问题。
-
你是对的,这不是控件的问题,而是 Uri 类的问题。但由于它看起来是在控制和 Uri 类的组合中发生的,所以我用两者都标记了它。再次感谢您的反馈。
-
DocumentCompleted 中的最终 url 是什么?你得到 DocumentCompleted 了吗?
-
事件 DocumentCompleted 被调用,WebBrowserDocumentCompletedEventArgs.Url 没有片段(file://path/doc.pdf),而 navigation 被调用如下: Navigate(file://path/doc.pdf #chapterX)。
标签: .net pdf webbrowser-control parameter-passing acrobat