Javascript小部件(类似于Facebook Like)脚本与Iframe方法

时间:2010-08-04 16:16:32

标签: javascript iframe cross-domain jsonp

在构建社交书签按钮小部件以供在其他网站中使用时,存在一些挑战。我们最近刚开放了客户端方面。 (博客文章:http://www.mellowmorning.com/2010/08/03/creating-your-own-diggfacebook-liketweetmeme-button/

基本上,目标是替换所选元素 爱它 用一个按钮显示有多少人喜欢它。

这有两种方法。 - 用html替换A(脚本方法) - 用iframe(iframe方法)替换A

这些方法之间存在相当复杂的差异。一个特别令人讨厌的是脚本方法无法与其弹出窗口进行通信。

任何人都可以建议在登录弹出窗口和按钮之间进行通信的解决方法。 (IE。当你通过弹出窗口喜欢某些东西?时,你如何更新按钮上的计数,而不是被相同的原始保护所阻止..)

您推荐哪种方法。 iframe或脚本以及为什么?

这些是我遇到的差异:Iframe与脚本

I帧:

  • 可以弹出通信 由于相同的原始限制,脚本方法无法与其创建的弹出窗口进行通信。然而,iframe可以与弹出窗口具有相同的域并且可以自由地进行通信。这样可以在登录时提供更好的用户体验。
  • 更容易开发 iframe方法更容易开发,需要更少的代码。
  • 在IE中并行下载 IE不会并行下载计数脚本,但它会为IFRAME执行此操作。使这种方法更快一些。
  • 独立CSS 如果您使用iframe技术,外部网站不会干扰您的按钮的CSS。缺点是它使得像悬停的东西不可能与其他站点集成。 (例如Fashiolista的紧凑按钮)。
  • 独立 iframe方法使得其他网站很难对用户进行游戏,例如/喜欢行动。使用脚本方法,外国网站可以简单地调用您的javascript来伪造爱好产品的人。这种自由可以被滥用,但也允许mashup。

脚本:

  • dom负载较慢 创建iframe会为浏览器花费更多时间。
  • 感知负载较慢 脚本方法允许您在加载数据之前格式化按钮。大大增加了感知的负载速度。
  • 没有共享功能 按钮无法共享功能。因此,当有人登录一个按钮时,无法更新其他按钮。

2 个答案:

答案 0 :(得分:4)

当然还有第三个选项,它是iframe和脚本方法之间的混合。

您可以使用脚本挂钩到DOM页面(提供关于不同用途的自由掠夺),以及创建指向您的域的隐藏iframe。

该脚本既可以与当前文档进行通信,也可以使用跨域消息进行通信,然后使用iframe作为代理与弹出进行通信。

当然,XDM确实会带来一些困难,但是如果你使用像easyXDM这样的经过验证的解决方案,那么这应该不是什么大问题。

Here is an example显示了如何与弹出窗口进行交互。

答案 1 :(得分:2)

基本上是2个问题 - 哪种方法最好 - 脚本方法面临的弹出通信困难的解决方法

感谢弹出信息! 支持这些跨域弹出窗口的基础技术是什么?

如果我理解你的第三个选项: - 外国网站加载我们的js - js替换dom元素 - js打开隐藏的iframe到自己的域

然后我如何打开一个仍然允许与我们加载到国外网站的js进行通信的弹出窗口?为此,弹出窗口需要由iframe实例化吗?我们需要一种与iframe通信的方法。我想我不允许对iframe做任何事情,除了设置它的window.location.href。你能解释一下它是如何工作的吗?