我正在开发广告平台。当有人点击图片时,我想将请求发送回我的服务器以记录此操作。我有一个预先生成的URL。如果我向此网址发送请求,它会记录数据。
我的问题是日志网址在我的域中,而javascript正在客户端的域中执行。如果不修改日志记录php脚本(添加类似Access-Control-Allow-Origin:*的东西),有没有办法将此请求发送到新域?
由于我只记录数据,因此服务器只发送文本“OK”(这是我不需要的信息)。
答案 0 :(得分:2)
这是一个黑客,但它是常用的。单击时将图像附加到DOM,并将src设置为日志记录URL。为了友好,请将日志记录URL的输出设置为1x1像素图像。你必须通过GET字符串传递参数,但它会起作用。
答案 1 :(得分:2)
在您的域(图片或iframe)上创建包含源的任何动态DOM元素,将记录数据附加到请求。
var logData = function(data){
if(data === undefined){
return;
}
var img=document.createElement("img");
img.setAttribute('src', 'http://another.domain?'+data);
img.setAttribute('height', '1px');
img.setAttribute('width', '1px');
document.body.appendChild(img);}
您的日志请求现在将显示在IIS日志中
答案 2 :(得分:2)
您应该能够将Ajax HTTP请求发送到任何域。我没有看到问题是什么......这是响应受同源策略限制,而不是请求本身。如果域不匹配,则无法访问PHP脚本的响应,但服务器将正常处理请求,即使它来自不同的域。
答案 3 :(得分:0)
跨域脚本限制在浏览器级别实施,作为安全预防措施,因此没有简单的代码修复来解决它们。但是,您可以查看JSONP
(带填充的JSON)作为起点。
答案 4 :(得分:0)
您可以创建一个隐藏的iframe
,并将src
属性设置为日志记录网址。这至少与上面列出的图像方法一样难看。