如何检查JavaScript中的URL是否已更改?例如,使用AJAX的GitHub等网站会在#符号后附加页面信息,以创建唯一的URL而无需重新加载页面.检测此URL是否更改的最佳方法是什么?
onload再次调用事件?我正在为一个网站编写Greasemonkey脚本,该脚本在某些时候会修改location.href.
如何在页面上进行更改window.addEventListener时获得事件(通过或类似的东西)window.location.href?我还需要访问指向新/修改的URL的文档的DOM.
我已经看到了其他涉及超时和轮询的解决方案,但我想尽可能避免这种情况.
为什么
$(function () {
$(window).bind('popstate', function () {alert('pop');});
window.history.pushState(null, '', '/foo');
});
Run Code Online (Sandbox Code Playgroud)
不警惕pop?
注意:测试最新的chrome
-
据MDN称:
每次活动历史记录条目更改时,都会将popstate事件分派到窗口.如果正在激活的历史记录条目是通过调用pushState创建的或受对replaceState的调用影响而创建的,则popstate事件的state属性包含历史记录条目的状态对象的副本.
那么为什么我pushState不会触发这个popstate事件呢?
我在test.js中有以下代码,它在</ body>之前运行:
alert('stovetop');
alert(greasy);
Run Code Online (Sandbox Code Playgroud)
我在test.user.js中有以下代码:
(function () {
'use strict';
var greasy = 'greasy variable';
document.title = 'greasy title';
}());
Run Code Online (Sandbox Code Playgroud)
'炉灶'得到警报,所以我知道页面javascript工作,并document.title得到更改,所以我知道脚本javascript工作.但是,在网页上我收到错误:
错误:ReferenceError:未定义greasy源文件:/test.js
如何从网页上访问由Greasemonkey设置的变量,反之亦然?
如果我当前位于该 URL"example.com/somepage#somehash"并调用window.location.hash = "anotherhash",则该 URL 会更改为"example.com/somepage#anotherhash"。这会触发该window.hashashchange事件。
如果我当前位于该 URL"example.com/somepage?a=1&b=two"并调用window.location.replace("?one=1&two=2"),则 URL 会更改为"example.com/somepage?one=1&two=2"。
我读过MDN 文档,但我找不到一个可以触发的。
我说我想确保不会触发页面重新加载是我的错。我想使用新的 URL 根据查询字符串更新页面,例如使用 AJAX 请求。window.history.pushState是另一种选择,但据我所知,它也不会触发事件。
我看了@Taki的回答。我创建了一个repl.it,因为当您进入全页视图时,您可以看到 URL 发生变化。但是,即使preventDefault页面正在重新加载,卸载事件回调中发布到页面的信息也会消失这一事实证明了这一点。因此,这不能用于客户端路由,这是我的目标。
索引.html
<button id="myBtn">Click me</button>
<div id="info"></div>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="index.js"></script>
Run Code Online (Sandbox Code Playgroud)
索引.js
console.log("index.js");
$('#myBtn').on('click', function(e)
{
console.log("button clicked")
window.location.replace("?one=1&two=2")
console.log(window.location.href);
});
$(window).on("beforeunload", function (event)
{
event.preventDefault(); // just to pause and see the cosdole
console.log("beforeunload"); …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以使用MutationObserver监视window.location.pathname(或window.location.hash)中的更改。
javascript ×5
dom-events ×2
greasemonkey ×2
ajax ×1
dom ×1
firefox ×1
hashchange ×1
history.js ×1
html ×1
html5 ×1