我的脚本跟踪客户端页面上的点击并将其上传到我的服务器(让我们称之为.http://fancyclickserver23.net)
现在我希望客户端在他的网站上放置一个脚本,这个脚本会标记页面上的点击,并在页面休假或甚至不时发送数据到.http://fancyclickserver23.net。 / p>
由于跨浏览器限制,我无法使用Ajax。那我该怎么做? 我会给出一些假设的代码来帮助你理解。 我有一个闭包跟踪器,在用户输入
时加载<script src="http://fancyclickserver23.net/loadtracker.php?client_id=2332"></script>
代码加载闭包跟踪器= function(){....}; 用户需要创建跟踪器对象
<script>
track=new tracker();
track.init();
</script>
track.init()基本上绑定一个获取元素Xpath并将其存储在track.clicks中的函数。现在我需要一个函数track.send(),它将点击数组作为json发送(我知道如何将它转换为json)并在页面关闭时发送它。
我该怎么做我也看到一些网站使用类似的东西:
document.write("<sc"+"ript"+" src='https://fancyclickserver23.net/loadtracker.php?client_id=2332'"+"></scr"+"ipt>";
为什么要这样做而不是直接的脚本标记?如果我们必须使用document.write(),为什么不将它放在一个字符串中。
所以这两个问题是:
答案 0 :(得分:3)
使用:
function sendData( data ){
var scr = document.getElementById("scriptExchange");
if(typeof scr == "undefined"){
var scr=document.createEelement("script");
scr.id="scriptExchange";
document.body.appendChild(scr);
scr = document.getElementById("scriptExchange");
}
scr.src = "http://another-website.com/?query="+data;
}
每当你想发送数据时,都要调用这个功能。 。
现在在另一台服务器上设置对纯JS代码的响应,例如。
alert("Data Received");
并从其他服务器中放入
答案 1 :(得分:3)
尽管存在跨域安全限制,您仍可以在某种程度上使用AJAX(XHR)。
浏览器无法像这样删除跨域请求。它必须先看看服务器对它的看法。它通过将实际请求发送到服务器并接收指令以及HTTP头中的响应来完成此操作。如果Access-Control-Allow-Origin
标头未到达或与原始域不匹配,浏览器会删除响应并在控制台中抛出安全警告。
根据我的个人经验,Access-Control-Allow-Origin
标题,当网站 aaa.com 向网站 bbb.com 发送AJAX请求时单向投放无论如何,数据有效负载发生在服务器上。这只是一个独白,但更需要收集数据,对吧? ;)
答案 2 :(得分:1)
如果您可以将点击数据数组转换为查询字符串,则可以执行以下操作:
var img = new Image(1,1);
img.src = "http://example.com/clicks-receiver?" + query_string;
答案 3 :(得分:1)
您可以使用jQuery和jsonP来实现此目的。
1)进行Ajax调用如下:
var url = your_other_domain_url + "jsoncallback=?";
var params = {param1:val1, param2:val2};
$.ajax({
type: 'POST',
url: url,
data: params,
success: function(data){
//success jsonp handler - assume content in data.response
if(data.response){
//do something with the remote site content
}
},
dataType: "json"
});
2)在服务器端,跟踪任何具有参数'jsoncallback'的请求,并将响应放在json返回对象中,如
{status: 'success', response: "<html>.....resposne conent...</html>"}
答案 4 :(得分:0)
是否可以使用iframe。父级可以看到iframe,iframe可以将脚本运行回另一台服务器而不会跳过一堆篮球。我相信我们的omniture实现使用了这种方法。
如上所述的img方法也是一种潜力。
关于它的旧文章:
http://www.codecouch.com/2008/10/cross-site-scripting-xss-using-iframes/
或其他
http://blog.kotowicz.net/2010/11/xss-track-how-to-quietly-track-whole.html
传播这些东西是不好的形式?