Как открыть другой домен или субдомен для новой вкладки и одну и ту же ссылку на домен на ту же вкладку - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужен способ открыть ссылку в новой вкладке, если ссылка принадлежит другому имени хостаEx1. URL запроса страницы: example.com есть ссылки:

<a href="//app.example.com">app example</a> 
<a href="//www.info.example.com">info example</a>
<a href="https://example.com/abc">example abc</a>
<a href="https://www.example2.com">example2</a>

Мне нужно, чтобы решить как

<a href="//app.example.com" target="_blank">app example</a> 
<a href="//info.example.com" target="_blank">info example</a>
<a href="https://example.com/abc" target="_self">example abc</a>
<a href="https://www.example2.com" target="_blank">example2</a>

Ex2. URL запроса страницы: info.example.com есть ссылки:

<a href="//app.example.com">app example</a> 
<a href="//www.info.example.com">info example</a>
<a href="http://tst.example.com/abc">example abc</a>
<a href="https//dev.example2.com">example2</a>

Мне нужно разрешить, как

<a href="//app.example.com" target="_blank">app example</a> 
<a href="//wwww.info.example.com" target="_self">info abc</a>
<a href="http://tst.example.com/abc" target="_blank">example abc</a>
<a href="https//dev.example2.com" target="_blank">example2</a>

Я тоже пробовал Открыть все внешние ссылки, открытые в новой вкладке, кроме домена

, но он не работает с поддоменом.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Предполагая, что вы хотите сравнить с текущей страницей и открыть любой другой поддомен или основной домен на другой вкладке, вы можете сделать:

$('a').filter(function(){
    return this.host !=== location.host
}).attr('target','_blank');

Элемент <a> имеет много свойств, похожих на location и host является одним из них

0 голосов
/ 25 сентября 2018

Вы можете использовать endswith вместо === при сравнении хоста с хостом якоря.

Однако, как указано в комментариях, ваши правила между Ex1 и Ex2 не совпадают:

  • ex1 использует точное совпадение имени хоста, игнорируя любой путь (например, google.com делает не match info.google.com)
  • ex2 использует совпадение имени хоста,игнорирование чего-либо слева (например, info.google.com действительно соответствует www.info.google.com)

В приведенном ниже фрагменте используются правила из второго примера

var pagehost1 = "google.com"; // location.host;

$('.ex1 a').each(function(){
    if (this.host.endsWith(pagehost1)) {
        //$(this).attr('target','_blank');
        $(this).addClass("match");
    }
});

var pagehost2 = "info.google.com"; // location.host;

$('.ex2 a').each(function(){
    if (this.host.endsWith(pagehost2)) {
        //$(this).attr('target','_blank');
        $(this).addClass("match");
    }
});
.match { color: green; }
a { display:block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class='ex1'>
<a href="//app.google.com">app google</a> 
<a href="//www.info.google.com">info google</a>
<a href="https://google.com/abc">google abc</a>
<a href="https://www.apple.com">apple</a>
</div>

<hr/>

<div class='ex2'>
<a href="//app.google.com">app google</a> 
<a href="//www.info.google.com">info google</a>
<a href="http://wwwtst.google.com/abc">google abc</a>
<a href="https//wwwdev.apple.com">apple</a>
</div>
0 голосов
/ 24 сентября 2018

Вы имеете в виду что-то вроде этого:

В этом коде ТОЛЬКО google.com получит _self, что-нибудь.google.com и другие сайты получат _blank

, включая google.com:8080, если вы находитесь на google.com:80 - поэтому разные порты также получают _blank - если вы используете разные порты для одного и того же шланга, то измените на location.hostname

let currentHost = "google.com"; // location.host; // change in the real page
$(function() {
  $("a").each(function() {
    this.target=this.host===currentHost?"self":"_blank";
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="https://app.google.com">app google</a><br/>
<a href="https://info.google.com">info google</a> <br/>
**<a href="https://google.com/abc">google abc</a>**<br/>
<a href="https://google.com:8080">other google port</a><br/>
<a href="https://apple.com">apple</a><br/>
...