昨天我安装了Windows 8,现在我正在尝试了解访问localstorage时收到“拒绝访问”消息的原因。该页面与浏览器(http:// localhost)在同一台PC上提供。我的感觉是IE 10中的一个安全设置是错误的,但我还没弄清楚哪一个。
触发错误的JavaScript代码行是:
if(window.localStorage.getItem('phone') == null)
该代码在最新版本的Chrome中运行良好。
答案 0 :(得分:71)
我们的用户在使用Windows 10和Windows 10的LocalStorage功能(包括Twitter)时遇到了网站问题。当打开F12开发人员工具访问其中一个网站时,控制台上会出现SCRIPT5: Access is denied
消息
使用Microsoft支持后,我们确定了原因。事实证明,用户个人资料中的C:\Users\username\Appdata\LocalLow
文件夹设置存在问题。
计算机上的每个文件夹都具有完整性设置。有关此设置目的的更多信息,请访问:http://msdn.microsoft.com/en-us/library/bb625964.aspx
每个用户配置文件中AppData\LocalLow
文件夹(及其子文件夹)的完整性设置应设置为“低”(因此名称)。在我们的示例中,未在此文件夹上正确设置完整性级别。要解决此问题,请在命令提示符窗口中运行以下命令:
icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L
(如果计算机上有多个用户帐户且其他用户遇到同样的问题,则需要在每个受影响的用户帐户下运行该命令。)
首先如何更改此设置?在我们的例子中,它是由我们部署到工作站的自定义Windows 8映像中的问题引起的。对于其他有问题的人,我的研究表明,使用“系统清洁”工具可能是罪魁祸首。
答案 1 :(得分:6)
毫无疑问,可能有许多相同症状的原因,但这是解决这个问题的原因。
我只有IE11中的一台,其中IE11的症状是“拒绝访问”#34;从其他信誉良好且表现良好的网站尝试任何涉及window.localStorage
的JavaScript。使用Process Explorer显示,当taskhost.exe(代表Internet Explorer)尝试打开DOMStore\container.dat
进行通用读写时,近端原因是ACCESS DENIED。实际上,情况要糟糕得多:如果我删除container.dat
,则会发生相同的ACCESS DENIED,即使文件不再存在。并且,如果我删除了(隐藏的)DOMStore
文件夹,当taskhost.exe尝试重新创建它时,也会收到ACCESS DENIED。
经过两天追逐虚假线索后,最终的解决方案是:
注册表项:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\LowCache\Extensible Cache\DOMStore\CachePath
(请注意该字符串中的LowCache
)被错误地设置为:
%USERPROFILE%\AppData\Local\Microsoft\Internet Explorer\DOMStore
应该是:
%USERPROFILE%\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore
结果是低完整性localStorage请求被定向到AppData磁盘存储的中等完整性区域,从而生成ACCESS DENIED错误,并终止使用JavaScript window.localStorage
。
此注册表项多年来一定是错误的:可能是对错误平台预览的热情接受的副作用等等。完全删除并重新安装IE11后,此错误仍然存在。
中等完整性缓存有一个类似的注册表项:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Extensible Cache\DOMStore\CachePath
并且正确地保留为:
%USERPROFILE%\AppData\Local\Microsoft\Internet Explorer\DOMStore
不应该改变。
答案 2 :(得分:3)
尝试在“安全”子列表的“高级”选项卡下的IE设置中启用“增强保护模式”。这将启用Microsoft XSS筛选器。我在登录SE时遇到了类似的问题,并且获取了Google +通知,而我的第一个解决方法是使用管理员权限启动IE。但我认为EP模式也可以解决你的问题。
答案 3 :(得分:3)
localStorage数据存储在以下文件夹中的XML文件中: C:\ Users \ [USERNAME] \ AppData \ Local \ Microsoft \ Internet Explorer \ DOMStore
重现问题时文件活动的配置文件可以告诉您问题是由于缺少文件访问权限还是甚至是反病毒程序引起的。
我可以通过将只读属性添加到“DOMStore \ container.dat”来重现错误。您应该检查是否正确设置了所有文件/文件夹权限和属性。在我的机器上,管理员和我自己的帐户拥有上述文件夹的完全权限。
答案 4 :(得分:2)
转到工具/ Internet选项/高级,然后在'安全'下选择'启用DOM存储'复选框。这应该解决问题
答案 5 :(得分:0)
我将所涉及的网站添加到IE的“可信站点”部分,但未再次收到错误。
答案 6 :(得分:0)
此问题也可能是由于注册表项丢失或损坏引起的。如果a reset无法解决问题,LocalLow
folder has the correct integrity level和DOMStore
registry value is correct,请运行以下命令在配置文件中重新注册IE:
32位操作系统:
C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
64位操作系统:
C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
C:\Windows\SysWOW64\ie4uinit.exe -BaseSettings
有关详细信息,请参阅IE MSDN blog。
答案 7 :(得分:0)
除了这里已经非常好的答案外,我还要补充一点。就我而言,Windows%LOCALAPPDATA%目录结构上的NTFS权限以某种方式被破坏了。
要诊断此问题。我创建了一个新的Windows帐户(配置文件),该帐户可以与localStorage一起正常使用,因此,我艰苦地遍历了各自的%LOCALAPPDATA%\ Microsoft \ Internet Explorer树以查找差异。
我找到了这个宝石:
C:\Users\User\AppData\Local\Microsoft>icacls "Internet Explorer"
Internet Explorer Everyone:(F)
我不知道如何将权限完全打开!
更糟糕的是,所有子目录均具有所有权限。难怪DOMStore无法访问!
另一个帐户的工作权限为:
NT AUTHORITY\SYSTEM:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
my-pc\test:(OI)(CI)(F)
匹配上级目录的权限。
因此,出于懒惰,我通过让所有目录“ Internet Explorer”并继承了权限来解决了该问题。正确的做法是手动应用每个权限,而不依赖于继承函数。但是要检查的一件事是,如果遇到此问题,请使用%LOCALAPPDATA%\ Microsoft \ Internet Explorer的NTFS权限。如果DOMStore的权限被破坏,则所有访问localStorage的尝试都将被拒绝访问。