在不打开新窗口的情况下创建推文按钮

时间:2010-12-13 17:33:49

标签: javascript jquery iframe twitter

我正在寻找添加"推文这个"按钮到一个网站。很简单吧?问题是该网站是在一个不特别处理弹出窗口的嵌入式平台上运行的,所以我试图在页面内做所有事情。

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

对我在这里失踪的事情有任何想法?谢谢! --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而无法编写自己的auth管道?我不需要API中的任何内容,只需让用户通过自己的帐户发送推文。

5 个答案:

答案 0 :(得分:10)

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

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

我最近碰到了类似的东西,最后在没有iFrame元素的情况下重新做了部分应用程序。

答案 1 :(得分:2)

去Twitter上获取开发者帐户,让事情变得简单:)

答案 2 :(得分:1)

您可以简单地重定向推特共享网址吗?我猜他们要小心在iframe中打开窗口,以防止恶意网站在用户的帐户中发推文,而不会让用户有机会首先确认他们发送此推文的意图。

答案 3 :(得分:0)

你说window.open工作正常,在新窗口中弹出网址但是你试过将它弹出到父框架中吗?

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

答案 4 :(得分:0)

@yuval不幸的是,twitter网址会转到一个页面,该页面在响应中设置了X-FRAME-OPTIONS:SAMEORIGIN标头。这不是一个Javascript检查。浏览器只会在看到标题后拒绝呈现页面。这样做是为了防止clickjacking攻击,通常是为了窃取用户的密码。

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