Я пишу сценарий Greasemonkey для сайт, который в какой-то момент изменяет location.href
.
Как получить событие (через окно . addEventListener
или что-то подобное), когда window.location.href
изменяется на странице? Мне также нужен доступ к DOM документа, указывающего на новый / измененный URL.
Я видел другие решения, которые включают тайм-ауты и опросы, но я бы хотел этого избежать, если это возможно.
Вы не можете избежать опроса, нет никаких событий для изменения href.
В любом случае использовать интервалы довольно легко, если вы не переборщите. Проверка href каждые 50 мс или около того не окажет существенного влияния на производительность, если вас это беспокоит.
А вы раньше пробовали выгрузить? Это событие запускается непосредственно перед тем, как страница ответит на запрос навигации, и это должно включать изменение href.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="Generator" CONTENT="TextPad 4.6">
<META NAME="Author" CONTENT="?">
<META NAME="Keywords" CONTENT="?">
<META NAME="Description" CONTENT="?">
</HEAD>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$(window).unload(
function(event) {
alert("navigating");
}
);
$("#theButton").click(
function(event){
alert("Starting navigation");
window.location.href = "http://www.bbc.co.uk";
}
);
});
</script>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">
<button id="theButton">Click to navigate</button>
<a href="http://www.google.co.uk"> Google</a>
</BODY>
</HTML>
Помните, однако, что ваше событие будет запускаться всякий раз, когда вы уходите со страницы, будь то из-за сценария или из-за того, что кто-то щелкает ссылку. Ваша настоящая задача - определить различные причины увольнения мероприятия. (Если это важно для вашей логики)