Javascript 使用jquery在新窗口中打开不属于我的网站的所有链接
我不确定我必须在“?”中输入什么来检查网站是否是我的地址。这是否也适用于谷歌adsense广告(只是好奇,但并不重要) 我在考虑使用逻辑运算符,如“not”。那么它会检查我的网站吗?那么接下来呢???会是我的网站吗Javascript 使用jquery在新窗口中打开不属于我的网站的所有链接,javascript,jquery,adsense,logical-operators,Javascript,Jquery,Adsense,Logical Operators,我不确定我必须在“?”中输入什么来检查网站是否是我的地址。这是否也适用于谷歌adsense广告(只是好奇,但并不重要) 我在考虑使用逻辑运算符,如“not”。那么它会检查我的网站吗?那么接下来呢???会是我的网站吗 $j(!a[href=???]).click(function(){ window.open(this.href, "target=_blank"); return false; }); 那么:
$j(!a[href=???]).click(function(){
window.open(this.href, "target=_blank");
return false;
});
那么:
$j('a').live('click', function(){
if(this.href.indexOf('yourwebsite.com') == -1) {
window.open(this.href, "target=_blank");
return false;
}
});
这也可以通过正则表达式进行改进,这样它就不会捕获像这样的URL,但这是一种边缘情况。如何:
$j('a').live('click', function(){
if(this.href.indexOf('yourwebsite.com') == -1) {
window.open(this.href, "target=_blank");
return false;
}
});
这也可以通过正则表达式进行改进,这样它就不会捕获像这样的URL,但这是一种边缘情况。尝试以下方法:
$j('a')
.not('[name^="http://your.domain.com/"]')
.attr('target', '_blank');
更新
我以前的修正只有在所有URL都是绝对URL时才有效,这是一个错误的假设。请尝试以下方法:
$j('a[name^="http:"], a[name^="https:"]')
.not('[name^="http://your.domain.com/"]')
.attr('target', '_blank');
此新版本跳过所有相关URL。如果您的所有站点内URL都是相对的(即不要以https?:
开头),您可以跳过调用。而不是尝试以下操作:
$j('a')
.not('[name^="http://your.domain.com/"]')
.attr('target', '_blank');
更新
我以前的修正只有在所有URL都是绝对URL时才有效,这是一个错误的假设。请尝试以下方法:
$j('a[name^="http:"], a[name^="https:"]')
.not('[name^="http://your.domain.com/"]')
.attr('target', '_blank');
此新版本跳过所有相关URL。如果您的所有站点内URL都是相对的(即不要以https?:
开头),您可以跳过对的调用。而不是您可以设置一个类来执行此操作:
// Outbound Links
var outLinks = function() { $('a[@class*=out]').click( function(){ this.target = '_blank'; } ); }
$(document).ready(outLinks);
然后,您所需要做的就是将“out”类添加到任何链接,它将打开一个新窗口
或对于以http开头的任何链接://
$('a[href^="http://"]').prop("target", "_blank");
您可以设置一个类来执行此操作:
// Outbound Links
var outLinks = function() { $('a[@class*=out]').click( function(){ this.target = '_blank'; } ); }
$(document).ready(outLinks);
然后,您所需要做的就是将“out”类添加到任何链接,它将打开一个新窗口
或对于以http开头的任何链接://
$('a[href^="http://"]').prop("target", "_blank");
运行任何类似于$('a')
的操作都会在每个a
元素中循环-您只能在实际单击时担心它。此外,您可以只运行相对url作为您的站点,绝对url作为其他人的站点
$( document ).on( 'click', 'a', function( event ){
var $a = $( this );
// test for anything like `http://` or '//whatever' or 'ftp://'
if ( /^\w+?\:?\/\//.test( $a.attr( 'href' ) ) ){
// since this runs before the event is propagated,
// adding it now will still work
$a.prop( 'target', '_blank' );
}
});
演示:
也可以使用window.open:
$( document ).on( 'click', 'a', function( event ){
var href = $( this ).attr( 'href' );
// test for anything like `http://` or '//whatever' or 'ftp://'
if ( /^\w+?\:?\/\//.test( href ) ){
// dont follow the link here
event.preventDefault();
// open the page
window.open( href, '_blank' );
}
});
演示:运行类似于$('a')
的任何操作都将循环遍历每个a
元素-您只能在实际单击时担心它。此外,您可以只运行相对url作为您的站点,绝对url作为其他人的站点
$( document ).on( 'click', 'a', function( event ){
var $a = $( this );
// test for anything like `http://` or '//whatever' or 'ftp://'
if ( /^\w+?\:?\/\//.test( $a.attr( 'href' ) ) ){
// since this runs before the event is propagated,
// adding it now will still work
$a.prop( 'target', '_blank' );
}
});
演示:
也可以使用window.open:
$( document ).on( 'click', 'a', function( event ){
var href = $( this ).attr( 'href' );
// test for anything like `http://` or '//whatever' or 'ftp://'
if ( /^\w+?\:?\/\//.test( href ) ){
// dont follow the link here
event.preventDefault();
// open the page
window.open( href, '_blank' );
}
});
演示:您是否意识到,如果启用了弹出窗口阻止程序,您将断开所有链接?直接在HTML源代码中执行此操作要好得多,其中target=“\u blank”
将在不触发弹出窗口阻止程序的情况下工作。@Pekka因此,我看到在window.open中使用.click()会断开链接,但下面使用.attr()并添加您提到的HTML代码的方法不应断开链接,正确吗?下面添加target=“\u blank”
的方法不应该破坏它,你是对的。你意识到,如果启用了弹出窗口阻止程序,你会破坏所有链接吗?直接在HTML源代码中执行此操作要好得多,其中target=“\u blank”
将在不触发弹出窗口阻止程序的情况下工作。@Pekka因此,我看到在window.open中使用.click()会断开链接,但下面使用.attr()并添加您提到的HTML代码的方法不应断开链接,正确吗?下面添加target=“\u blank”
的方法不应该破坏它,你是对的。我尝试了这个方法,但效果不错,因为我的网站页面在新窗口中打开,这正是我试图避免的。我也不知道为什么它不起作用。我用:not vs.not()试过了,但它仍然将我页面上的每个链接都变成了target=\u空白链接。@Nils R-如果你仍然有问题,我提供了一个演示,该版本在web浏览器上的强度更低,灵活性更强。对不起,@NilsR。我的答案有缺陷,但我现在已经更新了。@Bups:^=
的意思是“从开始”。我尝试了这个方法,但效果不错,因为我的网站页面在新窗口中打开,这正是我试图避免的。我也不知道为什么它不起作用。我用:not vs.not()试过了,但它仍然将我页面上的每个链接都变成了target=\u空白链接。@Nils R-如果你仍然有问题,我提供了一个演示,该版本在web浏览器上的强度更低,灵活性更强。对不起,@NilsR。我的答案有缺陷,但我现在已经更新了。@Bups:^=
的意思是“从开始”。这实际上似乎是一个很好的方法,我能看到的唯一问题是,如果有人出于某种原因关闭了JS,那么我的所有链接都会被破坏,因为我必须遵循一个新的url模式来锚定链接。嗯?如果禁用JS,则整个方法都会失败,这就是为什么您应该将target=“blank”
添加到HTML中,而不是您的问题要求的方式:)谢谢,但我添加此JS的原因是因为有一个特定页面,我需要所有URL才能转到新窗口(每个请求),并且几乎整个页面都是动态的,但我确实可以使用target=“_blank”。这实际上似乎是一个很好的方法,我能看到的唯一问题是,如果有人出于某种原因关闭了JS,那么我的所有链接都会被破坏,因为我必须遵循锚链接的新url模式才能工作。嗯?如果禁用JS,则整个方法都会失败,这就是为什么您应该将target=“blank”
添加到HTML中,而不是您的问题要求的方式:)谢谢,但我添加此JS的原因是因为有一个特定页面,我需要所有URL才能转到新窗口(每个请求),并且几乎整个页面都是动态的,但我会尽可能使用target=“\u blank”。