【问题标题】:Chrome SecurityError loading jQuery Mobile page from local file systemChrome SecurityError 从本地文件系统加载 jQuery Mobile 页面
【发布时间】:2015-09-03 21:25:21
【问题描述】:

在加载带有 jQ​​uery Mobile 引用的非常简单的 html 文件时,我在 Chrome 中收到以下错误。仅 jQuery 引用不存在该错误。

未捕获的安全错误:无法在“历史记录”上执行“replaceState”: URL 'http://stacksnippets.net/js' 的历史状态对象不能 在原点为“null”的文档中创建。

<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.js"></script>
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js"></script>
</head>
<body></body>
</html>

您还可以“运行代码 sn-p”并在控制台中查看错误。

这个错误在今天之前没有发生。我没有更改在浏览器中加载 html 文件的代码或方法。它曾经完美运行 - 我对所有 PhoneGap 应用程序使用相同的代码。

有谁知道是否有导致此 SecurityError 的 Chrome 安全更新或我是否遗漏了什么?你将如何调试这个?谢谢。

更新

我认为这个讨论指出了正在发生的事情,我怀疑这是因为使用 Web 服务器运行时不会出现错误:Origin null is not allowed by Access-Control-Allow-Origin

但我仍然想知道为什么这在过去一天发生了变化,Chrome 的安全策略是否发生了变化,或者为什么它以前可以正常工作,以及我的任何 PhoneGap 应用程序是否会受到影响。

【问题讨论】:

标签: javascript jquery google-chrome jquery-mobile


【解决方案1】:

此错误与 origin is null 错误相同。由于 Chrome 的安全功能,会发生此错误。 测试应用程序的一个简单解决方案是绕过 chrome 上的这种安全性。

步骤:

  1. 在桌面上创建 chrome 浏览器快捷方式。
  2. 关闭您机器上的所有 chrome 实例。
  3. 右键点击chrome的桌面快捷方式,点击属性。
  4. 在目标字段中,在末尾附加“-allow-file-access-from-files”。
  5. 保存并关闭属性。
  6. 只能通过此快捷方式打开 chrome。

快点,错误已经消失了。应用程序完美运行。

注意:这只是我用来在桌面浏览器上测试我的 Cordova 应用程序以进行 UI 测试的一种解决方法。

【讨论】:

  • 是的,我在其他关于这个问题的讨论中看到过这个标志,但它并没有真正回答我的问题,即为什么 Chrome 有一天会开始产生错误,而它以前可以工作。什么是“桌面浏览器”?
  • @raduation 桌面操作系统浏览器,这是为在台式计算机上运行(非独占)而设计的操作系统(将在笔记本电脑和其他一些兼容设备上运行)。相对于“手机浏览器”或“手机浏览器”等。
【解决方案2】:

临时解决方案:我已经注释掉了 jquery mobile 中的所有 history.replaceState 调用,无论如何都不需要在我的应用中操作浏览器历史记录。

我想知道这是否是 chrome 安全错误或模型以及未来的行为。

【讨论】:

  • 是的,我也有同样的想法,但我对更改代码持谨慎态度,尤其是如果我以后必须更新 jQuery Mobile。我想我可以向他们的小组提交功能请求,也可以使用 hack 版本。现在我正在使用一个 web 服务器进行开发。
  • @t2n:不要修改核心jqm。参考我的回答。只需在导入 jqm 之前添加一个脚本就可以了!!
  • 如果 JQM 在运行前检查一下就好了。
【解决方案3】:

在 Mac 上,我可以通过运行网络服务器而不是从“file://”网址加载它来解决此问题:

http://lifehacker.com/start-a-simple-web-server-from-any-directory-on-your-ma-496425450?utm_expid=66866090-49.VYy4WCNHSyuP6EmjnM93MQ.0&utm_referrer=https%3A%2F%2Fwww.google.com%2F

python -m SimpleHTTPServer 8000

在目录中应该可以通过 0.0.0.0 从 Chrome 访问

【讨论】:

  • 是的,它在 Web 服务器上运行良好。但问题是为什么它在从本地文件系统加载的 Chrome 中不起作用。
  • 同意,但是当我用谷歌搜索这个问题时,我想要一个快速而肮脏的修复,发现这个问题,并没有任何有用的信息。希望它会帮助某人
【解决方案4】:

我似乎没有同样的问题,不是在稳定版的 Chrome (45) 或 Dev 版 (47) 上。

但是,我个人也看到了 CORS 标头的问题。如果您可以使问题可靠地发生,我建议在crbug.com 提交错误,Chrome 开发人员会查看它。

【讨论】:

  • 感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2013-09-08
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多