用于在新窗口/选项卡中打开其他网站链接的自动系统

时间:2013-12-18 15:19:18

标签: c# javascript html asp.net .net

我有一个网站,当用户点击链接时,如果它是我网站的页面,则会在同一窗口中打开,如果域名不同,则在新窗口中打开。但我这样做是这样的:

<a href="http://www.wrangle.in" target="<%=checkdomain("http://wwww.wrangle.in")?"_parent":"_blank" %>">Open Link</a>

checkdomain()检查链接的域名,如果我的网站是假的,则返回true。为此,我使用了[HERE]中的代码。

我的问题是:是否有任何有效的客户端方式可用于检查链接域并在新窗口/标签中打开它们,如果是其他网站(域)?像JavaScript解决方案会更好,但是用户可以再次禁用JavaScript。那么,还有其他解决方案吗?即使是JS解决方案也会很棒。忽略用户禁用。

2 个答案:

答案 0 :(得分:1)

页面上的某个位置或外部JS文件中:

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")
            && anchor.getAttribute("rel").indexOf("external") >= 0)
            anchor.target = "_blank";
    }
}

window.onload = function() {
    externalLinks();
};

然后,任何外部链接都需要在标记中包含rel="external"。例如:

<a href="http://example.com" class="sample" rel="external">Click here</a>!

这种方法的主要优点是,即使使用XHTML Strict doctype,也不会导致任何验证错误。用户还可以通过简单地禁用JS来轻松阻止在新窗口中打开链接。

如果您需要自动(和客户端)决定外部/内部,您可以更改externalLinks的逻辑,以决定href属性而不是rel属性。当然,如果您已经在代码隐藏中使用了外部/内部逻辑功能,我建议使用该信息以适当的语义(使用rel)呈现锚点,而不是在客户端中重写几乎相同的代码 - 方JS。

答案 1 :(得分:0)

尝试将链接网址的主机部分(www.wrangle.in)与功能逻辑中的以下内容进行比较。

string currentURL = HttpContext.Current.Request.Url.Host;

我不建议比较名称(即http或https),你可以使用子串函数进行拆分。

对于客户端

var homeURL = document.location.hostname;
$('a').each(function() {

   if ( $(this+'[href*='+homeURL+']')) {
       $(this).attr('target','_self');
   }else{
       $(this).attr('target','_blank');
} });

此链接可帮助您了解Url Parts