0

嗨,我想在远程包含的 nodejs 应用程序中访问客户端 JS 代码。很像谷歌分析。

<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,我想获取一些 ID。

如果我将它指向的不是我的节点应用程序而是一个静态 JS 文件,那很好,但我想将它和其他变量直接使用到 nodejs 中。

谢谢

4

1 回答 1

4

您混淆了事物的客户端和服务器端。

您引用的谷歌分析代码发生在客户端。(它最终会触发某种服务器端代码,但这无关紧要。)

您的 NodeJS 代码是服务器端的。您不能让服务器代码直接调用客户端代码、访问其变量等;你也不能反过来做。您必须向服务器发送信息(通过在 URL 中加载带有标识符的资源、通过ajax、使用web sockets等)并向客户端发送信息(通过响应 ajax 和其他请求、发送 web socket 消息等) .)。

因此,例如,您可以做一些几乎与 Google 分析一样的事情:

(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/script在您的example.com服务器上处理请求、接收data GET参数并对其进行处理。(这就是谷歌分析所做的,但比上述更间接。)

于 2013-02-28T16:59:10.547 回答