代码之家  ›  专栏  ›  技术社区  ›  Wolph

javascript小部件(类似于Facebook)脚本与iframe方法

  •  4
  • Wolph  · 技术社区  · 14 年前

    当构建一个用于其他网站的社交书签按钮小部件时,存在一些挑战。我们最近刚刚开放了客户端方面的内容。(此处发布博客: http://www.mellowmorning.com/2010/08/03/creating-your-own-diggfacebook-liketweetmeme-button/ )

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

    有两种方法可以解决这个问题。 -用HTML替换a(脚本方法) -用iframe(iframe方法)替换a

    这些方法之间有相当复杂的差异。一个特别令人恼火的是脚本方法无法与弹出窗口通信。

    是否有人建议在登录弹出窗口和按钮之间进行通信的解决方案?(也就是说,当你通过弹出窗口喜欢某样东西的时候?,如何更新按钮上的计数,而不被相同的源站保护停止…)

    你推荐哪种方法?iframe或脚本,为什么?

    这些是我遇到的差异:iframe与script

    Iframe:

    • 可能弹出通讯 由于相同的源代码限制,脚本方法无法与它创建的弹出窗口通信。但是,iframe可以与弹出窗口属于同一域,并且可以自由通信。这在登录时提供了更好的用户体验。
    • 更容易开发 iframe方法更容易开发,需要的代码更少。
    • 在IE中并行下载 ie不会并行下载count脚本,但它会为iframes下载。使这种方法更快一些。
    • 独立CSS 如果使用iframe技术,外部站点不会干扰按钮的CSS。缺点是,它使诸如hovers之类的东西无法与其他站点集成。(例如Fashiolista_s Compact按钮)。
    • 独立的 iframe方法使得其他网站很难对用户进行喜欢/喜欢的游戏。使用脚本方法,一个外国网站可以简单地调用你的javascript来冒充喜欢这个产品的人。这种自由可以被滥用,但也允许混搭。

    脚本:

    • 慢速DOM负载 创建iframes需要花费更多的时间用于浏览器。
    • 较慢的感知负荷 脚本方法允许您在加载数据之前格式化按钮。极大地提高了感知的负载速度。
    • 没有共享功能 按钮可以共享功能。因此,当有人登录一个按钮时,不可能更新其他按钮。
    2 回复  |  直到 14 年前
        1
  •  4
  •   Sean Kinsey    14 年前

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

    您可以使用脚本钩住页面dom(为不同的使用提供了一点自由),并创建一个指向您的域的隐藏iframe。

    该脚本既可以与当前文档通信,也可以使用跨域消息传递与您的文档通信,然后使用iframe作为代理与弹出窗口通信。

    当然,xdm确实会带来一些困难,但是如果您使用像 easyXDM 那就没什么问题了。

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

        2
  •  2
  •   Thierry    14 年前

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

    感谢您提供弹出信息! 支持这些跨域弹出窗口的底层技术是什么?

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

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