Tag: popstate

window.onpopstate仅影响一个页面范围

我有一个从数据库加载动态内容的函数,当点击某些链接时调用它: jQuery的 function loadContent(href){ $.getJSON(“/route”, {cid: href, format: ‘json’}, function(results){ $(“#content_area”).html(“”); $(“#content_area”).append(results.content); reinitFunc1(); reinitFunc2(); reinitFunc3(); // history.pushState(”, ‘New URL: ‘+href, href); }); }; 我想启用pushState和onpopstate 。 我可以通过取消注释上面的history.pushState行来启用URL和浏览器历史记录更改 – 在多个页面中向前和向后导航可以正常工作。 但这不会加载内容。 前一阵子我认为我有完整的function(即导航和内容加载),并添加了以下元素: window.onpopstate = function(event) { console.log(“pathname: “+location.pathname); loadContent(location.pathname); }; 因此我尝试将它们添加到一个单独的块中: $(document).ready(function() { window.onpopstate = function(event) { console.log(“pathname: “+location.pathname); loadContent(location.pathname); }; }); 但这会导致导航时的页面范围限制为1,我无法向前导航。 如何使用上面的代码作为基础来实现导航和内容加载? 编辑 作为参考,正确的路径在浏览器历史记录中,只是它们无法导航(FF和Chrome)并且相应的内容未加载。 Firebug中没有错误。

Javascript历史状态不正确

我正在尝试使用填充当前所选选项卡的索引 history.pushState({tabSelected: 1}, null, “”); 我有一个jquery中popstate事件的处理程序,它以编程方式切换jquery ui选项卡。 $(window).bind(“popstate”, function(event) { var state = event.originalEvent.state; … } 这工作正常,浏览器和我可以使用后退和前进按钮在选项卡之间切换。 也适用于两层标签。 但在某些情况下,我想将其他状态推送到堆栈。 所以我做了以下事情: var content = { targetId : id, targetContent : $(“#myDivId”).html() }; $.extend(content, {tabSelected: currentTab}); history.pushState(content, null, “”); 我把它推到历史之前和之后看起来都很好。 检查console.log(history.state); 还尝试检查chrome控制台。 但是在我的popstate处理程序中,我没有在对象event.originalEvent.state上看到targetId,tabSelected属性。 我在对象上看到tabSelected的正确值,但由于某种原因,我看到了一个削减状态。 检查Chrome和Firefox。 无法获得正确的内容。 什么想法可能是错的? 提前致谢。 更新 还尝试在每个pushstate上递增一个全局变量并将其添加到状态。 事实certificate,对于特定情况,我提到全局变量变为值48而不是49意味着它正在拾取最后但只有一个事件。 我没有看到我的popstate处理程序被调用。 不知道发生了什么。 另一个更新 当我调用history.pushState(content,null,“”)两次时它可以正常工作。 (只在一个地方,在另一个地方,我仍然称它为一次)。 看起来由于某种原因,浏览器返回的是最后一个状态。 […]

pushState()和popState():操纵浏览器的历史记录

我正在开发一个小项目,我想在其中创建一个Ajax风格的网站。 内容加载了jQuery的load() 。 正如你们中的一些人所知,这样做的缺点是URL不会相应地改变显示的内容。 要使这项工作,您可以使用pushState() 。 因为这不支持跨浏览器,所以我使用了插件history.js 。 这很好用,但问题是我的后退和前进按钮不能正常工作,我不知道我做错了什么。 URL正在正确更改,内容也是如此,但标题根本没有变化。 对于标题,我的意思是显示为浏览器窗口的窗口(或标签)的标题。 即加载页面的或引用该页面的链接的title属性(它们是相同的)。 我认为这与我只调用我需要标题的页面部分(即通过向load()添加#content load()这一事实有关。 我仍然想要那个页面的标题。 这是我到目前为止的一个测试案例。 (自2013年12月28日起不再提供。)jQuery文件: $(document).ready(function () { var firstLink = $(“ul > li:first-child > a”); var menuLink = $(“ul > li > a”); var firstLoadedHtml = firstLink.attr(“href”) + ” #content”; $(“#sectionContainer”).hide().load(firstLoadedHtml).fadeIn(“fast”); firstLink.addClass(“active”); menuLink.click(function(e) { history.pushState(null, null, this.href); e.preventDefault(); e.stopImmediatePropagation(); var CurLink = […]

我可以阻止history.popstate在初始页面加载时触发吗?

我正在开发一个通过AJAX提供内容的网站。 如果单击菜单中的某个项目,内容div将使用$.get响应进行更新,没什么特别的。 我正在实现history.pushState以允许使用浏览器的后退/前进按钮进行导航。 我有以下内容在历史导航中加载内容: $(function() { $(window).bind(“popstate”, function() { $.getScript(location.href); }); }); 问题是,当第一次加载页面时,此函数执行$.getScript以便再次立即加载页面。 第一次加载页面时,它会呈现初始HTML视图,然后在第二次加载时呈现JS视图,因为它是一个JS请求。 如何防止此事件在具有HTML请求的页面上触发?