2012-02-07 6 views
0

J'ouvre une fenêtre pour l'authentification facebook et j'aimerais que le contenu de cette page soit centré dans la fenêtre contextuelle. Je suis PAS demandant comment centrer la fenêtre contextuelle sur l'écran. Je demande comment centrer la page dans la fenêtre contextuelle. Javascript est ok.Centrer la fenêtre contextuelle

<a href="/auth/facebook" id="facebook_button" data-width="800" data-height="400"> 

<script> 
$("#facebook_button").click(ask_for_facebook_auth); 

function popupCenter(url, width, height, name) { 
    var left = (screen.width/2)-(width/2); 
    var top = (screen.height/2)-(height/2); 
    return window.open(url, name, "menubar=no,toolbar=no,status=no,width="+width+",height="+height+",toolbar=no,left="+left+",top="+top); 
} 

function ask_for_facebook_auth(e){ 
    popupCenter($(this).attr("href"), $(this).attr("data-width"), $(this).attr("data-height"), "authPopup"); 
    e.stopPropagation(); return false; 
} 
</script> 
+1

Que diriez-vous de partager certains des balisages impliqués dans la fenêtre contextuelle afin que nous ne devions pas deviner ce que vous avez. – Gabe

+0

Parfois, les gens sont simplement paresseux. De bonnes questions sont nécessaires pour de bonnes réponses ... – elclanrs

+0

Désolé, je l'ai ajouté. – stackOverlord

Répondre

0

Ce n'est pas une solution générale au centrage popup, mais il a résolu mon problème avec l'auth facbeook dialogue. Vous devez mettre

config.omniauth :facebook, APP_ID, APP_SECRET, { :display => 'popup' } 

dans votre initializers/omniauth afin que facebook générerez une page qui ressemble bien centrée dans une fenêtre contextuelle.

1

Vous voulez utiliser la méthode window.scrollTo() pour centrer la fenêtre à la moitié de la largeur du corps/hauteur moins la moitié de la fenêtre innerWidth/innerHeight respectivement. Cela devrait accomplir ce que vous recherchez:

window.onload = function() { 
    var w = window.innerWidth * 0.5; 
    var h = window.innerHeight * 0.5; 
    var x = document.body.clientWidth * 0.5 - w; 
    var y = document.body.clientHeight * 0.5 - h; 
    window.scrollTo(x,y); 
} 
+0

Y at-il un moyen de l'appeler à partir de la fenêtre parent? Je ne suis pas sûr de savoir comment exécuter javascript sur la fenêtre enfant, car c'est la page des autorisations de l'application sur facebook. – stackOverlord

+0

Malheureusement, si vous n'avez pas accès à une page enfant sur un domaine différent, vous ne pourrez pas déterminer la largeur/hauteur de l'enfant et ne pourrez donc pas centrer la fenêtre parent sur son nom. Contenu. Toutefois, Facebook peut prendre en charge certaines variables de chaîne de requête qui définissent la largeur et la hauteur de ses pages chargées depuis un domaine étranger, auquel cas vous pouvez utiliser 'popupName.scrollTo()' pour faire défiler votre fenêtre contextuelle selon la largeur/hauteur définie. – Aaron

+0

Hmm J'ai essayé w = window.open (...); w.scrollTo (300,10) mais cela ne semble pas avoir d'effet. – stackOverlord

0

Utilisez cette fonction pour centrer votre popup.

jQuery.fn.center = function() { 
      this.css("position","absolute"); 
      this.css("top", (($(window).height() - this.outerHeight())/2) + $(window).scrollTop() + "px"); 
      this.css("left", (($(window).width() - this.outerWidth())/2) + $(window).scrollLeft() + "px"); 
      return this; 
     } 

Si vous voulez centrer div id SimpleModal-conteneur puis utilisez

$('#simplemodal-container').center();