3

我正在通过创建图像标签并将其注入 DOM 来在 javascript 中创建像素图像。

标签看起来像这样:

<img style="height:0;visibility:hidden;display:none;" src="http://xyz.com/pixel.aspx">

正如你所看到的,这个标签实际上会调用一个 ASP.Net 页面,它会做一些处理并写回一个像素,如下所示:

byte[] _imgbytes = Convert.FromBase64String("R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==");
Response.ContentType = "image/gif";
Response.AppendHeader("Content-Length", _imgbytes.Length.ToString());
Response.Cache.SetLastModified(DateTime.Now);
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.BinaryWrite(_imgbytes);

我需要的是一种将一小段数据(在像素请求之前在 javascript 中生成的 GUID 值)传递到服务器或将一些数据(在像素 aspx 代码中生成的不同 GUID)传递回浏览器的方法一种可以被javascript获取的方式。

注意事项:

  1. 不能使用查询字符串,因为像素需要可缓存,如果查询字符串不同,则在后续请求中不会从浏览器缓存中提取像素(文件名将不同)。
  2. 无法使用 cookie,像素请求与应用程序位于不同的根域上,并且在禁用第三方 cookie 的情况下需要此功能。
  3. 不能使用AJAX,因为不想担心跨域问题
4

2 回答 2

0

使用http://xyz.com/pixel.aspx/your-guid-here. 然后只需配置您的网络服务器和/或应用程序,这样就不会导致 404 错误,而是执行您的 aspx 代码。

于 2012-08-09T22:05:36.390 回答
0

我自己解决了这个问题。

我没有使用图像,而是使用远程脚本请求。所以我注入的标签是这样的:

<script async src="http://xyz.com/tracking.aspx"></script>

然后,在我的 aspx 中,我有以下内容:

string script = "(function(){Complete('" + guidValue + "');})();";

Response.ContentType = "application/javascript";
Response.Cache.SetLastModified(DateTime.Now);
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Write(script);

当响应返回到浏览器时,该Complete方法(位于页面已加载的 javascript 文件中)使用我的 guid 参数执行。这使我的页面可以完全访问 guid。

此外,由于请求 URL 永远不会更改,因此脚本会被浏览器正确缓存。

瞧。

于 2012-08-10T21:34:28.720 回答