window.open - есть ли альтернативный код? - PullRequest
0 голосов
/ 30 января 2019

В моем коде, когда пользователь нажимает кнопку на моей странице, должна открываться новая вкладка с использованием следующего кода JS.

Отлично работает во всех браузерах, кроме Google AppБраузер на iOS, где он просто открывает новую пустую вкладку и все.

Вот это Fiddle

Если вы нажмете «Клик» в любом браузере,Откроется новая вкладка, которая переместится в «next-page.php». Однако, если у вас есть iOS и вы откроете эту скрипку из Google Search App, откроется просто пустая вкладка.

Код, который, кажется, не поддерживаетсянаходится в строке 66 в Fiddle:

    wId = ''+new Date().getTime();
    w = window.open('about:blank','myPopup_Window' + wId);
    form.attr('target', 'myPopup_Window' + wId);

(я знаю это, потому что другой вариант в коде, который находится в части IF, работает , хотя он имеет другую функциональность- он открывает целевую страницу на той же странице, а затем открывает новую вкладку с исходной страницей.)

HTML:

<label class="popup-button" data-tab-url="/next-page.php" data-tab-url-go="foo" data-popup-url="none" data-popup-url-go="foo">CLICK</label>

JS:

(function($) {
    var check_mobile = true; // 

    var button_class1 = ".popup-button";
    var button_class3 = ".popup-button-flipped";

    var currentPopup = null;
    var currentPopupTab = null;
    var currentPopupXhr = null;

    var initOpenModal = false;

    var checkUrl = function(url) {
        if (!url)
            return url;
        return url.trim();
    };

    var getFormData = function(form) {
        var data = {};
        form.find(':input').each(function() {
            var n = $(this).attr('name');
            if (n) {
                var v = $(this).val();
                data[n] = v;
            }
        });
        return data;
    };

    var w = null;
    var wId = 0;

    var tryOpenTab2 = function(button,tab_url,tab_url_data_go) {
        var data = {};
        var form = button.parents('form').first();
        if (form.length > 0)
            data = getFormData(form);
        if (tab_url_data_go) {
            data['go'] = tab_url_data_go
        }

        if (!tab_url)
            return;

        var form = $('<form></form>');
        form.attr('method', 'POST');
        form.attr('action', tab_url);
        for (var k in data) {
            var input = $('<input />');
            input.attr('type', 'hidden');
            input.attr('name', k);
            input.attr('value', data[k]);
            form.append(input);
        }
        $('body').append(form);

        if (w && !w.closed) {

            w = null;
        }

        if (button.is(button_class3)) {
            w = window.open(window.location.href.split('#')[0] + "#" + button.attr("data-popup-id"));
        } else {
            wId = ''+new Date().getTime();
            w = window.open('about:blank','myPopup_Window' + wId);
            form.attr('target', 'myPopup_Window' + wId);
            //wId++;
        }

        window.setTimeout(function(){
            form.submit();

            window.setTimeout(function(){form.remove();}, 0);
        },0);
    };


    var setPopups = function(button, no_one_time_check) {
        if (typeof no_one_time_check == "undefined")
            no_one_time_check = false;

        var tab_url = checkUrl(button.attr("data-tab-url"));
        if (tab_url == "none")
            tab_url = "";



        if ( initOpenModal || !button.is(button_class3)) {
            var popup_url = checkUrl(button.attr("data-popup-url"));
            { //check no show
                var id = button.attr("data-popup-id");
                var cn = "button-" + id + "-nopopup";

            }
            var popup_url_data_go = checkUrl(button.attr("data-popup-url-go"));
            var data = {};
            if (popup_url_data_go) {
                data = {'go' : popup_url_data_go};
            }

        }


        if (!initOpenModal) {
            var tab_url_data_go = checkUrl(button.attr("data-tab-url-go"));
            tryOpenTab2(button, tab_url,tab_url_data_go);
        }
    };

    $(document).ready(function(){       
        var id = 0;
        $(button_class1 + "," + button_class3).each(function() {
            $(this).attr("data-popup-id", id++);

        });

        $(button_class1).each(function() {
            var button = $(this);

            button.on('click.popup-button', function() {
                setPopups(button);
                return false;
            });
        });


    });

})(jQuery);
...