我正在开发一个软件来验证将其从D5移植到XE5的问题。在D5中,每当用户单击显示表单的提交按钮时,都会调用TWebBrowser.BeforeNavigate2。在XE5中,情况并非如此。我发现这是因为提交的URL包含http:/aDirectory/ExecToBeCall.exe。如果我加了一个额外的/后面:事件是火。
在D5下,URL更改为:
http ://localhost/aDirectory/ExecToBeCall.exe (添加空间以中断帖子中的链接)
TWebBrowser在D5下的这种行为对软件来说是很重要的,我不能将HTML (大约2 000个文件)更改为包含2。它允许我们知道提交是在Delphi内部还是在外部浏览器上。我尝试了其他和更新的TWebBrowser事件,没有一个是火的。
如何通知我有问题的URL,检查它并将其更改为localhost URL?最好采用一种小而干净的方法。
谢谢你的帮助和建议
发布于 2014-03-05 19:47:09
TWebBrowser只是Internet的ActiveX对象的一个薄薄的包装器,所以IE本身,而不是TWebBrowser,有着不同的表现。
http:/aDirectory/ExecToBeCall.exe实际上是一个有效的URL。因为:后面没有//,所以URL中没有授权部分,因此没有显式的主机名。localhost用作隐式主机名,路径为/aDirectory/ExecToBeCall.exe。这就是在D5中将URL更改为的内容,这是正确的行为。将URL更改为http://aDirectory/ExecToBeCall.exe是不正确的,因为这会创建URL的授权部分,因此主机名显式地设置为aDirectory,路径设置为/ExecToBeCall.exe,这不是您想要的。
为什么网址在XE5中没有变化,我不知道。听起来像是TWebBrowser版本中使用的IE版本中的一个bug。
在任何情况下,触发事件的都是IE,所以如果它没有触发它不喜欢的URL,那么除了使用浏览器的DOM接口直接处理HTML的onsubmit事件之外,您什么也做不了。
https://stackoverflow.com/questions/22202103
复制相似问题