4

相关:如何重新渲染 Pinterest 的 Pin It 按钮?


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 为页面上的“固定”按钮提供了“异步”机制,适用于有很多“固定”按钮的情况。不知道那是什么;我找不到它。

4

1 回答 1

3

我正在回答我自己的问题。

我查看了但无法从 pinterest 找到任何详细的文档来描述如何解决这个问题。我认为他们的 API 太新,太不成熟,无法涵盖这一点。

我发现的问题是,对于每个“固定”按钮,都有一个 IFRAME,并且 iframe 从 pinterest CDN 加载源。10 张图片意味着 10 个 iframe 和 10 个 HTTP GET。

我确实找到了一种在网页上插入单个按钮的方法,该按钮允许用户固定 10 个图像中的任何一个。这是通过pinterest 提供的 pinmarklet.js 脚本实现的。但是,那个脚本对我不起作用,而且它有几个错误,所以我修改了它以适应我的目的。

现在,当我单击“固定”按钮时,它只填充一个 IFRAME,只需要一个 HTTP GET,无论页面上有多少照片可用。用户界面如下所示:

在此处输入图像描述

...虽然你可以把它做成任何你喜欢的东西,我猜。

我解决了什么问题?

pinmarklet 是

(a) 笨拙的。它定义了一个匿名脚本,页面每次需要弹出 pinterest 交互表单时都需要重新请求 JS。没必要。让我们做一次。

(b) 破碎。有几个错误,包括代码中试图确定图像自然大小的竞争条件。由于那个错误,pinmarklet 表单有时不会显示。瘸!

我修改了代码来修复这些问题,现在它运行良好,对我来说。

http://pastebin.com/y5fBRJHc

于 2012-03-26T01:30:02.927 回答