【问题标题】:jQuery: any way to append variable to img without it loading twice?jQuery:有什么方法可以在不加载两次的情况下将变量附加到 img?
【发布时间】:2013-06-23 21:27:03
【问题描述】:

我试图通过让 img url 获得附加的 ?i 来调整这个 hotlink prevention method 仅当由支持 JavaScript 的浏览器而不是机器人访问时。

$(document).ready(function() 作品中使用它:

var img= $("img.myimg");
img.attr("src", img.attr("src")+"?i");

但是,它会导致 img 加载两次。

是否有任何其他方法可以为人类访问者附加不会导致双重加载的参数?澄清一下,我并不是说图片在页面上显示了两次,而是说随着 url 的变化,服务器会被点击两次。

【问题讨论】:

  • img 标签是什么样的?
  • 糟糕...应该是

标签: jquery performance hotlinking


【解决方案1】:

如果您希望图像不仅被加载一次,并且不会被机器人以最佳版本看到,那么您只能在 JQuery 中加载它,一次。然后slitcanvas的回答适用:

<img class="myimg" notthesrc="whatever.jpg" />

在 JQuery 中:

var img= $("img.myimg");
img.attr("src", img.attr("notthesrc")+"?i");

这样,图像不会以 HTML 格式加载,也不会由机器人加载。它仅由 JQuery 加载。

=========

如果您希望 Google 图片和其他机器人可以找到图片的一个版本,然后再找到一个不同的版本(更大、更好、没有版权声明或水印等),那么您将无法避免拥有两张图片:

<img class="myimg" src="whatever" />

在 JQuery 中:

var img= $("img.myimg");
img.attr("src", img.attr("src")+"?i");

其中“whatever”是返回机器人版本的 URL - 例如带有水印的低分辨率图像,“whatever?i”返回好的图像。

在这种情况下,会加载两个图像,第一个用于机器人。

【讨论】:

  • 另外,您可以继续加载图像两次,但先加载低分辨率版本,然后在 jquery 启动时加载正确的版本。这可能与您的热链接保护相关联?
  • 嗯,根据我链接到的文章,它不是高分辨率/低分辨率版本,而是有两个不同的 url(用于机器人和人类),因此 nginx 配置可以执行特定操作基于 URL 中是否存在“?i”的操作。
  • 我的一个 cmets 消失了。我的意思是问如果文件位置不在 HTML 中,jQuery 如何在您的版本中找到 img 的实际 src?我把它放在一个站点范围的 JavaScript 文件中,所以它需要将它附加到 myimg 类的所有 img 标签,所以把文件位置放在 JS 文件中不够通用。
  • 我已经更新了我的答案,将 URL 存储在一个额外的 HTML 属性中,该属性不会导致图像被加载但可以被引用。
  • slitcanvas 是对的,放入不同的属性,如 presrc 以便 JQuery 可以引用文件名。我编辑我的答案以考虑到这一点以及机器人和人的 2 个 URL。
【解决方案2】:

你不能:

<img class="dheimg" presrc="/location-of-file/name.jpg" src="" [height/width/alt] />

没有src标签,然后在页面加载后使用javascript添加它?

$(document).ready(function(){
    var img= $("img.myimg");
    img.attr("src", img.attr("presrc")+"?i");
}

我已更新我的答案,将路径存储在默认情况下不会加载图像的附加属性中。

【讨论】:

  • 谢谢。它摆脱了双重负载,但偶尔没有 JavaScript 运行的人不会看到图像,对吧?也许 jQuery 不是我的答案。一位与我交谈过的人建议运行 Varnish 并使用 vcl_recv 在为机器人提供服务时去掉 ?i。
  • 没错。最后,尽管谷歌图像索引是否比不支持 JavaScript 的浏览器的自定义损失造成更大的损害,但它变成了一个权衡练习。我认为在没有 javascript 的情况下,您将无法实现类似这样的客户端。另一种选择可能是使用 php/asp/asp.net 甚至 php/IIS 来验证请求的 url?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 2019-11-14
  • 2012-08-27
  • 2011-09-06
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多