Не будет ли Firefox «правильно» открывать ссылки с атрибутом target = "_ blank", добавленным при загрузке страницы с помощью JavaScript? - PullRequest
0 голосов
/ 17 марта 2012

Я использую следующий код (с библиотекой Underscore.js), чтобы добавить атрибуты target="_blank" и rel="external" ко всем нелокальным ссылкам при загрузке страницы.Мой код выглядит следующим образом:

(function($){
    $(document).ready(function(){

        // Create a matching regex pattern based on current host name
        var regexPattern = new RegExp(location.origin);

        // Gather all non-local links
        nonLocalLinks = _(jQuery('a')).reject(function(link) { 

            return link.href.match(regexPattern);

        });

        // Add attributes to all non-local links
        _(nonLocalLinks).each(function(item) { 
            item.target = '_blank'; 
            item.rel = 'external';
        });

    })
})(jQuery)

Этот код работает правильно во всех протестированных браузерах (Chrome 17, IE7, IE8, IE9, Safari), но не работает в Firefox 10. Ссылки, имеющие target="_blank" атрибут, установленный для тега привязки как часть HTML-вывода, выполняемого серверной функцией, как и ожидалось.Это не сработает при загрузке страницы в Firefox, или я пропускаю что-то еще?

Кроме того, я ценю любой вводный материал, но, пожалуйста, не думайте, что это плохой пользовательский опыт и т. Д.Я согласен, но у меня нет выбора - это для клиента, и это то, что они хотят;«Нет» не является опцией.

РЕДАКТИРОВАТЬ: Это «не работает» означает, что ссылка открывается в той же вкладке.В консоли firebug ошибок нет - ссылка просто ведет себя так, как будто target="_blank" не установлен.

1 Ответ

4 голосов
/ 17 марта 2012

Firefox не имеет свойства origin в window.location. Это означает, что ваш regexPattern в конечном итоге становится //, а nonLocalLinks остается пустым.

Демо (смотрите консоль): http://jsfiddle.net/ambiguous/tS4WB/

Вам придется отчитаться за отсутствующий location.origin примерно так:

var origin = location.origin;
if(!origin)
    origin = location.protocol + '//' + location.host;

Демо: http://jsfiddle.net/ambiguous/envWe/

Возможно, вы также захотите добавить привязку ^ к своему регулярному выражению или просто проверьте, дает ли indexOf ноль.

Если вы посмотрите документацию MDN по window.location, вы увидите, что поддерживаются следующие свойства:

  • хэш
  • хозяин
  • имя хоста
  • HREF
  • путь
  • Порт
  • Протокол
  • Поиск

Нет происхождения.

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