【问题标题】:Query string being removed from Hyperlink URL (Interop)正在从超链接 URL 中删除的查询字符串(互操作)
【发布时间】:2017-03-07 02:23:27
【问题描述】:

我正在向包含查询字符串的文档添加超链接。

网址示例:https://www.website.com.au/paynow/ext?rn=555&amt=95.40

我像这样将它添加到文档中 -

Dim hyperlink As Word.Hyperlink = WordDocument.Hyperlinks.Add(Me.Range, URL, "", "", "Click me to visit the website")

这会打开网站并忽略传入的查询字符串(基本上运行https://www.website.com.au

如果我直接复制超链接链接(打开文档,右键单击超链接并选择“复制链接”),然后打开浏览器并粘贴它——> url 正确加载,使用了查询字符串。

我已经通过 fiddler 进行了检查,似乎文档加载项正在使用返回的最终重定向 URL。从阅读来看,这似乎也可能是 Office 产品的一个已知问题?

另外 - 如果我(以编程方式)采用我添加到超链接的相同 URL 并将其添加到 Process.Start("URL"),它加载得非常好。

[我什至尝试对 URL 进行编码 - 没有区别]。

有什么想法,在这里开始发疯了吗?

提前致谢。

【问题讨论】:

  • 你能添加你的 Fiddler 痕迹吗? Word 通常会向 URL 本身发出第一个请求,以检查 URL 是否指向 Word 文档(如果是,则下载并打开该文档)。只有在那之后,URL(或者可能是重定向的 URL?--> Fiddler 会告诉你)被传递给 ShellExecute,然后在默认浏览器中打开 URL。在您的情况下,也可能是 HTTP 请求缺少身份验证 cookie,然后您只需重定向到开始/登录页面。
  • @Dirk Vollmar 跟踪中没有太多帮助,word 确实会进行第一次调用并返回一个重定向的 url,它不包含查询字符串,因为这些值被使用过一次并被隐藏从网址。我想知道是否有任何其他方法可以解决似乎是超链接对象的限制。或者也许告诉 word 不要先检查并加载页面。

标签: hyperlink ms-word interop ms-office vsto


【解决方案1】:

原因是 Word 的默认行为,它首先检查 URL 是否指向 Word 文档(如果是,则下载并打开该文档)。

adding the following Registry key 可以更改此行为(相应替换 Office 版本):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
    Office\15.0\Common\Internet\ForceShellExecute:DWORD=1

更多信息可以在这里找到:

【讨论】:

  • 谢谢你,我在其他几篇文章中看到过这个建议,但我真的希望避免注册...我会试试看,但我真的希望无需 reg hack 即可修复。
  • 所以我尝试使用此解决方案,无论是手动添加 reg 密钥还是运行 microsoft“修复” - 它仍然无法解决问题。即使使用 reg 键,超链接仍会打开丢失查询字符串的 URL。
  • 好的,似乎经过一些调试和一两次重新启动后,我设法让 reg 关键思想工作但 - 仅供参考 --> 它对 Office\VERSION 编号没有影响,并且密钥有插入到以下路径:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\9.0\Common\Internet(基本上按照这个页面):support.microsoft.com/en-us/kb/218153
  • 它不适用于 Chrome 作为默认浏览器。我需要将 Internet Explorer 设置为默认用户。 掌心
猜你喜欢
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2011-03-28
  • 2010-11-10
相关资源
最近更新 更多