TWebBrowser:从流加载HTML时设置referer标头

时间:2014-04-10 20:08:04

标签: javascript html delphi

我通过Delphi XE3中的TWebBrowser访问Google Maps API。

最初,TWebBrowser通过Navigate2加载到'about:blank'。然后,要呈现的HTML将在代码中动态生成,并通过流加载到TWebBrowser中。

只要我使用免费地图API,这一切都很好。要使用Maps for Business,API的请求必须来自预先注册的URL,Google根据GET请求中的referer标头确定“浏览器”在加载Javascript时通常会发送的URL。即使我在初始Navigate2调用中指定了referer头,当生成的HTML被加载和呈现并且TWebBrowser发送API Javascript的GET请求时,请求也不包含referer头,因此请求被拒绝。我确认没有使用Fiddler发送任何引用标头。

看起来TWebBrowser只在实际导航到URL时发送referer标头,而不是在发送GET请求时发送,就像从脚本元素加载API一样。

我无法使用Navigate2加载“网页”,因为没有服务器可以加载它。

有没有办法强制TWebBrowser在发出GET时包含特定的referer标头,当它从流中加载正在呈现的HTML时?经过几个小时的搜索,我没有找到任何方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

在将HTML动态加载到TWebBrowser之前,请修改HTML以将<base href="...">标记插入HTML <head>,以指明HTML最初来自的网址。然后,该URL用于解析相对URL,建立Referer等。