当我在页面上有多个 Like 按钮时,是不是可以防止多次加载同一个 JS/CSS 文件?

Posted

技术标签:

【中文标题】当我在页面上有多个 Like 按钮时,是不是可以防止多次加载同一个 JS/CSS 文件?【英文标题】:Is there anyway to prevent the same JS/CSS file from being loaded multiple times when I have multiple Like buttons on a page?当我在页面上有多个 Like 按钮时,是否可以防止多次加载同一个 JS/CSS 文件? 【发布时间】:2011-12-25 16:19:05 【问题描述】:

我有一个页面,上面有多个“喜欢”按钮,每个按钮指向不同的 URL。

不幸的是,每个“Like”按钮都请求一个 JS 和 CSS 脚本,并且页面上有许多“Like”按钮,相同的脚本被一遍又一遍地加载。

为了澄清,我正在使用 xfbml 并异步加载 JS-SDK,并且“connect.facebook.net/en_US/all.js”文件只被拉下一次。

我遇到问题的文件是:

http://static.ak.fbcdn.net/rsrc.php/v1/yw/r/2RZcOthJlDD.js http://static.ak.fbcdn.net/rsrc.php/v1/yx/r/QAxExOsrrUv.css

我认为这是因为每个插入的 <iframe> 元素都需要这些资源。

如果您查看http://techcrunch.com/,您会注意到他们通过懒惰地插入 Facebook/Twitter 等元素来规避这一点。但是,如果您将鼠标悬停在其中的几个上,您会注意到相同的 JS 和 CSS 位仍然会被多次加载而不必要地加载。

有没有人有一种解决方案,可以将这些文件中的每一个限制为每页一个请求,而不管上面有多少个“赞”按钮?

【问题讨论】:

第一个问题写得很好。欢迎使用 Stack Overflow! 【参考方案1】:

我认为,如果您使用 html5 代码,情况就不再如此了。你有一个基本代码,你只在一个页面上使用一次:

<div id="fb-root"></div>
<script>(function(d, s, id) 
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
(document, 'script', 'facebook-jssdk'));</script>

还有一些类似按钮、cmets 等的代码,比如这个,你可以在页面上使用 n 次:

<div class="fb-like" data-href="YOUR_URL" data-send="true" data-></div>

这应该只加载资源一次。

【讨论】:

以上是关于当我在页面上有多个 Like 按钮时,是不是可以防止多次加载同一个 JS/CSS 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用多个按钮?

当我在菜单外单击时如何隐藏多个 jQuery toggle()?

检查用户是不是点击了 Facebook Like 按钮(多个按钮)

一页上有多个MVCContrib网格

自定义简单的like按钮(不是facebook)

UIButton点击崩溃应用