2010-12-13 47 views
5

Je cherche à ajouter un bouton "tweet this" à un site. Assez simple, non? Le hic, c'est que le site est destiné à fonctionner sur une plate-forme intégrée qui ne gère pas particulièrement les fenêtres contextuelles, alors j'essaie de tout faire à l'intérieur de la page.Création d'un bouton de tweet sans ouvrir une nouvelle fenêtre

Je suis capable de créer mon bouton de tweet, d'y attacher un gestionnaire onClick et de créer une URL twitter.com/share appropriée pour le contenu concerné. Tout fonctionne bien lorsque j'ouvre cette URL dans une nouvelle fenêtre avec window.open. Cependant, si j'essaie d'ouvrir l'URL dans un iframe, rien ne se charge dans le cadre. Même charger http://twitter.com dans l'iframe échoue de la même manière. Cependant, le chargement de Google ou de tout autre site semble fonctionner correctement.

Des pensées sur ce qui me manque ici? Merci! --zach

Edit: Eh oui, ils détectent l'iframe de la charge et de découpage de la page:

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

}

De toute façon raisonnable de contourner ce problème, ou suis-je coincé écrire mon propre pipeline d'authentification via oauth? Je n'ai besoin de rien de leur API, laissant les utilisateurs tweeter sur leurs propres comptes.

Répondre

10

Twitter (comme Stack Overflow) utilise probablement un peu Javascript pour assurer qu'ils ne sont pas présentées dans un iFrame:

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

je suis tombé sur quelque chose de similaire récemment, et a fini par une partie re-faire de mon application sans l'élément iFrame.

+3

+1 pour avoir détesté !! –

1

Pouvez-vous simplement rediriger l'URL du partage Twitter? Je suppose qu'ils veulent faire attention à l'ouverture de la fenêtre dans iframe pour empêcher les sites malveillants de tweeter dans le compte d'un utilisateur sans donner à l'utilisateur une chance de confirmer d'abord leur intention d'envoyer ce tweet.

2

Go et obtenir un compte developpeur sur twitter et les choses sont faciles pour vous :)

0

Vous avez dit window.open a bien fonctionné pour apparaître l'url dans une nouvelle fenêtre, mais avez-vous essayé sauter dans le parent Cadre?

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

@yuval Malheureusement pour vous, l'url twitter va vers une page qui a le X-FRAME-OPTIONS: en-tête de SAMEORIGIN définies dans la réponse. Ce n'est pas une vérification Javascript. Le navigateur refusera simplement de rendre la page après avoir vu l'en-tête. Ceci est fait pour empêcher une attaque clickjacking, habituellement faite pour voler le mot de passe d'un utilisateur.

Votre seule autre option est donc vraiment de rediriger votre page actuelle avec window.location.href=url.