尝试设置Cookie时出现未捕获的错误:SECURITY_ERR:DOM异常18


Answers:


151

您最有可能在file://无法设置Cookie 的URI方案上在本地文件上使用它。将其放在本地服务器上,以便可以使用http://localhost


26
从file://加载时,在画布上使用getImageData()对我来说也发生了。
Timmmm 2011年

6
调用从另一个主机加载的图像的getImageData()时也会发生良好的调用。将文件移动到相同的域/协议/等。修复它。
mike clagg

28
专家提示:如果您安装了Python,只需键入python -m SimpleHTTPServer站点的根目录,然后将其托管在localhost:8000即可
Thomas

5
对于Python 3,要获得相同的效果,您需要做python -m http.server 8000
Kat

2
如果您是iOS开发人员,您可能想知道我在将HTML直接加载到UIWebView控件后尝试使用localStorage时也遇到了此问题。stackoverflow.com/questions/11371441/…–
费利佩·萨比诺

18

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


4
使用--allow-file-access-from-files(请注意,现在是复数形式)时,您必须记住,该开关仅在没有其他Chrome实例正在运行时才生效。
BlueMonkMN 2011年

11

您也可以通过用内联Base64表示形式替换图像来“修复”此问题:

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


4
知道如何以不引发此错误的方式获取画布的base64表示形式吗?
devios1 2012年

var canvas = document.createElement(“ canvas”); canvas.width = 128; canvas.height = 128; var ctx = canvas.getContext('2d'); ctx.fillRect(25,25,100,100); ctx.clearRect(45,45,60,60); ctx.strokeRect(50,50,50,50); 返回ctx.getImageData(0,0,128,128);
Ray Hulha

10

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

下面是使用本地存储的一种解决方法,就是使用来运行Chrome --allow-file-access-from-filess结尾处带有),但只允许使用一个Chrome实例,这对我来说不太方便。因此,我使用的是Chrome Canary,允许访问文件。

BTW在Firefox中没有这样的问题。


我希望我可以不止一次投票。您的回答只是节省了我大量时间,将我的头撞在屏幕上!非常感谢!!
Jaime

@Jaime我的荣幸;)
Endre Simo


4

使用历史记录API时遇到此问题。

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

即使使用本地服务器(localhost),也要在URL中添加“ http://”,以便具有类似以下内容:

http://localhost...

3

对于该--allow-file-access-from-files解决方案,我并不完全满意,因为我使用的是Chrome浏览器作为主要浏览器,并且对于我要打开的此漏洞并不太满意。

现在,我将Canary(chrome beta版)用于带有标记的开发。我真正的博客只有Chrome版本:两种浏览器不共享标志!


1
对那些好奇的人来说,它现在是--allow-file-access-from-files(带有s)
Shane Reustle 2011年

2

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

第一次运行:

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

稍后运行:

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

请求权限功能需要从用户引起的事件中触发,否则将不会显示。


1

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

return File(returnFilePath, contentType, fileName);

会在移动浏览器中显示错误,其中

return File(returnFilePath, contentType);

不会。

我什至不记得为什么我以为自己在做一个好主意。我猜想变得聪明一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.