2012-01-02 78 views
1

我想把跟蹤像素放在第三方html文件上,這會調用一個將返回javascript的servlet。這個JavaScript應該從本地存儲中獲取一個值並將其報告給其他servlet。例如:跟蹤像素是否可以從遠程服務器執行javascript?

追蹤像素:

<img src="http://myserver.com/report" width="1" height="1"> 

報告servlet將返回以下的javascript:

var value= localStorage.getItem("myLocalStorageKey"); 
var serverUrl = "www.myserver.com/myservlet?value=" + value; 
var xmlHttp = new XMLHttpRequest(); 
xmlHttp.open("GET", serverUrl, true); 
xmlHttp.send(""); 

這不起作用,因爲src屬性不指望處理JavaScript。 有什麼辦法可以做到這一點? 如果JavaScript將從第三方html頁面調用,它將無法從本地存儲獲取值,因爲該值是從「myserver.com」域輸入的,而不是從第三方域輸入的。

任何想法???

感謝, 達尼

+0

相同來源的安全策略旨在完全停止您正在做的事 - 其他域窺探本地屬性,這些屬性不應該可用於其他域。 – jfriend00 2012-01-02 15:31:41

回答

3

它不會工作,期限。 Javascrsipt對xmlhttprequests有一個「相同來源」的安全策略。該腳本的來源將是您的服務器,因此除了您的服務器之外,它不能與任何其他服務器聯繫。

你可以圍繞它讓有些使用JSONP來代替,該動態創建/插入一個全<script>...</script>標籤/代碼設置到頁面的DOM,但此時你還是堅持了,你通過<img>加載這個事實標籤,它不會執行代碼。

相反,考慮做這樣的事情

<script type="text/javascript" src="http://yourserver/track_me.js"></script> 

,服務了JSONP創造的代碼與腳本。

+0

如果他能控制跟蹤像素的注入方式,他可以改爲插入script標籤。 – 2012-01-02 15:33:08

+0

如果我使用src =「http://yourserver/track_me.js」調用腳本, 是JavaScript將在「yourserver」域還是在html頁的域上運行? 換句話說,javascript能夠從「yourserver」域輸入的本地存儲中檢索值? – user686098 2012-01-02 15:35:22

+0

JS始終在本地運行,但具有源服務器的權限。如果你從你的服務器加載js,那麼它可以對源自服務器的東西做任何事情。如果它是從其他服務器加載的,那麼它根本無法觸及服務器上的東西。 – 2012-01-02 15:36:44

相關問題