【问题标题】:HTML5 History API causes Dom Exception 18 on SOME devicesHTML5 History API 在某些设备上导致 Dom Exception 18
【发布时间】:2013-07-26 02:39:17
【问题描述】:

好的,我编写了自己的 CMS,它使用 jquery、php、.htaccess 重定向到幕后的 index.php 和 HTML5 History API。现在我遇到了我见过的最奇怪的错误。

在我的电脑、Android 手机以及我尝试过的大多数设备上,一切正常。

但是,在我朋友的一台电脑和 iPhone 上,无论我使用什么浏览器,甚至是我自己使用的最新 chrome,都会发生 Dom Exception 18(在 javascript 控制台中),并阻止所有 ajax 代码执行、中断CMS。

错误指向这一行:

History.replaceState({location:href}, "", href);

只是一个常规的 history.js 语句,可以在我的浏览器中完美运行。我实际上使用了普通的 html5 历史 API,但将其更改为 history.js 实现以查看它是否有帮助,但没有。如果我删除初始的 replaceState,当我单击任何链接时就会发生错误,因此这是触发 Dom 错误的第一个历史推送事件。

我尝试搜索 Dom Exception 18,但所有答案似乎都与特定包或操纵来自不同主机的图像有关。

您可以在www.roopesalminenjakoirat.fi 中亲自查看它是否适合您。如果发生,Dom Exception 18 应该立即出现在检查器中。它不会破坏页面,因为我在退出时不使用ajax,但如果您看到错误,请报告。

请帮忙!

【问题讨论】:

  • 呃,哇,现在我的浏览器也发生了。但只有当我从此页面中的链接打开网站时。如果我手动输入地址或刷新页面,它不会发生......:O
  • 这是一个安全问题。为什么要使用History.replaceState()
  • 我使用历史 API 通过现代触控来导航状态,它从隐藏的 div 或 ajax 加载内容并相应地更改地址栏。第一个 replaceState 设置初始状态,以便可以向后导航。如果您删除第一个 replaceState,这将无济于事。然后 DOM 异常发生在您的下一个 pushState 中。
  • 在您的链接中,这是与我的问题相关的唯一答案:stackoverflow.com/a/16432523/1213272 它建议添加 http://,但我在状态对象中使用相对链接,所以不能这样做。

标签: html jquery browser-history history.js domexception


【解决方案1】:

找到了!显然,这与是否具有“www”的基本元素有关。目前我只有<base href="http://roopesalminenjakoirat.fi" />,所以我之前没有出现过这个问题,因为我通常不输入www,但我的朋友因为他写了www而发生了这个问题!

所以答案是将基元素 www-part 与用户是否键入它进行匹配,否则 replaceState 会引发安全错误!

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2013-10-08
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多