如何跟踪javascript行为的起源,特别是在我的URL中添加哈希

如何跟踪javascript行为的起源,特别是在我的URL中添加哈希,javascript,debugging,hash,Javascript,Debugging,Hash,有人编写了一些错误代码,导致在我们网站上的一些URL的末尾添加了哈希。这也会产生一个没有散列的额外历史记录项,因此用户必须回击两次,而他们本应该只回击一次 在Chrome的开发人员控制台中,我尝试搜索元素和所有源(ctrl-shift-f)中的“历史”(仅使用一次,没有明显关联),以及“#”、“哈希”和其他内容,但我没有找到将哈希符号添加到url和更改历史的内容 有没有办法追踪到这个 编辑: 我尝试在Chrome的Sources选项卡中设置断点,选中EventListenerBreakpoint

有人编写了一些错误代码,导致在我们网站上的一些URL的末尾添加了哈希。这也会产生一个没有散列的额外历史记录项,因此用户必须回击两次,而他们本应该只回击一次

在Chrome的开发人员控制台中,我尝试搜索元素和所有源(ctrl-shift-f)中的“历史”(仅使用一次,没有明显关联),以及“#”、“哈希”和其他内容,但我没有找到将哈希符号添加到url和更改历史的内容

有没有办法追踪到这个

编辑:

我尝试在Chrome的Sources选项卡中设置断点,选中EventListenerBreakpoints/Load/hashchange下的框。但铬并没有停止。我不知道为什么

但是下面的代码确实可以在
hashchange
上停止脚本执行

在添加哈希之前,我在Chrome中设置了一个断点,然后在控制台中添加了以下内容:

jQuery(window).on('hashchange',function(){ 
        debugger;
});
然后我继续编写脚本,脚本再次暂停,大概是在添加哈希之后(现在就在那里)


现在如何查看当前的执行状态?谁触发了hashchange?

将这行JS添加到它将始终执行的位置:

jQuery('a').on('click',function( e ) { 
    e.preventDefault();
});
或使用以下命令跟踪特定元素:

jQuery('a').on('click',function( e ) { 
    console.log(this);
});

但是,即使您跟踪它,您也无法执行任何操作,因为如果您删除href=“#”单击“a”将刷新页面,因此您无论如何都需要防止“a”标记默认行为

将这一行JS添加到它将始终执行的某个位置:

jQuery('a').on('click',function( e ) { 
    e.preventDefault();
});
或使用以下命令跟踪特定元素:

jQuery('a').on('click',function( e ) { 
    console.log(this);
});


但是,即使您跟踪它,您也无法执行任何操作,因为如果您删除href=“#”单击“a”将刷新页面,因此您需要防止“a”标记的默认行为,不管怎样

它是否是带有
href=“#”
的链接?这就解释了为什么JS文件中没有它的踪迹。@11684有这样的链接,但一定有什么东西触发了对它们的点击。有没有办法追踪电脑上
的来源('hashchange'
?据我所知不是这样;在调用事件处理程序时,有问题的代码不再是当前的执行状态,事件处理程序是。这是因为JavaScript是单线程的,所以要执行事件处理程序,JavaScript解释器必须完成其他代码(在本例中,代码添加了哈希)首先,在执行您的事件处理程序之前。@11684那么您如何跟踪这样的问题?除了在代码中搜索数小时或逐行执行之外,必须有其他方法,对吗?它可能是与
href=“#”的链接吗
?这就解释了为什么JS文件中没有它的踪迹。@11684有这样的链接,但一定是有什么东西触发了对它们的点击。有没有办法在JS文件中追踪
的来源('hashchange'
?据我所知不是这样;在调用事件处理程序时,有问题的代码不再是当前的执行状态,事件处理程序是。这是因为JavaScript是单线程的,所以要执行事件处理程序,JavaScript解释器必须完成其他代码(在本例中,代码添加了哈希)首先,在执行您的事件处理程序之前。@11684那么您如何跟踪这样的问题呢?除了在代码中搜索数小时或逐行执行之外,必须有其他方法,对吗?href属性中的哈希也可以替换为
onclick=“return false”
,其操作与e.preventDefault()完全相同在事件处理程序中。这将需要在每个though@Gurami我不担心手动点击,而是自动点击“#”或更改当前url以添加“#”。只加载了1个页面,但历史记录中添加了两项。@GuramiDagundaridze附加到click的日志记录不起作用。它可能不是一个click,而是一个cuplrit。但这样做给了我整个窗口对象:
jQuery(window)。on('hashchange',function(){console.log(this);});
但我不知道如何处理它。现在在右边,我看到
暂停在“hashchange”事件侦听器上,在它下面,我看到一个a,其属性为
newURL`和
oldURL
。我试图通过检查这个对象来了解更多信息。href属性中的哈希也可以被替换
onclick=“return false“
,执行与事件处理程序中的e.preventDefault()完全相同的操作。这将需要在每次单击时手动添加到though@Gurami我不担心手动点击,而是自动点击“#”或更改当前url以添加“#”。只加载了1个页面,但历史记录中添加了两项。@GuramiDagundaridze附加到click的日志记录不起作用。它可能不是一个click,而是一个cuplrit。但这样做给了我整个窗口对象:
jQuery(window)。on('hashchange',function(){console.log(this);});
但我不知道该怎么办。现在在右边,我看到
暂停在“hashchange”事件侦听器上,在它下面,我看到一个属性为a的a
newURL`和
oldURL
。我试图通过检查这个对象来了解更多信息。