Jquery监听器以隐身模式chrome

时间:2016-02-11 18:14:16

标签: javascript jquery google-chrome

我包含jquery并使用它在新的浏览器窗口中打开link.php的所有链接:

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
window.onload = function() {
    $('a[href*="link.php"]').attr("target", "_blank");
};
</script>

这样可行,但是当我在Chrome中以隐身模式测试它时,大约1/5的时间,它无效并在同一个窗口中打开。我很难在chrome中进行调试,因为一旦失败,我就不再在我的页面上了,无法检查js。我的下一步应该怎样才能找出问题?

1 个答案:

答案 0 :(得分:0)

在评论之外,问题是缓存。对于新的隐身窗口,缓存为空,因此网页的所有内容都需要从服务器加载(图像,电影,脚本......)。

分配给window.onload的回调将在所有这些文件完全加载后执行。因此,只要仍然加载某些内容,target就不会设置为_blank,因此点击该链接会在同一页面中打开该链接。

您只需等待页面的html代码完全加载并且DOM准备就绪,而不是等待加载所有元素。

这样做你需要听dom ready事件。在jQuery中你会这样做:

$( document ).ready( function() { 
   $('a[href*="link.php"]').attr("target", "_blank");
});

jQuery.ready()

  

[...]虽然JavaScript提供了在呈现页面时执行代码的加载事件,但在完全接收到所有资产(如图像)之前,不会触发此事件。在大多数情况下,只要完全构造DOM层次结构,就可以运行脚本。传递给.ready()的处理程序保证在DOM准备好后执行,因此这通常是附加所有其他事件处理程序并运行其他jQuery代码的最佳位置。[...]