pinterest为网站设计的“pin it”按钮,显示在他们的好东西页面上,要求网页设计师在他们的网页中插入一个特别标记的锚标签。然后页面必须调用pinit.js 样板。
特殊的锚标记必须是这样的:
<a href="http://pinterest.com/pin/create/button/?
url=http%3A%2F%2Fpage%2Furl
&media=http%3A%2F%2Fimage%2Furl"
class="pin-it-button" count-layout="horizontal"></a>
并且 pinit.js 样板必须看起来像这样,并且必须放在最后一个 pin之后。
<script type="text/javascript" src="//assets.pinterest.com/js/pinit.js">
</script>
据我所知,pinit.js 代码的作用是:
- 扫描页面以查找锚标记
- 查找特殊标记,特别是“pin-it-button”类和 href 前缀
- 用重新格式化的 IFRAME 替换锚标记。这些 iframe的
src
属性获得了标准化的 URL,这些 URL 指向不同的服务器,而不是 pinterest.com,而是 pinterest 使用的 CDN 中的服务器。
这在静态网页上很好,但是:
- 它不适用于动态页面,其中“固定”按钮可能通过 jquery 逻辑动态生成并注入页面标记以响应用户操作。
- 每个“pin it”按钮需要一个 iframe,这意味着每个“pin it”按钮需要一个 HTTP GET。如果你有 10 张照片,每张都有一个 pinit 按钮,那么就有 10 个 HTTP GET 到 pinterest 的 CDN。所有这些 GET 都用于名称相似的资源,但它们都略有不同,基于要固定的图像的 url,因此无法缓存。
我想做的是消除过多的 GET。有任何想法吗?
我的一个想法是:
- 在样式为
display:none;
. - 调用 pinit.js,这会导致该锚标记的神奇替换,并加载新的 iframe。它是不可见的,因为它仍然驻留在不可见的 div 中。
- 运行一些额外的 JS 逻辑来检查生成的 iframe 的 src 属性上的 URL,保存 pinterest CDN 的主机名。
- ?
然后我可以为 pinterest CDN 生成“规范化”URL,但是......如果我只是将它们用作我的逻辑生成的 iframe 的 src ,那么我会遇到与过度 GET 相同的问题。我所做的只是消除了对 pinit.js 的连续调用(无论如何都是可缓存的)。
有没有人遇到过这种情况?
我必须相信这种设计会发生变化——它现在的工作方式对于 pinterest 来说似乎是不可扩展的。
编辑
我在别处读到,pinterest 为页面上的“固定”按钮提供了“异步”机制,适用于有很多“固定”按钮的情况。不知道那是什么;我找不到它。