相关疑难解决方法(0)

JavaScript闭包如何工作?

您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?

我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.

javascript variables closures scope function

7644
推荐指数
82
解决办法
139万
查看次数

如何从网址获取YouTube视频ID?

我想v=id从JavaScript 获取YouTube的URL(没有jQuery,纯JavaScript).

YouTube网址格式示例

http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW

http://www.youtube.com/watch?v=u8nQa1cJyX8

或者在网址中包含视频ID的任何其他YouTube格式.

这些格式的结果

u8nQa1cJyX8

javascript regex youtube url

234
推荐指数
15
解决办法
21万
查看次数

87
推荐指数
2
解决办法
6万
查看次数

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
查看次数

是否有History.pushstate的回调?

我的Google-fu什么都没有.

当你这样做:

var stateObj = { state: "some state" };
history.pushState(stateObj, "page 2", "other.htm");
Run Code Online (Sandbox Code Playgroud)

是否有关联的窗口回调?

我知道有这个:

window.onpopstate = function() {

}
Run Code Online (Sandbox Code Playgroud)

当用户点击后退按钮时,这非常适合收听.但是,我想在任何时候听到URL的变化,我不知道该怎么做.

URL随时更改时是否存在全局回调?

javascript html5 html5-history

11
推荐指数
1
解决办法
8780
查看次数

如何检测SPA中的URL更改

注意

解决方案应该是纯Javascript - 没有外部库和框架.


在SPA中,Everything使用路由机制进行路由.我只是想听到一个网址的任何部分发生变化(不仅是哈希.我想要检测的任何变化)

以下是SPA的例子,

https://www.google.in/
https://www.google.in/women 
https://www.google.in/girl 
Run Code Online (Sandbox Code Playgroud)

现在每当网址从https://www.hopscotch.in/更改为https://www.hopscotch.in/women时,我想捕获该事件.

我试过了,

window.addEventListener("hashchange",function(event){
    console.log(this); // this gets fired only when hash changes
});
Run Code Online (Sandbox Code Playgroud)

javascript

10
推荐指数
3
解决办法
4767
查看次数

URL 参数更改时的侦听器事件

我有一个带有分页和过滤器的单页应用程序,需要检测当前 URL 何时发生变化。有没有一种简单的方法可以将侦听器添加到当前 URL 并在它更改时触发某些内容?(也没有设置间隔!)

  1. 用户登陆 www.foobar.com
  2. 用户做了某事,网址更改为 www.foobar.com?filter=hello
  3. 我的功能运行

我试过 onhashchange 和 unbeforeunload,两者都与此无关。

window.onbeforeunload = function(e) {
   alert ('url changed!');
};

window.onhashchange = function() { 
alert ('url changed!');  
}
Run Code Online (Sandbox Code Playgroud)

有没有办法向 URL 添加侦听器,并在它发生任何变化时触发某些内容?(再次,单页应用程序,所以没有刷新)

javascript jquery listener addeventlistener

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

如何通过AJAX检测网址更改而无需在jQuery中重新加载?

我有一个用户脚本(用于Chrome),我用它来为我设计duolingo的练习页面.它只应用了一行css

jQ(document).ready(function(){
    jQ('#start-button').css({"float": "left", "margin-right": "10em"});
});
Run Code Online (Sandbox Code Playgroud)

这是我第一次来到页面时工作得很好.但他们使用Ajax来避免页面重新加载.并且url 确实发生了变化,因此如果我检测到这一点,我可以刷新css更改而不会丢失此网站导航模式的格式.

有人碰巧知道检测它的好方法吗?

编辑:完整的用户脚本实现了几个首先指出的流行解决方案(这是行不通的):

// ==UserScript==
// @name         duolingo
// @namespace    http://your.homepage/
// @version      0.1
// @description  reformat /skills to not start timed practice by default
// @author       You
// @include      /^https?\:\/\/www\.duolingo\.com\/(skill|practice)?\/?.*/
// @require      https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js
// @grant        none
// ==/UserScript==

window.jQ=jQuery.noConflict(true);

jQ(document).ready(function(){
    style_duolingo();
});
jQ(window).bind('hashchange', function() {
    style_duolingo();
});
jQ(document).ajaxComplete(function() {
    style_duolingo();
});


function style_duolingo() {
    jQ('#start-button').css({"float": "left", "margin-right": "10em"});
    console.log("Tampermonkey script: wrote css change");
}
Run Code Online (Sandbox Code Playgroud)

编辑#2:

赏金奖励

请提供一个不加载外部库的工作解决方案(我想知道我缺少什么,而不是将其保存在黑盒子中),并使用事件解决问题(没有基于间隔的解决方案).如果无法使用事件(奇怪),请提供更正解决方案以及未触发事件的原因.

ajax jquery

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

检测 SPA 中的 URL 更改

我想听听不是我维护的 SPA 中的路径变化。

我在这里找到了一个解决方案:https : //stackoverflow.com/a/44819548/7042552

但是,对我来说似乎有点“hacky” - 但我的实现仍然是这样的:

let url = window.location.href;

['click','popstate', 'onload'].forEach( evt =>
        window.addEventListener(evt, function () {
            requestAnimationFrame(()=>{
                if (url !== location.href) {
                    // do stuff
                }
                url = location.href;
            });
        }, true)
    );
Run Code Online (Sandbox Code Playgroud)

是否有更好或更通用的方法来监听 SPA 中的页面加载?

javascript dom-events single-page-application

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

用于侦听YouTube HTML5播放器中的网址更改的JavaScript

我正在撰写Chrome扩展程序,因此我需要能够收听YouTube网址中的更改(即,看到您切换了视频).YouTube使这很难,因为HTML5视频播放器没有完整的页面重新加载,没有更改URL片段(不能像其他答案所建议的那样监听hashchange事件).听pushState也不起作用.我花了很多时间在这里寻找答案,以及迄今为止我见过的所有答案(除了一个 - 我真的不想使用)不起作用.

我见过的唯一答案是设置超时以每秒运行一次以查看URL是否发生了变化(丑陋!).

编辑:可能重复的问题是一个完全不同的问题 - 一个处理收听URL更改另一个涉及获取扩展加载.

问题:如何在不轮询的情况下检测YouTube HTML5视频播放器中的网址更改?

javascript youtube html5

6
推荐指数
3
解决办法
1023
查看次数