【问题标题】:Javascript history.PushState not working?Javascript history.PushState 不起作用?
【发布时间】:2013-11-19 18:54:44
【问题描述】:

我这里有这段代码:

<script type="text/javascript">
function goFunction(){
  history.pushState("google.ca", "GOOGLE CANADA", "http://www.google.ca");
  return event.preventDefault();
}
</script>

<a href="#" onclick="javascript:goFunction();">GO</a>

当我点击我的链接时,我的错误日志中出现了这个错误:

 Uncaught SecurityError: A history state object with URL 'http://www.google.ca/' cannot be created in a document with origin 'http://cowelllaserhair.com'. 

您可以在以下位置查看:http://cowelllaserhair.com/test.html

我做错了什么?

我需要参考什么吗?

谢谢, J

【问题讨论】:

  • 为什么要将应用的状态推送到不同的站点?

标签: javascript syntax browser-history


【解决方案1】:

pushState 的 URL 参数应该是相对于当前页面的,或者是您自己域中的绝对 URL。您不能跨域推送状态 - 这将是一个重大的安全漏洞。

MDN documentation 说:

新历史条目的 URL 由该参数给出。请注意,浏览器在调用 pushState() 后不会尝试加载此 URL,但它可能会在稍后尝试加载 URL,例如在用户重新启动浏览器之后。新的 URL 不需要是绝对的;如果是相对的,则相对于当前 URL 进行解析。新 URL 必须与当前 URL 同源;否则, pushState() 将抛出异常。该参数是可选的;如果未指定,则设置为文档的当前 URL。

URL 参数通常留空或在您自己的网站上设置相对 URL,例如 #/hello

【讨论】:

  • 当您的 to 字符串格式不正确时,也会发生这种情况。例如,如果您通过将对象(例如路径和状态)传递给 来解析路径,请注意您的斜线 - 如果您正在插值,很容易忘记它们变量到你的路径。但是,在您的情况下,所选答案显然是这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多