使用fancybox的history.pushState错误“无法在'历史'上执行'pushState':历史记录”

时间:2015-01-26 11:57:30

标签: javascript jquery url fancybox-2 pushstate

我正在使用'fancy box'而我正在尝试将我的网址更改为 fancy box的网址,因此我尝试使用History.pushState() 但它会造成错误 错误:

  

未捕获的SecurityError:无法在“历史记录”上执行“pushState”:无法在原点为“http://localhost:28587”的文档中创建URL为“about:blank”的历史状态对象

我的代码:

            var _url = window.location.href;
            setInterval(function () {
                if (($(".fancybox-iframe").length > 0))
                   { 

                if(window.location.href != $('.fancybox-iframe').contents().get(0).location.href)
                {

                    history.pushState(null, null, $('.fancybox-iframe').contents().get(0).location.href);
                } 
                  }
                else 
                {
                  if(window.location.href != _url)
                  { 

                  history.pushState(null,null, _url);
                  } 

                }

            }, 80);

我会搜索它并找不到答案,请帮助我 或建议我做更好的解决方案。
(我发现这个:Javascript history.PushState not working?但我不明白我的代码中的答案有什么问题)

修改
另一个问题是,当我在浏览器中按“返回”时,网址会发生变化,但实际上没有加载,为什么?

1 个答案:

答案 0 :(得分:1)

history.pushState有安全限制,其中一个不允许应用程序将跨源url-s推送到历史记录。这种明显的行为,你可以阅读更多有关你链接的问题。

查看您的错误消息我猜您的源服务器是http://localhost:28587。无论如何,在回答我的评论时,你说你试图推送带有http://localhost:27477的网址。你可以注意到它们有不同的端口,从机器的角度来看肯定是不同的。

我不能推荐你绝对正确的解决方法。这取决于您的应用程序逻辑。首先,您可以使用一个端口来执行代码。其次,您可以使用某种配置为侦听两个端口的代理(如nginx)。第三,如果没有破坏应用程序的逻辑,你可以推送相对路径(/PerPage/content.php?d=1&f=1)。尝试谷歌解决方案可以接受。