2012-05-22 3 views
2

Je veux diriger un client dans un site de commerce électronique pour payer via le site Web de Paypal. Je voudrais que le paiement soit effectué dans un nouvel onglet/fenêtre afin que le client ne perde pas l'état actuel de la page Web où il se trouve.Comment ouvrir puis fermer une fenêtre sans être bloqué en tant que popup?

Pour que la fenêtre Paypal s'ouvre sans être bloquée, j'utilise une ancre avec target = "_ blank". Ce qui fonctionne parfaitement sauf pour le fait, je ne peux pas le fermer après le paiement Paypal est fait depuis window.close() ne fonctionne pas pour les fenêtres qui n'ont pas été ouvertes via window.open().

Comment puis-je faire en sorte qu'il ne soit pas bloqué à la fois comme un popup et je suis capable de le fermer avec JS plus tard?

+0

http://stackoverflow.com/questions/888964/javascript-window-open-is-blocked-by-ie-popup -blocker et http://stackoverflow.com/questions/9616150/window-open-getting-blocked-in-some-browsers duplication possible – shareef

+0

Mettez les informations d'état dans l'URL de rappel. Ne créez pas un flux de travail à plusieurs fenêtres. – Quentin

+0

http://stackoverflow.com/questions/7139103/open-page-in-new-window-without-popup-blocking manque de recherche .. éventuellement dupliquer question – yajay

Répondre

15

Pour que la fenêtre Paypal s'ouvre sans être bloquée, j'utilise une ancre avec target = "_ blank".

C'est une option, mais aussi longtemps que vous appelez window.open dans le gestionnaire pour un événement généré par l'utilisateur (comme click), vous pouvez ouvrir les fenêtres pop-up. Donc, assurez-vous que vous appelez window.open à partir d'un gestionnaire click sur le lien (et vous pouvez le fermer). Les bloqueurs de fenêtres contextuelles modernes (depuis les dernières années) bloquent les fenêtres pop-up qui ne sont pas déclenchées par un événement utilisateur, mais autorisent celles qui le sont.

Live example | source:

HTML:

<p><a href="#" id="target">Click to open popup</a>; it will close automatically after five seconds.</p> 

JavaScript:

(function() { 

    document.getElementById("target").onclick = function() { 
    var wnd = window.open("http://stackoverflow.com"); 
    setTimeout(function() { 
     wnd.close(); 
    }, 5000); 
    return false; 
    }; 

})(); 
+0

quel est le besoin de la minuterie ici pouvez-vous expliquer plus clairement –

+0

@VarunKumar: Le 'setTimeout' ci-dessus est un espace réservé pour l'appel de paiement asynchrone PayPal. –

+0

tq @ t-j-crowder –

Questions connexes