2013-02-28 99 views
0

您好我想訪問遠程包含在我的nodejs應用程序中的客戶端JS代碼。很像谷歌分析。訪問遠程nodejs應用程序中的窗口對象應用程序

<script type="text/javascript"> 
    var someID = 123456; 
    (function() { 
     var zx = document.createElement('script'); zx.type = 'text/javascript'; zx.async = true; 
     zx.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'example.com/'; 
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(zx, s); 
    })(); 
</script> 

在上面的場景中,包含的腳本是nodejs,我想獲得someID。

如果我指出它不是在我節點應用程序,但一個靜態的js文件是很好,但我想使用它和其他變量直接進入的NodeJS。

謝謝

回答

4

你混淆了客戶端和服務器端的東西。

的谷歌分析代碼,你引用所有發生的客戶端。 (它在它們的末端觸發某種類型的服務器端代碼,但這不相關。)

您的NodeJS代碼是服務器 -side。您不能讓服務器代碼直接調用客戶端代碼,訪問其變量等等;你也不能以相反的方式去做。你必須發送信息服務器(無論是通過與網址標識符加載資源,通過ajax,使用web sockets等),並給客戶發送信息(通過響應Ajax和其他請求,發送網絡套接字協議的消息,等等。)。

因此,舉例來說,你可以這樣做幾乎完全一樣是谷歌Analytics(分析)的功能:

(function() { 
    var someVariabletoPassToTheServer = "foo"; 
    var s = document.createElement('script'); 
    s.src = "//example.com/your/script?data=" + encodeURIComponent(someVariabletoPassToTheServer); 
    document.getElementsByTagName('script')[0].parentNode.appendChild(s); 
})(); 

你的NodeJS代碼可以處理請求/your/scriptexample.com服務器上,收到dataGET參數,並有所作爲用它。 (這是谷歌分析的做法,但一定程度上比上面更是間接的。)

+0

感謝T.J. - 這給了很多清晰!我想傳遞的數據是一個JSON對象。你會說socket.io似乎在這種情況下,最好的地方 - 它可以在querysting ... – 2013-02-28 18:06:08

+0

@BobMcgraw如果jQuery是可用的,你可能會考慮通過客戶端和服務器之間的物體用AJAX請求變得一團糟:$ .getJSON(」/URI /」,{FOO:巴,數據:數據},callbackFn) – Plato 2013-02-28 19:55:41

相關問題