相关疑难解决方法(0)

如何检测JavaScript中的URL更改

如何检查JavaScript中的URL是否已更改?例如,使用AJAX的GitHub等网站会在#符号后附加页面信息,以创建唯一的URL而无需重新加载页面.检测此URL是否更改的最佳方法是什么?

  • onload再次调用事件?
  • 是否有URL的事件处理程序?
  • 或者必须每秒检查一次URL以检测更改?

javascript ajax

132
推荐指数
10
解决办法
18万
查看次数

window.location.href更改时的事件

我正在为一个网站编写Greasemonkey脚本,该脚本在某些时候会修改location.href.

如何在页面上进行更改window.addEventListener时获得事件(通过或类似的东西)window.location.href?我还需要访问指向新/修改的URL的文档的DOM.

我已经看到了其他涉及超时和轮询的解决方案,但我想尽可能避免这种情况.

javascript dom greasemonkey dom-events

62
推荐指数
10
解决办法
13万
查看次数

history.pushState不会触发'popstate'事件

为什么

$(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事件呢?

html5 history.js

18
推荐指数
3
解决办法
9884
查看次数

从Greasemonkey访问变量到页面,反之亦然

我在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设置的变量,反之亦然?

javascript firefox greasemonkey firefox-addon

9
推荐指数
1
解决办法
2万
查看次数

是否可以捕获window.location.replace事件?

如果我当前位于该 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 文档,但我找不到一个可以触发的。

  1. 有吗?
  2. 如果没有,是否有一种简单的方法来捕获该事件?

笔记:

我说我想确保不会触发页面重新加载是我的错。我想使用新的 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)

html javascript dom-events hashchange

8
推荐指数
1
解决办法
1万
查看次数

如何使用(或可能)使用MutationObserver监视window.location.pathname的更改?

我想知道是否可以使用MutationObserver监视window.location.pathname(或window.location.hash)中的更改。

javascript

5
推荐指数
2
解决办法
1230
查看次数