需要将数据从一个网站异步发送到另一个网站

Need to send data from one website to another asynchronously

本文关键字:网站 异步 一个 另一个 数据      更新时间:2023-09-26

我的脚本跟踪客户端页面上的点击,并将其上传到我的服务器(我们称之为它)。http://fancyclickserver23.net)

现在我希望客户在他的网站上放一个脚本,这个脚本会标记页面上的点击并将数据发送到。http://fancyclickserver23.net在页面离开,甚至可能不时。

当然,由于跨浏览器的限制,我不能使用Ajax。那么我该怎么做呢?我将给出一个小的假设代码来帮助您理解。我有一个关闭跟踪器,当用户放入时加载

<script src="http://fancyclickserver23.net/loadtracker.php?client_id=2332"></script>

该代码加载闭包tracker=function(){…};用户需要创建跟踪器的对象

<script>
track=new tracker();
track.init();
</script>

track.init()基本上绑定了一个函数,该函数获取元素的Xpath并将其存储在track.clicks中。现在我需要一个函数track.send(),它会将clicks数组作为json发送(我知道如何将其转换为json),并在页面关闭时发送。

我该怎么做。我也看到一些网站使用类似的东西:

 document.write("<sc"+"ript"+" src='https://fancyclickserver23.net/loadtracker.php?client_id=2332'"+"></scr"+"ipt>";

为什么要这样做而不是直接的脚本标记?如果我们必须使用document.write(),为什么不把它放在一个字符串中呢。

所以两个问题是:

  1. 如何在页面加载时异步(或以其他方式)发送数据
  2. 上面的代码是做什么的
  3. 我见过谷歌分析和脸书这样做,他们似乎没有任何问题。Facebook实际上会在屏幕上呈现对话框。如何

尽管存在跨域安全限制,但在一定程度上您仍然可以使用AJAX(XHR)。

浏览器不能像那样丢弃跨域请求。它必须先看看服务器对它的看法。它通过将实际请求发送到服务器并接收HTTP头中的指令和响应来实现这一点。如果Access-Control-Allow-Origin标头未到达或与原始域不匹配,浏览器会破坏响应并在控制台中发出安全警告。

根据我的个人经验,无论是否为Access-Control-Allow-Origin标头,当站点aaa.com向站点bbb.com

I、 例如,将单向技术用于与您类似的事情——我在这里收集我的开源项目的单元测试结果的JSON报告。您可以在控制台中发现安全警告,但此时报告已安全存储在服务器上。

使用:

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");

并且从另一个服务器放入

如果您可以将点击数据数组转换为查询字符串,则可以执行以下操作:

var img = new Image(1,1);
img.src = "http://example.com/clicks-receiver?" + query_string;

您可以使用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>"}

难道不能使用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

传播这种东西是不是不好?