2010-12-13 15 views
5

Estoy buscando agregar un "tweet this" al sitio. Lo suficientemente simple, ¿verdad? El problema es que el sitio debe ejecutarse en una plataforma incrustada que no maneje ventanas emergentes, así que estoy tratando de hacer todo dentro de la página.Crear un botón de tweet sin abrir una nueva ventana

Soy capaz de crear con éxito mi botón de tweet, adjuntarle un controlador onClick y construir una URL de twitter.com/share adecuada para el contenido relevante. Todo funciona bien cuando abro esa URL en una nueva ventana con window.open. Sin embargo, si intento abrir la URL en un iframe, nada se carga dentro del marco. Incluso cargando http://twitter.com en el iframe falla de la misma manera. Sin embargo, cargar Google o cualquier otro sitio web parece funcionar bien.

¿Alguna idea de lo que me falta aquí? ¡Gracias! --zach

Editar: Sí, se están detectando el iframe de la carga y de supresión de la página:

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='';}; 

}

Cualquier forma razonable de evitar esto, o estoy atascado escribiendo mi propia tubería de autenticación a través de oauth? No necesito nada de su API, solo dejo que los usuarios twitteen en sus propias cuentas.

Respuesta

10

Twitter (como el desbordamiento de pila) probablemente está usando alguna Javascript para asegurarse de que no están siendo presentadas en un iFrame:

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

me encontré con algo similar hace poco tiempo, y terminó volver a hacer parte de mi aplicación sin el elemento iFrame.

+3

+1 por odio! –

1

¿Puede simplemente redirigir la URL de compartir de twitter? Supongo que quieren tener cuidado al abrir la ventana en iframe para evitar que los sitios maliciosos tuiteen en la cuenta de un usuario sin darle al usuario la oportunidad de confirmar primero su intención de enviar este tweet.

2

Ir y obtener una cuenta de desarrollador en twitter y las cosas se hacen fácil para usted :)

0

Dijiste window.open trabajado bien para hacer estallar la URL en una nueva ventana, pero has necesitado apareciendo en el padre ¿marco?

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

@yuval Por desgracia para ti, la url Twitter va a una página que tiene los X-FRAME-OPTIONS: cabecera SAMEORIGIN establecido en la respuesta. No es un cheque de Javascript. El navegador simplemente se negará a mostrar la página después de ver el encabezado. Esto se hace para evitar un ataque clickjacking, generalmente para robar la contraseña de un usuario.

Así que su única otra opción es realmente redirigir su página actual con window.location.href=url.

Cuestiones relacionadas