簡體   English   中英

需要異步地將數據從一個網站發送到另一個網站

[英]Need to send data from one website to another asynchronously

我的腳本跟蹤客戶端頁面上的點擊並將其上傳到我的服務器(讓我們稱之為.http://fancyclickserver23.net)

現在我希望客戶端在他的網站上放置一個腳本,這個腳本將標記頁面上的點擊,並在頁面休假或甚至不時發送數據到.http://fancyclickserver23.net。

我不能使用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(),為什么不把它放在一個字符串中呢?

所以這兩個問題是:

  1. 如何在頁面加載時異步(或其他)發送數據?
  2. 上面的代碼是做什么的?
  3. 我見過Google分析和Facebook這樣做,他們似乎沒有任何問題。 Facebook infact在屏幕上呈現對話框。 怎么樣?

采用 :

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

並從其他服務器放入

盡管存在跨域安全限制,但您仍可以在某種程度上使用AJAX(XHR)。

瀏覽器無法像這樣刪除跨域請求。 它必須先看看服務器對它的看法。 它通過將實際請求發送到服務器並接收指令以及HTTP頭中的響應來完成此操作。 如果Access-Control-Allow-Origin標頭未到達或與原始域不匹配,則瀏覽器會刪除響應並在控制台中拋出安全警告。

從我個人的經驗, Access-Control-Allow-Origin頁眉或沒有,當現場aaa.com發送AJAX請求網站bbb.com交付單向數據有效載荷的服務器發生反正。 這只是一個獨白,但更需要收集數據,對吧? ;)

我舉個例子,對於利用類似你們的東西單向技術-我收集的JSON報告單元測試我的開源項目的成果在這里 您可以在控制台中發現安全警告,但此時報告已經安全地存儲在服務器上。

如果您可以將點擊數據數組轉換為查詢字符串,則可以執行以下操作:

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

傳播這些東西是不好的形式?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM