it-swarm.com.de

Javascript window.open wird von blockiert IE Pop-up-Blocker

Kann jemand helfen, ich habe ein Popup, das blockiert wird. Es ist ein Popup, das erstellt wird, weil jemand auf ein Druckbild auf meiner Site geklickt hat.

Ich dachte IE soll diese nicht blockieren, als das Popup über eine onclick kam?

Kann jemand helfen? Die Variable child1 wird immer als NULL zurückgegeben, wenn der Popup-Blocker aktiviert ist ...

Möglicherweise besteht das Problem darin, dass das Ereignis onclick die Steuerung an eine neue Funktion übergibt, die eine HTML-Datei lädt und child.document.write ausführt.

Hier ist mein einfacher Code ..

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

Das Problem ist, dass open nur dann einen Verweis auf das Fenster zurückgibt, wenn Sie zu einem Ort in Ihrem aktuellen Host navigieren. Sie navigieren zu about: blank, das sich nicht in Ihrem Host befindet.

Versuchen Sie, Ihrer Site eine leere.htm-Datei hinzuzufügen, und öffnen Sie diese stattdessen. Ich bin mir immer noch nicht sicher, ob document.write zulässig ist. Das Dokument kann nicht zum Schreiben geöffnet werden. Möglicherweise können Sie jedoch das DOM des vorhandenen leeren Dokuments bearbeiten.

13
AnthonyWJones

Wenn der Popup-Blocker von Internet Explorer auf die Filterebene Medium eingestellt ist, blockiert er keine von JavaScript geöffneten Fenster, wenn diese von einer Benutzeraktion initiiert wurden. In IE 6, 7 und 8 funktioniert Folgendes einwandfrei:

<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>

Beachten Sie, dass die Verwendung von document.write in dem neu geöffneten Fenster in einigen Webbrowsern nicht funktioniert. Beachten Sie auch, dass dies in anderen Browsern einen Popup-Blocker auslösen kann, selbst wenn dies wie in Internet Explorer dargestellt funktioniert.

Ich habe gesehen, wo das Aufrufen von JavaScript aus einem onclick -Ereignis in einigen Fällen dazu führen kann, dass der Popupblocker ausgelöst wird. Es scheint etwas damit zu tun zu haben, wie far window.open() vom onclick-Ereignis abweicht. Zu viele Funktionsstufen rufen Funktionen auf, bevor Sie window.open() aufrufen. Ohne Ihre genaue Implementierung zu sehen, kann ich Ihnen nicht sagen, ob dies das Problem ist, das Sie haben oder nicht.

4
Grant Wagner

Es blockiert es, weil es kein Anker mit einem target = "_ blank" ist. Sie erstellen das Popup programmgesteuert.

Tun Sie dies einfach nach dem von Ihnen bereitgestellten Codebeispiel.

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

bitte versuchen Sie es mit dem Code

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

Ich schlage vor, dass Sie ein Dummy [Formular] mit einem target = "_ blank" anstelle eines window.open () erstellen.

Ich hoffe es klappt.

Grüße.

PD: Ich nehme an, dass das Hinzufügen Ihrer Site zu "vertrauenswürdigen Sites" keine Option ist, oder?

0
ATorras

ich habe eine Idee in zB 10/11:

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

in Win können Sie customParam nach dem Laden des Fensters mit einem Timer oder einer Schleife erhalten:

0
Hou Feng