Как сделать так, чтобы гиперссылки открывались на новой вкладке с помощью CSS или Multimarkdown? - PullRequest
5 голосов
/ 26 ноября 2010

Я использую Text :: MultiMarkdown для создания файлов HTML из MultiMarkdown документов.

Я бы хотел, чтобы все ссылки открывались в новой вкладке.

Есть ли способ настроить это поведение с помощью шаблона CSS или непосредственно в документе MultiMarkdown (без явного написания HTML вокруг каждой ссылки в документе MultiMarkdown)?

Ответы [ 4 ]

8 голосов
/ 26 ноября 2010

Определенно не в CSS - это касается только того, как элементы выглядят, а не как они себя ведут.

Можно добавить <base target="_blank"> в заголовок HTML-документа (используя XSLT), но это равносильно добавлению его к каждой ссылке.

3 голосов
/ 26 ноября 2010

В HTML и / или JavaScript вы можете только инициализировать открытие нового окна. В некоторых UA пользователь может принудительно открыть новое окно в качестве новой вкладки. Но вы не можете контролировать это поведение.

2 голосов
/ 07 ноября 2012

Теоретически, вы можете сделать это с помощью CSS3: http://www.w3.org/TR/css3-hyperlinks/ - однако ни один обычный браузер никогда не реализовывал это. Причиной может быть то, что распространено мнение, что выбор открытия нового окна или вкладки должен быть оставлен на усмотрение пользователя.

0 голосов
/ 26 ноября 2010

Вы не можете сделать это в CSS, но вы можете использовать источник.

Вы можете создать подкласс Text::MultiMarkdown и предоставить собственную реализацию _GenerateAnchor, что-то похожее на это может работать:

sub _GenerateAnchor {
    my ($self, $whole_match, $link_text, $link_id, $url, $title, $attributes) = @_;
    if($url
    && index($url, '#') != 0) {
        $attributes = $attributes ? $attributes . ' target="_blank"' : 'target="_blank"';
    }
    return $self->SUPER::_GenerateAnchor($whole_match, $link_text, $link_id, $url, $title, $attributes);
}

Это немного глупо, поскольку _GenerateAnchor не является частью общедоступного интерфейса.Вам также нужно будет использовать интерфейс OO, а не только функцию markdown.

Вы также можете связаться с автором Text::MultiMarkdown и посмотреть, добавит ли он флаг для такого рода вещей.Возможно, вы могли бы предоставить патч для начала работы.

Вы также можете использовать HTML::Parser и друзей, чтобы проанализировать HTML-код, полученный из Text::MultiMarkdown, и самостоятельно добавить атрибуты target.

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