window.open () ничего не делает в мобильном jquery? - PullRequest
0 голосов
/ 23 марта 2012

Я не могу использовать target = _blank, потому что мои действия строятся динамически, например: когда пользователь нажимает на ссылку, я ловлю ее с помощью .click (function (event)), после чего вызывается ajax api, а затем в callback есть URL, куда идти.

Теперь проблема:

window.location = mylink; // РАБОТАЕТ - ОК! window.open (MyLink); // НЕ РАБОТАЕТ - НЕ ОК!

почему

Мне нужно открыть новое окно, потому что mylink - это ссылка на pdf-файл, и при использовании window.location pdf-файл корректно просматривается, но, .. без каких-либо элементов управления браузером. Это мобильное веб-приложение, и я использую jquery mobile.

Жаль, что в Интернете у многих других есть проблема с просмотром PDF, но никто не решил ее, поэтому я решил открыть новое окно и передать туда ссылку PDF. Таким образом, мое родительское окно останется нетронутым. В противном случае вам придется убить текущий сеанс и снова открыть сафари ..

Ответы [ 2 ]

2 голосов
/ 28 мая 2013

Добавьте target = "_ blank" к вашим ссылкам. Затем вызовите этот сценарий при событии щелчка. Откроется ваш PDF в новом окне.

$( "a" ).live( "click", function(event) {
    var $this = $(this),
        //get href, remove same-domain protocol and host
        href = $this.attr( "href" ).replace( location.protocol + "//" + location.host, ""),
        //if target attr is specified, it's external, and we mimic _blank... for now
        target = $this.is( "[target]" ),
        //if it still starts with a protocol, it's external, or could be :mailto, etc
        external = target || /^(:?\w+:)/.test( href ) || $this.is( "[rel=external]" ),
        target = $this.is( "[target]" );

    if( href === '#' ){
        //for links created purely for interaction - ignore
        return false;
    }

    var testtarget = $this.attr( "target" );
    if (testtarget == '_blank') {
        alert('Leaving web app');
        return true;
    }

    $activeClickedLink = $this.closest( ".ui-btn" ).addClass( $.mobile.activeBtnClass );

    if( external || !$.mobile.ajaxLinksEnabled ){
        //remove active link class if external
        removeActiveLinkClass(true);

        //deliberately redirect, in case click was triggered
        if( target ){
            window.open(href);
            //return true;
        }
        else{
            location.href = href;
        }
    }
    else {  
        //use ajax
        var transition = $this.data( "transition" ),
            back = $this.data( "back" ),
            changeHashOnSuccess = !$this.is( "[data-rel="+ $.mobile.nonHistorySelectors +"]" );

        nextPageRole = $this.attr( "data-rel" );    

        //if it's a relative href, prefix href with base url
        if( href.indexOf('/') && href.indexOf('#') !== 0 ){
            href = getBaseURL() + href;
        }

        href.replace(/^#/,'');

        changePage(href, transition, back, changeHashOnSuccess);            
    }
    event.preventDefault();
});
0 голосов
/ 23 марта 2012

Если вы хотите открыть диалоговое окно / всплывающее окно в jQuery Mobile, вы должны использовать атрибут data-rel="dialog", а атрибут href должен указывать на URL, который вы хотите загрузить

<a href="yourpage.html" data-role="button" data-rel="dialog">Open dialog</a>
...