【问题标题】:Creating a tweet button without opening a new window在不打开新窗口的情况下创建推文按钮
【发布时间】:2012-08-05 10:53:19
【问题描述】:

我希望在网站上添加“tweet this”按钮。很简单,对吧?问题是该站点旨在运行在不特别处理弹出窗口的嵌入式平台上,因此我正在尝试在页面内完成所有操作。

我能够成功地创建我的推文按钮,将 onClick 处理程序附加到它,并为相关内容构建适当的 twitter.com/share URL。当我使用 window.open 在新窗口中打开该 URL 时,一切正常。但是,如果我尝试在 iframe 中打开 URL,则框架内不会加载任何内容。即使将http://twitter.com 加载到 iframe 中也会以同样的方式失败。但是,加载谷歌或任何其他网站似乎工作得很好。

对我在这里缺少的东西有什么想法吗?谢谢! --zach

编辑: 是的,他们正在检测加载时的 iframe 并空白页面:

if (window.top !== window.self) {
    document.write = "";
    window.top.location = window.self.location; 
    setTimeout(function(){ document.body.innerHTML='';},1);
    window.self.onload=function(evt){document.body.innerHTML='';};

}

有什么合理的方法可以解决这个问题,还是我坚持通过 oauth 编写自己的身份验证管道?我不需要他们的 API 中的任何内容,只需让用户将推文发送到他们自己的帐户即可。

【问题讨论】:

    标签: javascript jquery iframe twitter


    【解决方案1】:

    Twitter(如 Stack Overflow)可能正在使用一些 Javascript 来确保它们不会出现在 iFrame 中:

    if(top!=self){
         //hates you
    }
    

    我最近遇到了类似的事情,最终在没有 iFrame 元素的情况下重新执行了我的应用程序的一部分。

    【讨论】:

      【解决方案2】:

      去 twitter 上获取一个开发者帐户,事情对你来说很容易:)

      【讨论】:

        【解决方案3】:

        你能简单地重定向 twitter 分享 URL 吗?我猜他们想在 iframe 中打开窗口时要小心,以防止恶意网站在用户帐户中发布推文,而无需让用户有机会首先确认他们发送此推文的意图。

        【讨论】:

          【解决方案4】:

          您说 window.open 可以很好地在新窗口中弹出 url,但是您是否尝试过将其弹出到父框架中?

          twtWindow=window.open([url],'_parent',[specs])
          

          【讨论】:

            【解决方案5】:

            @yuval 对你来说不幸的是,twitter url 转到的页面在响应中设置了 X-FRAME-OPTIONS:SAMEORIGIN 标头。这不是 Javascript 检查。浏览器在看到标题后将简单地拒绝呈现页面。这样做是为了防止clickjacking 攻击,通常是为了窃取用户的密码。

            因此,您唯一的其他选择实际上是使用 window.location.href=url 重定向当前页面。

            【讨论】:

              猜你喜欢
              • 2010-10-09
              • 2020-01-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-06-14
              • 2019-12-10
              • 2020-12-13
              • 2010-12-09
              相关资源
              最近更新 更多