Сделать окно поп под Chrome - PullRequest
       29

Сделать окно поп под Chrome

8 голосов
/ 24 ноября 2010

У меня есть кнопка, которая должна открывать новое окно как всплывающее окно (под родительской страницей). В IE / Firefox он работает нормально, но в chrome всплывающее окно появляется поверх (поверх) родительского окна.

Пожалуйста, предложите исправление.

пример использования / например: Ну, например, если вы видите kayak.com или какой-либо туристический веб-сайт, у вас есть возможность поиска и на других веб-сайтах .. Я хочу сделать что-то подобное, поэтому нужно всплывающее окно под ...

Код: я использую window.open (.......). Blur (), но по какой-то причине он не работает в Chrome.

Ответы [ 7 ]

16 голосов
/ 24 ноября 2010

Я забираю свой комментарий, возможно.

Следующее сработало для меня. (проверено последнее производство хрома)

var url = "yourURL.html";
window.open(url, "s", "width= 640, height= 480, left=0, top=0, resizable=yes, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=no").blur();
window.focus();

Как и все, если вы раздражаете своих посетителей, у вас будет меньше посетителей.

3 голосов
/ 29 января 2015

Это исправление, которое вы можете использовать для Chrome (протестировано на последней версии 40 от 29.01.2015). Это не откроет всплывающее окно, но новая вкладка и сохраняет фокус на главной вкладке (больше не сохраняет фокус на главной вкладке Chrome v.43>).

Чтобы избежать блокировщика всплывающих окон, вам необходимо взаимодействие с пользователем, в частности используйте событие mousedown или mouseup, click выдаст предупреждение о блокировщике всплывающих окон.

document.addEventListener("mousedown", tabUnder);

function tabUnder() {
    var a = document.createElement("a"),
        e = document.createEvent("MouseEvents");
    a.href = "http://testit.com"; //the URL of 'popup' tab
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null);
    a.dispatchEvent(e);
    document.removeEventListener("mousedown", tabUnder);
}

-jsFiddle-

3 голосов
/ 02 сентября 2013

Вы также можете оставить всплывающее окно, например:

var MINUTE_MILLISECONDS = 60000;
var now = new Date().getTime();

if (!localStorage.t || now > parseInt(localStorage.t) + MINUTE_MILLISECONDS) {
    var date = new Date();
    localStorage.t = now;
    window.location.href = "http://dgsprb.blogspot.com/";
    window.open(window.document.URL, "_blank");
}

Таким образом, новое содержимое остается на текущей вкладке, открывая новую вкладку с исходным содержимым окна. Работает так же, как поп-ап, при условии, что вы можете позволить себе перезагрузить текущее окно. Вы также убедитесь, что всплывающее окно не будет отображаться чаще одного раза в минуту.

