【发布时间】: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