我有一个Ajax繁重的应用程序,可能有一个URL,如
http://example.com/myApp/#page=1
Run Code Online (Sandbox Code Playgroud)
当用户操作站点时,地址栏可以更改为类似的内容
http://example.com/myApp/#page=5
Run Code Online (Sandbox Code Playgroud)
无需重新加载页面.
我的问题是以下顺序:
如果我检测到某个更改,JavaScript会对其进行操作.
我正在制作一个简单的Chrome扩展程序,以在YouTube播放列表中添加每个视频的长度,并在页面中插入总长度.我已经成功了,但我的脚本仅在刷新页面后才起作用,但在网站导航时却不起作用.但这不是很方便.
是否有可能在Youtube上检测页面导航并在浏览器中呈现之前将HTML插入到页面中,以便立即显示添加的内容而不会有任何延迟并且不需要刷新页面?
示例链接:https://www.youtube.com/playlist?list = PL_8APVyhfhpdgMJ3J80YQxWBMUhbwXw8B
PS我的问题与在greasemonkey脚本中显示后立即修改元素(不是在页面完全加载后)后的问题不同?因为我已经尝试过MutationObserver并且问题是相同的 - 需要刷新才能显示对网页的更改:
var observer = new MutationObserver(function(mutations) {
for (var i=0; i<mutations.length; i++) {
var mutationAddedNodes = mutations[i].addedNodes;
for (var j=0; j<mutationAddedNodes.length; j++) {
var node = mutationAddedNodes[j];
if (node.classList && node.classList.contains("timestamp")) {
var videoLength = node.firstElementChild.innerText;
observer.disconnect();
var lengthNode = document.createElement("li");
var lengthNodeText = document.createTextNode(videoLength);
lengthNode.appendChild(lengthNodeText);
document.getElementsByClassName("pl-header-details")[0].appendChild(lengthNode);
return;
}
}
}
});
observer.observe(document, {childList: true, subtree: true});
Run Code Online (Sandbox Code Playgroud) 我遇到了'popstate'事件处理程序的问题,这是我的代码:
window.addEventListener("popstate", function (event){
if (event.state) {
alert('abc')
}
});
// The data object is arbitrary and is passed with the popstate event.
var dataObject = {
createdAt: '2011-10-10',
author: 'donnamoss'
};
var url = '/posts/new-url';
history.pushState(dataObject, document.title, url);
Run Code Online (Sandbox Code Playgroud)
我预计这个代码会在执行时弹出一个警告框,但没有任何反应.
这里有什么不对吗?
谢谢.
如果我打开一个窗口(带window.open),我可以检测到它的URL何时发生变化(特定的),具体如下:
我需要这个用于身份验证.请参阅本页底部的"桌面应用".
我需要一些东西来检测网址上的更改,但页面不会回发,它会动态更改,只添加html中的div,所以URL页面是这样的
当我点击页面的另一部分时,它就是
它不仅在最后变化,而且像这样
没有做回发和重新加载JavaScript所以我的问题是,有没有办法检测这些变化?和事件监听器但如何?
我搜索并且每个人都说哈希事件,但是在任何哈希之后我没有任何值,所以它不起作用
编辑
只是为了记录,我没有页面的代码,也没有访问权限,我会更好地解释,我正在做一个后台谷歌扩展,我只是添加了一个幻灯片到现有页面,这个页面改变了我的方式我解释的方式以上.url会像每个页面一样发生变化,但是它们会更改html中的div,这样页面就不必再次收取所有内容了
我试图在facebook中对user.js进行/ message页面,但看起来像在导航从/到/消息更改时,却没有注意到.它也出现在其他内部页面中.首先我认为它是由AJAX导航引起的,但URL改变了(不是散列部分),所以这是正常的导航,对吧?
这是我使用的测试页面:
// ==UserScript==
// @name Test
// @namespace none
// @description just an alert when page changes
// @include http*://www.facebook.com/*
// ==/UserScript==
alert(location.href);
Run Code Online (Sandbox Code Playgroud)
如何正确检测页面更改?
Firefox版本:6.0.2
Greasemonkey版本:0.9.11
请注意,仅调用
history.pushState()orhistory.replaceState()不会触发popstate事件。该popstate事件将通过执行浏览器操作触发,例如单击后退或前进按钮(或调用history.back()或history.forward()在 JavaScript 中)。
我需要一种在 URL 更改时通过不触发popstate事件的方式(例如history.replaceState())来执行某些代码的方法。最好使用 MutationObserver API [1],并且绝对不要每 x 秒轮询一次 URL。
此外,hashchange不会这样做,因为我必须对URL 中的每个更改采取行动,而不仅仅是哈希部分。
那可能吗?
[1]在另一个问题上解释了为什么 MutationObserver API 对此不起作用。
(其他)相关问题:
我将如何覆盖/捕获JavaScript重定向?
例如:
window.location.href="http://example.com";
Run Code Online (Sandbox Code Playgroud)
值“ http://example.com”将被捕获并可能被更改。
Session.Abandon()当用户离开他正在观看的页面时,我需要触发.如果用户只刷新页面会话必须保留.我试图在卸载页面时执行此客户端触发ajax调用,window.addEventListener("unload", function(e)...但我无法区分用户是刷新页面还是离开页面.我目前正在使用ASP.NET MVC5.请问有什么建议吗?
javascript ×9
facebook ×2
address-bar ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
cross-domain ×1
dom ×1
dom-events ×1
events ×1
greasemonkey ×1
href ×1
html ×1
jquery ×1
redirect ×1
url ×1