在问这个问题之前,我对事件捕获和冒泡进行了一些研究。但是,它仍然不能解决我的问题。
我正在为该网站编写用户脚本。基本上,我不能更改网站的代码,而只能更改自己的用户脚本的代码。在我的脚本获取事件之前,网站上有捕获事件的窗口。
这是一个简化的示例:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
//I cannot change this code (it is part of the webpage):
$("p")[0].addEventListener("click",function(){
alert("p");
});
$(window)[0].addEventListener("click",function(){
alert("window");
},true);
//I can change this code (it is part of my userscript):
$("body")[0].addEventListener("click",function(){
alert("body: I want to come first");
});
});
</script>
</head>
<body>
<p>Click Here</p>
</body>
</html>
编辑:澄清
对于此示例,我希望“身体”警报优先出现,而不禁用“窗口”或“ p”警报。所以我希望结果是:
“身体”,“窗口”,“ p”
或
“身体”,“ p”,“窗口”
答案 0 :(得分:0)
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("body")[0].addEventListener("click",function(){
alert("body: I want to come first");
});
window.RemoveEventListener('click',alert,true);
//I cannot change this code (it is part of the webpage):
$("p")[0].addEventListener("click",function(){
alert("p");
});
$(window)[0].addEventListener("click",function(){
alert("window");
},true);
//I can change this code (it is part of my userscript):
});
</script>
</head>
<body>
<p>Click Here</p>
</body>
</html>
您可以使用它,因为我已禁用了事件警报,并在脚本标记的开头添加了脚本。