web-dev-qa-db-fra.com

Javascript window.open est bloqué par IE bloqueur pop-up

Quelqu'un peut-il aider, j'ai un popup qui est bloqué. C'est un popup qui est créé parce que quelqu'un a cliqué sur une image imprimée sur mon site.

Je pensais que IE n'était pas censé les bloquer lorsque le popup venait par l'intermédiaire d'une onclick?

Quelqu'un peut-il aider? La variable child1 est toujours renvoyée sous la forme NULL si le bloqueur de popup est activé ...

Le problème est peut-être que l'événement onclick passe ensuite le contrôle à une nouvelle fonction qui charge un fichier html et fait child.document.write

Voici mon code simple ..

var width = 800;
var height = 600;
var left = parseInt((screen.availWidth / 2) - (width / 2));
var top = parseInt((screen.availHeight / 2) - (height / 2));
var windowFeatures = "width=" + width + ",height=" + height 
   + ",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes,left=" 
   + left + ",top=" + top + "screenX=" + left + ",screenY=" + top;      

child1 = window.open("about:blank", "subWind", windowFeatures);
12
mark smith

Le problème sera qu'ouvert ne renverra une référence à la fenêtre que si vous naviguez quelque part dans votre hôte actuel. Vous naviguez vers: blanc qui ne fait pas partie de votre hôte.

Essayez d’ajouter un fichier blank.htm à votre site et ouvrez-le à la place. Je ne suis toujours pas sûr que document.write sera autorisé. Le document ne sera pas ouvert en écriture. Vous pourrez cependant manipuler le DOM du document vierge existant.

13
AnthonyWJones

Lorsqu'il est défini sur Medium filter level, le bloqueur de fenêtres publicitaires intempestives d'Internet Explorer ne bloquera pas les fenêtres ouvertes par JavaScript si elles ont été lancées par une action de l'utilisateur. Ce qui suit fonctionne bien dans IE 6, 7 et 8:

<script type="text/javascript">
function openWin() {
    var width = 800;
    var height = 600;
    var left = Math.floor((screen.availWidth - width) / 2);
    var top = Math.floor((screen.availHeight - height) / 2);
    var windowFeatures = "width=" + width + ",height=" + height +
            ",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes," +
            "left=" + left + ",top=" + top +
            "screenX=" + left + ",screenY=" + top;
    child1 = window.open("about:blank", "subWind", windowFeatures);
    writeTo(child1);
}
function writeTo(w) {
    w.document.write('Test');
}
</script>
<a href="#" onclick="openWin();return false;">Test</a>

Notez que l'utilisation de document.write dans la nouvelle fenêtre ne fonctionne pas dans certains navigateurs Web. Notez également que cela peut déclencher un bloqueur de fenêtres publicitaires intempestives dans d'autres navigateurs, même s'il fonctionne comme indiqué dans Internet Explorer.

J'ai vu où l'invocation de JavaScript à partir d'un événement onclick peut, dans certains cas, provoquer le déclenchement du bloqueur de fenêtres publicitaires intempestives. Cela semble avoir quelque chose à voir avec comment far window.open() est de l’événement onclick. Trop de niveaux de fonctions appelant des fonctions avant d'appeler window.open(). Sans voir votre mise en œuvre exacte, je ne peux pas vous dire si c'est le problème que vous rencontrez ou non.

4
Grant Wagner

Il le bloque car ce n'est pas une ancre avec un target = "_ blank". Vous créez la popup par programmation.

Faites ceci après l'exemple de code que vous avez fourni.

if (!child1) {
      alert('You have a popup blocker enabled. Please allow popups for www.yourSite.com');
}
3
nickytonline

s'il vous plaît essayer le code

var newWin = window.open(...);
if (newWin && newWin.top) {
    // popup has opened
} else {
    // popup has been blocked
}
1
xem tivi online

Je vous suggère de créer un [formulaire] factice avec un target = "_ blank" au lieu d'un window.open ().

J'espère que ca fonctionne.

Cordialement.

PD: Je suppose que l'ajout de votre site aux "sites de confiance" n'est pas une option, non?

0
ATorras

j'ai une idée à savoir 10/11:

let win = window.open();
setTimeout(function(){
    win.customParam = 'xxxx';
});

en gagnant, vous pouvez obtenir customParam après la fenêtre onload avec un timer ou une boucle:

0
Hou Feng