开发者

How can I make hyperlinks open in a new tab using CSS or Multimarkdown?

开发者 https://www.devze.com 2023-01-27 06:58 出处:网络
I am using Text::MultiMarkdown to create HTML files from MultiMarkdown documents. I would like all links to open in a new tab.

I am using Text::MultiMarkdown to create HTML files from MultiMarkdown documents.

I would like all links to open in a new tab.

Is there a way to configure this behavior using a CSS template, or directly in the MultiMarkdown docume开发者_如何学Gont (without explicitly writing HTML around each link in the MultiMarkdown document)?


Definitely not in CSS - that is only concerned with the way the elements appear, not how they behave.

It should be possible to add <base target="_blank"> to the head of the HTML document (using XSLT), but that's on par with adding it to each link.


In HTML and/or JavaScript you can only initialize the opening of a new window. The user is in some UAs able to force the opening of a new window as a new tab instead. But you can not control this behaviour.


In theory, you could do this with CSS3: http://www.w3.org/TR/css3-hyperlinks/ - however no common browser ever implemented this. The reason might be that it is a common believe that the choice of when a new window or tab is opened should be left to the user alone.


You can't do this in CSS but you can use the source.

You could subclass Text::MultiMarkdown and provide your own implementation of _GenerateAnchor, something similar to this might work:

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);
}

This is a bit kludgey as _GenerateAnchor isn't part of the public interface. You'd also need to use the OO interface rather than just the markdown function.

You could also contact the Text::MultiMarkdown author and see if he'll add a flag for this sort of thing. Maybe you could provide a patch to get things started.

You can also use HTML::Parser and friends to parse the HTML that comes out of Text::MultiMarkdown and add the target attributes yourself.

0

精彩评论

暂无评论...
验证码 换一张
取 消