5行目: |
5行目: |
| // ** ** | | // ** ** |
| // ********************************************************************** | | // ********************************************************************** |
− | | + | /** |
− | $( function() {
| + | * @source mediawiki.org/wiki/Snippets/Open_external_links_in_new_window |
− | var $alinks = mw.util.$content.find( 'a' ); | + | * @version 5 |
− | $alinks.each( function() {
| + | */ |
− | var $tablink = $( this ); | + | mw.hook('wikipage.content').add(function($content) { |
− | if ( $tablink.hasClass( 'external' ) && $tablink.attr( 'href' ).indexOf( mw.config.get( 'wgServer' ) ) !== 0 ) { | + | // Second selector is for external links in Parsoid HTML+RDFa output (bug 65243). |
− | $tablink.attr( 'target', '_blank' ); | + | $content.find('a.external, a[rel="mw:ExtLink"]').each(function () { |
| + | // Can't use wgServer because it can be protocol relative |
| + | // Use this.href property instead of this.getAttribute('href') because the property |
| + | // is converted to a full URL (including protocol) |
| + | if (this.href.indexOf(location.protocol + '//' + location.hostname) !== 0) { |
| + | this.target = '_blank'; |
| + | if ( this.rel.indexOf( 'noopener' ) < 0 ) { |
| + | this.rel += ' noopener'; // the leading space matters, rel attributes have space-separated tokens |
| + | } |
| + | if ( this.rel.indexOf( 'noreferrer' ) < 0 ) { |
| + | this.rel += ' noreferrer'; // the leading space matters, rel attributes have space-separated tokens |
| + | } |
| } | | } |
| }); | | }); |
| }); | | }); |