веб-приложение сафари открыть rel=external в сафари вместо веб-приложения

Я пытаюсь сделать свой сайт веб-приложением. Первый раз смотрел, все ссылки открывались в браузере сафари. после добавления скрипта на сайт это больше не проблема. Это сценарий:

if(("standalone" in window.navigator) && window.navigator.standalone){
    $(document).on('click', 'a', function(e) {
        if ($(this).attr('target') !== '_blank') {
            e.preventDefault();
            window.location = $(this).attr('href');
        }
    });
}

только все ссылки с 'rel="external"' остаются в веб-приложении. также, если я установлю их на цель "_blank".

Я подумал: а что, если у меня есть скрипт, который ищет rel="внешний файл". редактирование вышеуказанного скрипта не работает.

поэтому мне нужен скрипт, который проверяет элемент rel=external. если он находит его, ссылка остается нетронутой, и если он не находит rel=external в ссылке, он делает что-то вроде:

e.preventDefault();
window.location = $(this).attr('href');

person user3602420    schedule 06.05.2014    source источник


Ответы (2)


Как насчет этого?

if(! $(this).is('[rel="external"]') ) {
    e.preventDefault();
    window.location = $(this).attr('href');
} else {
    window.open( $(this).attr('href') ); //opens a new window
}

EDITED: добавлено условие else, которое заставит ссылки с rel="external" открываться в новом окне.

person Jay Blanchard    schedule 06.05.2014
comment
этот кажется в порядке. все еще это не делает то, что я хочу. все ссылки остаются в веб-приложении. также те, у которых rel=external. ведь я хочу открыть вне веб-приложения в обычном сафари iOS - person user3602420; 06.05.2014
comment
Вы хотите, чтобы они оставались в веб-приложении и одновременно открывались в обычном Safari? Это то, что вы, кажется, говорите. Этот код отвечает на ваш первоначальный вопрос. - person Jay Blanchard; 06.05.2014
comment
это не то, чего я хочу. если у меня есть ссылка типа ‹a href=stuff.html›link‹/a›, чем я хочу, чтобы она оставалась в веб-приложении. и если ссылка выглядит как ‹a href=stuff.html rel=external›link‹/a›, я хочу, чтобы она открывалась в обычном браузере. - person user3602420; 06.05.2014
comment
Значит, наоборот? - person Jay Blanchard; 06.05.2014
comment
конечно. противоположный. этот сценарий действительно потрясающий .. большое спасибо - person user3602420; 06.05.2014

Чтобы открыть окно внешнего браузера в веб-приложении (автономном), вам нужно использовать _system в функции window.open. Также в iPhone Safari есть ошибка, из-за которой родительское окно неправильно перерисовывается при закрытии вновь открытого окна.

var doc = document.documentElement;
var top = (window.pageYOffset || doc.scrollTop)  - (doc.clientTop || 0);
$('html, body').animate({scrollTop: 0});
window.open(encodeURI(url),"_system",windowOpenSettings);
$('html, body').animate({scrollTop: top});
return;

Вся прокрутка предназначена только для того, чтобы перекрасить окно IOS и вернуть пользователя в то же положение, что и до щелчка.

person Leon Sanders    schedule 07.07.2020