情景:
用户访问http://some-site.test/form.html
。该页面包含一个表单:
<form action="http://example.com/search" method="post">
...
用户填写并提交表单。
操作http://example.com/search
执行搜索并显示结果,但仅如果Cookie已与表单数据一起发送:
ASP.NET_SessionId=...
换句话说:需要使用example.com
建立会话,否则搜索将无效。我不知道为什么会这样,我现在必须联系负责搜索的人。
作为解决方法,我在form.html
中添加了一个脚本标记:
<script src="http://example.com"></script>
令人惊讶的是,这有效:设置了Cookie ASP.NET_SessionId
。但是,这是一个丑陋的解决方案,因为脚本标记会导致加载完整的HTML页面,并且后果是不确定的。在Chrome中,后果是控制台中显示错误消息:
Uncaught SyntaxError: Unexpected token <
我的问题:
在提交表单之前是否有更好的解决方案来设置cookie?
到目前为止我还有什么考虑:
隐藏iframe
src="http://example.com"
。缺点:
有必要检测何时加载http://example.com
后面的页面,然后才能使表单可见。但是,据我所知,iframe
没有正式(W3C)支持onload
属性。尽管该属性在许多浏览器中仍然有效,但我已经读过它在IE&lt; = 8中不起作用。对于相关的load-event也是如此。
不仅仅会加载HTML,即CSS,图像等。这是浪费带宽,事实上已经加载HTML是不必要的。只需要设置cookie。
隐藏img
src="http://example.com"
。缺点:img
不会触发HTML内容的加载事件,至少在Chrome中是这样。