target=_blank не работает в IE8, запуская IE бок о бок (я запускаю пакет IE через VirtualBox)

IE8 иногда предотвращает создание ссылок, если для них установлено значение target=_blank.

Эта проблема, по-видимому, ограничивается поврежденными установками IE, например, при параллельной установке нескольких версий.

Я отредактировал этот вопрос, как только нашел ответ, и, надеюсь, это сэкономит кому-то время. Ответ находится в комментариях к первому ответу в списке.


person Andrew Johnson    schedule 01.07.2009    source источник
comment
Может быть полезно перефразировать вопрос, чтобы указать, что это проблема при попытке запустить IE параллельно.   -  person EricLaw    schedule 14.07.2009
comment
Хорошая идея, поменял.   -  person Andrew Johnson    schedule 15.07.2009
comment
Какая огромная коллекция неверных ответов... Более того, дети XHTML 1.1 думают, что добавление _target=blank через javascript является допустимым взломом. Если браузер поддерживает только XHTML 1.1, можно ожидать, что это не сработает.   -  person Evan Carroll    schedule 03.03.2010


Ответы (5)


Это зависит от того, какой автономный IE8 вы используете. Я обнаружил, что это проблема при использовании «Сайт Final Builds — Коллекция Internet Explorer» (http://finalbuilds.edskes.net/iecollection.htm) версии 1.6.0.3. Разработчик исправил эту ошибку в версии Ver. 1.6.0.4, и ссылки с target="_blank" теперь работают как положено.

person Paul Solomon    schedule 14.12.2009

Я знаю, что на этот вопрос уже дан ответ, но я просто хотел рассказать о функциях живой привязки jQuery:

$("a.myclass").live("click",function() {
    $(this).attr("target","_blank");
});

В этом примере атрибут target="_blank" устанавливается для любой ссылки с классом myclass, даже созданной с помощью Javascript.

person João Marcus    schedule 21.08.2009

А если вы используете target='blank' ? Я знаю, что это не то же самое, но вы откроете всплывающее окно/окно в новом экземпляре, и ваш сайт сможет пройти проверку на строгий режим XHTML :)

person Andrea    schedule 01.07.2009
comment
сорри, я не туда поставил цитату. Должно быть target='blank' - person Andrea; 01.07.2009
comment
для записи, это не '_blank', который не разрешен в XHTML 1.0 или 1.1 strict, это целевой атрибут в элементах привязки или ссылки. Он был (намеренно) исключен из DTD. Если использование target='blank' было проверено для вас как XHTML 1.0 или 1.1 Strict, это была ошибка со стороны валидатора. Тем не менее, большинство браузеров по-прежнему принимают и обрабатывают его, действительный он или нет. - person Gabriel Hurley; 15.07.2009

Да, строгий режим XHTML не принимает target="_blank".

Если вы не хотите продолжать использовать window.open везде, вы можете использовать rel="external" и дополнительный Javascript, например следующий, используя JQuery:

$(document).ready(function() {
    $("a[rel='external']").attr("target","_blank");
});

РЕДАКТИРОВАТЬ: Чтобы установить все сгенерированные ссылки:

 $("a[rel='external']").ready(function() { 
    $("a[rel='external']").attr("target","_blank");
 });

Или, без jQuery, вы можете использовать скрипт, здесь :

function externalLinks() { 
 if (!document.getElementsByTagName) return; 
 var anchors = document.getElementsByTagName("a"); 
 for (var i=0; i<anchors.length; i++) { 
   var anchor = anchors[i]; 
   if (anchor.getAttribute("href") && 
       anchor.getAttribute("rel") == "external") 
     anchor.target = "_blank"; 
 } 
} 
window.onload = externalLinks;
person João Marcus    schedule 01.07.2009
comment
Это не работает. Прежде всего, ссылки создаются с помощью javascript и поэтому не существуют при загрузке. Я попытался установить a.rel и a.target, но это не работает. - person Andrew Johnson; 01.07.2009
comment
Ну, это должен быть сайт для совместной работы, а не сайт с готовым решением. - person João Marcus; 01.07.2009
comment
Отсюда и мое дальнейшее сотрудничество. - person Andrew Johnson; 01.07.2009
comment
Ваше сотрудничество состоит в том, что это не работает. Вы не должны понижать модификацию людей, потому что решение не работает. Это работает, просто не совсем так, как вы хотите. - person João Marcus; 09.07.2009

Это связано с тем, что target="_blank" недействителен в строгом режиме XHTML. Видеть:

http://www.8164.org/xhtml-strict/

Следующее должно работать во всех случаях.

<script>window.open("http://www.80vul.com/test/ie8-1.htm");</script>

Я предполагаю, что в IE8 Beta 1 режим по умолчанию теперь СТРОГО, а не ПЕРЕХОДНЫЙ.

person the.jxc    schedule 01.07.2009
comment
У меня это не работает, хотя в моем документе я форсирую режим IE7 следующим образом: ‹meta http-equiv=X-UA-Compatible content=IE=EmulateIE7 /› - person Andrew Johnson; 01.07.2009
comment
Класс, не зарегистрированный при открытии новых окон, означает, что ваша установка IE8 повреждена. - person EricLaw; 01.07.2009
comment
debugtheweb.com/test/strict.htm работает правильно, если IE8 установлен правильно. - person EricLaw; 01.07.2009
comment
Эрик, ты попал в самую точку. У меня есть параллельные IE (6,7,8 и т. д.), установленные на экземпляре VirtualBox. Когда я проверяю страницу через реальный ящик Windows, он работает. Спасибо! - person Andrew Johnson; 02.07.2009
comment
Да, к сожалению, это одна из причин, по которой мы не рекомендуем параллельные хаки. VPC — единственный поддерживаемый сегодня способ бок о бок. Спасибо за обновление! - person EricLaw; 14.07.2009