J'ai un code comme celui-ci:
action().success(function (r) { // window.open(...); }
3 Réponses :
Les incendies de la promesse vous répondent à la réponse HTTP de la demande AJAX. Ce n'est pas un événement déclenché par l'utilisateur, les fenêtres contextuelles sont donc bloquées. Utilisez la fenêtre que l'utilisateur vous donne au lieu de créer une nouvelle. P>
La solution que j'utilise sur ce problème est de p>
win.location code>) li>
ol>
Et si je ne sais pas avant la main si j'aurai besoin d'ouvrir une popup? Comme dans: action (). Ensuite (Dowindowopentinghing) .Catch (DosomethindoSethoTo Esntopenapopup) Code> Donc, je ne peux donc pas ouvrir une fenêtre avant la main (pour conserver sa référence, etc.) si plus tard je ne le ferai pas Utilisez-le, non?
@Luiz Une solution hacky pourrait être d'ouvrir cette fenêtre et de le fermer si ce n'est pas nécessaire. Mais je chercherais une solution de contournement basée sur l'ergonomie, par exemple la requête qui pourrait échouer, puis une boîte de dialogue "La chose fonctionnée, voulez-vous voir le résultat dans une nouvelle fenêtre?".
var newTab = $window.open('', '_blank'); promise .then(function () { var url = '...'; newTab.location.href = url; });
Les deux autres réponses sont meilleures et doivent être acceptées à la place de celle qui dit que vous ne pouvez pas le faire.