【问题标题】:Subscribe to javascript event in an iframe (facebook)在 iframe (facebook) 中订阅 javascript 事件
【发布时间】:2010-10-13 12:33:37
【问题描述】:

我有一个应用程序,我将 iframe 用于 facebook likebox。

我想在主页中订阅用户点击 iframe 中的点赞按钮时的事件。

基本上只要用户喜欢我希望他被重定向到我将指定的页面的页面。

我可以使用什么 javascript 命令?

谢谢

【问题讨论】:

    标签: javascript facebook iframe


    【解决方案1】:

    除非您的父文档与 Facebook Like 框架位于同一个域中,否则出于安全原因,您根本无法在其中编写脚本。这是同源策略。它不仅可以防止您检测到点击,还可以防止冒充用户,迫使他们在未经他们同意的情况下执行操作(例如喜欢您)。

    您可以尝试在框架顶部放置一个元素来检测点击,但通过拦截点击也可以阻止它通过框架。您能做的最好的事情是检测鼠标悬停在 Like 按钮区域上并移除覆盖元素,允许用户单击。这并不可靠,因为它会捕获所有鼠标悬停。

    【讨论】:

    • 如果通过文件协议访问父文档(例如移动设备中的 index.html)会怎样?还是跨域吗?可以做到吗?谢谢
    • 是的,这仍然是跨域的,不,它不起作用。在 IE only 中,有一个问题:您可以在 My Computer Zone 中从 file:/// URL 执行不安全的跨域 XMLHttpRequest。您可以使用跨域 XHR 在您自己的页面上重新创建按钮,并通过发布 Facebook 自己的脚本会执行的任何交互来伪造与它的交互。 (这就是它不安全的原因。)然而,要让它工作需要大量的脚本,这是一个痛苦的脚本,默认情况下在我的电脑中禁用脚本(用户必须故意从信息栏中启用它)。用处不大。
    • 嗯...我想我明白你的意思了。只是为了确保在移动案例中:如果我们有一个带有 iframe 的 .html(在移动设备中)加载一个由我们控制的域,并且从这里(儿子)我们调用在父级(本地 .html)中定义的 JS 函数由于跨域政策,我们将无法做到这一点?甚至没有解决这个问题的任何机制?谢谢你的解释!
    • 不,同源策略是网络的基本组成部分,如果没有普通网页不具备的特殊权限,您将无法避免。
    • 不,事实上,您为位于不同主机名上的子框架获得的window 对象是一个极其有限的版本,它不允许您访问document。
    【解决方案2】:

    你可以把它连接到按钮上

    onclick = "window.location('www.google.com')"
    

    显然将 URL 替换为您的 URL。但您可能想检查这是否合法。

    【讨论】:

    • 我可以在不破坏按钮的情况下使用它吗?我不想替换之类的,我只想另外触发重定向
    • 试试看。如果不起作用,请尝试订阅 like 事件(查看:developers.facebook.com/docs/reference/javascript/…)
    • 订阅like事件不起作用,这就是为什么我问如果like按钮在iframe中,而不是在fbml中,是否有什么特别的事情要做
    • 没有检测到类似的情况。不知道是不是还有什么问题,因为我也不能加xfbml likebox
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多