【问题标题】:Uncaught Error: SECURITY_ERR: DOM Exception 18 when I try to set a cookie未捕获的错误:SECURITY_ERR:当我尝试设置 cookie 时出现 DOM 异常 18
【发布时间】:2011-02-11 21:25:46
【问题描述】:

当我尝试使用 this jQuery 插件设置 cookie 时,Chrome 的开发者工具窗口出现以下错误:

未捕获的错误:SECURITY_ERR:DOM 异常 18

此错误是什么意思,我该如何解决?当我使用this jQuery 插件时,我得到了同样的错误。

【问题讨论】:

标签: javascript jquery html domexception


【解决方案1】:

您很可能通过file:// URI 方案在本地文件上使用它,该方案不能设置cookie。将其放在本地服务器上,以便您可以使用http://localhost

【讨论】:

  • 从 file:// 加载时,我在画布上使用 getImageData() 也发生了这种情况。
  • 良好的调用,在调用 getImageData() 以获取从另一个主机加载的图像时也会发生。将文件移动到相同的域/协议/等。修复它。
  • 专业提示:如果您安装了 Python,只需在您网站的根目录中输入 python -m SimpleHTTPServer,然后找到它托管在 localhost:8000
  • 对于 Python 3,要获得相同的效果,您需要执行 python -m http.server 8000
  • 如果您是 iOS 开发人员,您可能有兴趣知道我在将 HTML 直接加载到 UIWebView 控件后尝试使用 localStorage 时也遇到了这个问题。 stackoverflow.com/questions/11371441/…
【解决方案2】:

我在本地开发 HTML5 时也遇到了这个问题。 我遇到了图像和 getImageData 函数的问题。 最后,我发现可以使用 --allow-file-access-from-file 命令开关启动 chrome,从而摆脱这种保护安全性。 唯一的问题是它会使您的浏览器不那么安全,并且您不能让一个带有标志的 chrome 实例和另一个没有标志的 chrome 实例。

【讨论】:

  • 当你使用 --allow-file-access-from-files (注意它现在是复数形式)时,你必须记住,只有在没有任何其他 Chrome 实例已经运行时,该开关才会生效.
【解决方案3】:

您还可以通过将图像替换为其内联 Base64 表示来“修复”此问题:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
当您不打算在 Web 上发布页面,而是仅在本地计算机上使用它时很有用。

【讨论】:

  • 知道如何以不引发此错误的方式获取画布的 base64 表示吗?
  • var canvas = document.createElement("canvas");画布.宽度 = 128;画布.高度 = 128; var ctx = canvas.getContext('2d'); ctx.fillRect(25,25,100,100); ctx.clearRect(45,45,60,60); ctx.strokeRect(50,50,50,50); return ctx.getImageData(0, 0, 128, 128);
【解决方案4】:

面对使用 Javascript 的相同情况。不幸的是,Chrome 不允许访问存储在本地文件中的 javascript worker。

下面使用本地存储的一种解决方法是运行带有--allow-file-access-from-files(最后带有s)的Chrome,但只允许一个Chrome实例,这对我来说不太方便。出于这个原因,我使用 Chrome Canary,允许文件访问。

顺便说一句,Firefox 中没有这样的问题。

【讨论】:

  • 我希望我能多次投票。你的回答让我节省了很多时间让我的头撞到屏幕上!!非常非常感谢!
【解决方案5】:

如果您尝试使用数据 URI 方案创建 Web Worker,则会弹出此错误。

var w = new Worker('data:text/javascript;charset=utf-8,onmessage%20%3D%20function()%20%7B%20postMessage(%22pong%22)%3B%20%7D'); w.postMessage('ping');

按标准是不允许的:http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#dom-worker

【讨论】:

    【解决方案6】:

    我在使用历史 API 时遇到了这个问题。

    window.history.pushState(null, null, URL);
    

    即使使用本地服务器 (localhost),您也希望将“http://”添加到您的 URL,以便获得类似于:

    http://localhost...
    

    【讨论】:

      【解决方案7】:

      我对@9​​87654321@ 解决方案并不完全满意,因为我使用 Chrome 作为我的主要浏览器,并且对我打开的这个漏洞并不十分满意。

      现在我正在使用 Canary(chrome beta 版本)进行开发,并打开标志。 而我真正博客的纯 Chrome 版本:两个浏览器不共享标志!

      【讨论】:

      • 对于那些好奇的人来说,现在是 --allow-file-access-from-files(带 s)
      【解决方案8】:

      如果在获得许可之前使用新的(目前仅限 webkit)通知功能,也可能会收到此错误。

      第一次运行:

      <!-- Get permission -->
      <button onclick="webkitNotifications.requestPermission();">Enable Notifications</button>
      

      稍后运行:

      // Display Notification:
      window.webkitNotifications.createNotification('image', 'Title', 'Body').show();
      

      请求权限函数需要由用户引起的事件触发,否则不会显示。

      【讨论】:

        【解决方案9】:

        当我使用 ASP.NET MVC 返回带有重载的 FileResult 时,我在移动 Safari 中遇到了该错误,该重载返回的文件的文件名与原始文件名不同。所以,

        return File(returnFilePath, contentType, fileName);
        

        会在移动 safari 中给出错误,其中

        return File(returnFilePath, contentType);
        

        不会。

        我什至不记得为什么我认为我正在做的事情是个好主意。我猜是想变得聪明。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-08
          • 1970-01-01
          • 1970-01-01
          • 2011-07-27
          • 2015-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多