未捕获的安全错误:无法在“历史记录”上执行“replaceState”:无法在原始“null”的文档中创建

Posted

技术标签:

【中文标题】未捕获的安全错误:无法在“历史记录”上执行“replaceState”:无法在原始“null”的文档中创建【英文标题】:Uncaught SecurityError: Failed to execute 'replaceState' on 'History': cannot be created in a document with origin 'null' 【发布时间】:2015-12-03 21:40:18 【问题描述】:

我真的没有收到这个 chrome 错误:

未捕获的安全错误:无法在“历史记录”上执行“replaceState”:无法在来源为“null”的文档中创建

在 Edge、Firefox 和 IE 中没有错误。

我使用 jquery 1.11.1 和 jquery mobile 1.4.5。

这是我的索引文件:

<!DOCTYPE html>
<html>
<head>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" href="css/xy.min.css" />
    <link rel="stylesheet" href="css/jquery.mobile.icons.min.css" />
    <link rel="stylesheet" href="css/jquery.mobile.structure-1.4.5.min.css" />

    <title></title>

</head>

<body>
    <div data-role="page">
       <div data-role="header" data-add-back-btn="true">
           <p align="center">Test</p>
       </div>

        <ul data-role="listview" data-filter="true" data-filter-placeholder="Kategorie suchen"  data-inset="true" data-count-theme="b">
            <li><a href="assets/beck/index.html" data-rel"dialog" rel ="external">Bäckereien </a></li>
        </ul>

    </div>
    <script src="js/jquery-1.11.1.min.js"></script>
    <script src="js/jquery.mobile-1.4.5.min.js"></script>
</body>

</html>

非常感谢任何帮助!

【问题讨论】:

没有您的 javascript 代码,我们将无法为您提供太多帮助... @D4V1D 我没有更改 jquery 我只是加载它。 您是否正在运行网络服务器(本地或非本地)? @A.Wolff 不,我不跑。它以前没有一个工作。我应该使用一个吗? @olivier 你应该使用一个,听起来像是新更新 chrome 安全功能的变化(也许是为了修复一个安全漏洞,谁知道?)。在本地服务器上测试它,如果它解决了您的问题,请不要犹豫,在这里发布答案。如果没有,请不要犹豫,发表评论 【参考方案1】:

添加这个:

<script>
    $(document).bind('mobileinit',function()
        $.mobile.changePage.defaults.changeHash = false;
        $.mobile.hashListeningEnabled = false;
        $.mobile.pushStateEnabled = false;
    );
</script> 

就在 jquery.mobile-1.4.5.min.js 之前

这适用于 Windows 上的 android WebViewClient 和 Chrome。

【讨论】:

感谢这个脚本。我担心我的 Android 应用程序会变得无用(仅使用带有本地文件的 Webview) 是的,经过几个月的工作,我能体会到那种感觉。让我们希望他们不会改变其他任何事情。 我发现脚本中只需要$.mobile.pushStateEnabled = false; 谢谢。你真的帮了我! 我只是按照 html 末尾的建议添加了 $.mobile.pushStateEnabled = false; 并且它起作用了。【参考方案2】:

我的解决方案是我必须运行一个网络服务器。这是一项新的 chrome 安全功能,不会根据 Chromium Bug Post 进行更改。

感谢 A. Wolff!

【讨论】:

哪里说这个错误不会被修复?我发现以下问题仍然存在 - code.google.com/p/chromium/issues/detail?id=528681 最快最简单的方法是:python -m SimpleHTTPServer 8080 @zumek 这不是错误。他们决定了。【参考方案3】:

这也可能是在处理本地 HTML 文件时由 Turbolinks (HTML pushState) 引起的。

【讨论】:

以上是关于未捕获的安全错误:无法在“历史记录”上执行“replaceState”:无法在原始“null”的文档中创建的主要内容,如果未能解决你的问题,请参考以下文章

sdk-3.1.1.js:1 未捕获类型错误:无法在“URL”上执行“createObjectURL”:未找到与提供的签名匹配的函数

未捕获的安全错误:无法从“HTMLIFrameElement”读取“contentDocument”属性

未捕获的 DOMException:无法在“IDBObjectStore”上执行“删除”:事务未处于活动状态

未捕获的 DOMException:无法在“范围”上执行“setStart”:偏移量大于节点的长度

未捕获的类型错误:无法读取未定义的属性“toLowerCase”

Vimeo 视频在本地工作,但不能在实时网站上工作:未捕获的安全错误:iframe 的来源错误