3 голосов
/ 23 апреля 2013
function makePopunder(pUrl) {
    var _parent = (top != self && typeof (top["document"]["location"].toString()) === "string") ? top : self;
    var mypopunder = null;
    var pName = (Math["floor"]((Math["random"]() * 1000) + 1));
    var pWidth = window["innerWidth"];
    var pHeight = window["innerHeight"];
    var pPosX = window["screenX"];
    var pPosY = window["screenY"];
    var pWait = 3600;
    pWait = (pWait * 1000);
    var pCap = 50000;
    var todayPops = 0;
    var cookie = "_.mypopunder";
    var browser = function () {
        var n = navigator["userAgent"]["toLowerCase"]();
        var b = {
            webkit: /webkit/ ["test"](n),
            mozilla: (/mozilla/ ["test"](n)) && (!/(compatible|webkit)/ ["test"](n)),
            chrome: /chrome/ ["test"](n),
            msie: (/msie/ ["test"](n)) && (!/opera/ ["test"](n)),
            firefox: /firefox/ ["test"](n),
            safari: (/safari/ ["test"](n) && !(/chrome/ ["test"](n))),
            opera: /opera/ ["test"](n)
        };
        b["version"] = (b["safari"]) ? (n["match"](/.+(?:ri)[\/: ]([\d.]+)/) || [])[1] : (n["match"](/.+(?:ox|me|ra|ie)[\/: ]([\d.]+)/) || [])[1];
        return b;
    }();

    function isCapped() {
        try {
            todayPops = Math["floor"](document["cookie"]["split"](cookie + "Cap=")[1]["split"](";")[0]);
        } catch (err) {};
        return (pCap <= todayPops || document["cookie"]["indexOf"](cookie + "=") !== -1);
    };

    function doPopunder(pUrl, pName, pWidth, pHeight, pPosX, pPosY) {
        if (isCapped()) {
            return;
        };
        var sOptions = "toolbar=no,scrollbars=yes,location=yes,statusbar=yes,menubar=no,resizable=1,width=" + pWidth.toString() + ",height=" + pHeight.toString() + ",screenX=" + pPosX + ",screenY=" + pPosY;
        document["onclick"] = function (e) {
            if (isCapped() || window["pop_clicked"] == 1 || pop_isRightButtonClicked(e)) {
                //return;
            };
            window["pop_clicked"] = 1;
            mypopunder = _parent["window"]["open"](pUrl, pName, sOptions);
            if (mypopunder) {
                var now = new Date();
                document["cookie"] = cookie + "=1;expires=" + new Date(now["setTime"](now["getTime"]() + pWait))["toGMTString"]() + ";path=/";
                now = new Date();
                document["cookie"] = cookie + "Cap=" + (todayPops + 1) + ";expires=" + new Date(now["setTime"](now["getTime"]() + (84600 * 1000)))["toGMTString"]() + ";path=/";
                pop2under();
            };
        };
    };

    function pop2under() {
        try {
            mypopunder["blur"]();
            mypopunder["opener"]["window"]["focus"]();
            window["self"]["window"]["blur"]();
            window["focus"]();
            if (browser["firefox"]) {
                openCloseWindow();
            };
            if (browser["webkit"]) {
                openCloseTab();
            };
        } catch (e) {};
    };

    function openCloseWindow() {
        var ghost = window["open"]("about:blank");
        ghost["focus"]();
        ghost["close"]();
    };

    function openCloseTab() {
        var ghost = document["createElement"]("a");
        ghost["href"] = "about:blank";
        ghost["target"] = "PopHelper";
        document["getElementsByTagName"]("body")[0]["appendChild"](ghost);
        ghost["parentNode"]["removeChild"](ghost);
        var clk = document["createEvent"]("MouseEvents");
        clk["initMouseEvent"]("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null);
        ghost["dispatchEvent"](clk);
        window["open"]("about:blank", "PopHelper")["close"]();
    };

    function pop_isRightButtonClicked(e) {
        var rightclick = false;
        e = e || window["event"];
        if (e["which"]) {
            rightclick = (e["which"] == 3);
        } else {
            if (e["button"]) {
                rightclick = (e["button"] == 2);
            };
        };
        return rightclick;
    };
    if (isCapped()) {
        return;
    } else {
        doPopunder(pUrl, pName, pWidth, pHeight, pPosX, pPosY);
    };
}

makePopunder("http://www.yourdomain.com/");
1 голос
/ 26 марта 2018

Конец попандера здесь.Хром закрыл его вчера.

1 голос
/ 05 июня 2013

Загадочный код @dixie работает для меня в Firefox, IE и почти в Chrome (он не фокусируется на главном окне, а на всплывающем окне).

Чтобы он отлично работал наGoogle Chrome, я просто добавил это, чтобы восстановить фокус:

path = window.document.URL;
window.open(path,"_self");
0 голосов
/ 19 сентября 2018
window.open('http://google.com','','height=500,width=500');
window.open().close();

Не используйте попандеры для зла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...