我有一个网站,当用户点击链接时,如果它是我网站的页面,则会在同一窗口中打开,如果域名不同,则在新窗口中打开。但我这样做是这样的:
<a href="http://www.wrangle.in" target="<%=checkdomain("http://wwww.wrangle.in")?"_parent":"_blank" %>">Open Link</a>
checkdomain()
检查链接的域名,如果我的网站是假的,则返回true。为此,我使用了[HERE]中的代码。
我的问题是:是否有任何有效的客户端方式可用于检查链接域并在新窗口/标签中打开它们,如果是其他网站(域)?像JavaScript解决方案会更好,但是用户可以再次禁用JavaScript。那么,还有其他解决方案吗?即使是JS解决方案也会很棒。忽略用户禁用。
答案 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。