Javascript IE10中本地存储的访问被拒绝

Javascript IE10中本地存储的访问被拒绝,javascript,local-storage,access-denied,internet-explorer-10,Javascript,Local Storage,Access Denied,Internet Explorer 10,昨天我安装了Windows 8,现在我正试图理解为什么在访问本地存储时收到“拒绝访问”消息。该页面与浏览器在同一台PC上提供(http://localhost). 我的感觉是IE10中的一个安全设置是错误的,但我还没有弄清楚是哪一个 触发错误的JavaScript代码行为: if(window.localStorage.getItem('phone') == null) 该代码在最新版本的Chrome中运行良好。尝试在IE设置中的“高级”选项卡下的“安全”子列表中启用“增强保护”模式。这将启用

昨天我安装了Windows 8,现在我正试图理解为什么在访问本地存储时收到“拒绝访问”消息。该页面与浏览器在同一台PC上提供(http://localhost). 我的感觉是IE10中的一个安全设置是错误的,但我还没有弄清楚是哪一个

触发错误的JavaScript代码行为:

if(window.localStorage.getItem('phone') == null)

该代码在最新版本的Chrome中运行良好。

尝试在IE设置中的“高级”选项卡下的“安全”子列表中启用“增强保护”模式。这将启用Microsoft XSS筛选器。我在登录SE和获取google+通知时遇到了类似的问题,我的第一个解决方法是使用管理员权限启动IE。但我认为EP模式在你的情况下也会起作用


相关链接:

马克·鲁西诺维奇总是说:“有疑问时,请使用”:

localStorage数据存储在以下文件夹中的XML文件中: C:\Users\[USERNAME]\AppData\Local\Microsoft\internetexplorer\DOMStore

在复制问题时,文件活动的配置文件可以告诉您问题是否是由于缺少文件访问权限或甚至可能是防病毒程序造成的


我可以通过将只读属性添加到“DOMStore\container.dat”来重现错误。您应该检查是否正确设置了所有文件/文件夹权限和属性。在我的计算机上,管理员和我自己的帐户对上述文件夹拥有完全权限。

我们的用户在使用IE 10的Windows 8上的LocalStorage功能(包括Twitter)时遇到问题。在F12开发者工具打开的情况下访问其中一个站点时,控制台上会出现一条
SCRIPT5:Access is denied
消息

在与Microsoft支持部门合作后,我们确定了原因。原来是用户配置文件中
C:\Users\username\Appdata\LocalLow
文件夹的设置有问题

计算机上的每个文件夹都有完整性设置。有关此设置用途的更多信息,请参见:

每个用户配置文件中
AppData\LocalLow
文件夹(及其子文件夹)上的完整性设置应设置为“低”(因此得名)。在我们的示例中,此文件夹上的完整性级别设置不正确。要纠正此问题,请在命令提示符窗口中运行以下命令:

icacls%userprofile%\Appdata\LocalLow/t/setintegritylevel(OI)(CI)L

(如果计算机上有多个用户帐户,而其他用户有相同问题,则需要在每个受影响用户的帐户下运行该命令。)


至于这个设置最初是如何改变的?在我们的例子中,它是由我们部署到工作站的自定义Windows 8映像中的问题引起的。对于其他有此问题的人,我的研究表明,可能是使用“系统清理器”实用程序造成的。

转到工具/互联网选项/高级,然后在“安全”下选中“启用DOM存储”复选框。这应该可以解决问题

毫无疑问,相同症状可能有很多原因,但以下是我解决这个问题的方法

我只是许多Windows 7 PC中的一台,IE11在尝试任何涉及
window.localStorage
的JavaScript时表现出“访问被拒绝”的症状,这些JavaScript来自其他声誉良好的网站。使用Process Explorer发现,近端原因是taskhost.exe(代表Internet Explorer)试图打开
DOMStore\container.dat
进行一般读写时拒绝访问。事实上,比这更糟糕的是:如果我删除了
container.dat
,同样的访问被拒绝,即使通过文件已经不存在了。如果我删除了(隐藏的)
DOMStore
文件夹,当taskhost.exe试图重新创建它时,它也会收到拒绝访问的消息

在追踪虚假线索两天后,最终的解决方案是:

注册表项:

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
其结果是,低完整性本地存储请求被定向到AppData磁盘存储的中等完整性区域,从而产生拒绝访问错误,并停止使用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

不应更改。

我已将涉及的网站添加到IE的受信任网站部分,并且没有再次收到错误。

此问题也可能是由于注册表项丢失或损坏造成的。如果无法解决问题,则和运行以下命令以在配置文件中重新注册IE:

32位操作系统:

C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
64位操作系统:

C:\WINDOWS\system32\ie4uinit.exe -BaseSettings
C:\Windows\SysWOW64\ie4uinit.exe -BaseSettings

有关更多详细信息,请参阅。

除了这里已经非常好的答案之外,我还想补充另一个观察结果。在我的例子中,Windows%LOCALAPPDATA%目录结构上的NTFS权限以某种方式被破坏

诊断此问题。我创建了一个新的Windows帐户(配置文件),它与localStorage配合得很好,因此我费力地遍历了相应的%LOCALAPPDATA%\Microsoft\Internet Explorer树以查找差异

我发现了这个宝石:

C:\Users\User\AppData\Local\Microsoft>icacls "Internet Explorer"
Internet Explorer Everyone:(F)
我不知道权限是如何设置为完全开放的

更糟糕的是,所有子目录都关闭了所有权限。难怪这家商店无法进入

其他帐户的工作权限为:

 NT AUTHORITY\SYSTEM:(OI)(CI)(F)
 BUILTIN\Administrators:(OI)(CI)(F)
 my-pc\test:(OI)(CI)(F)
与父目录的权限匹配的

因此,在一阵懒惰中,我通过将所有目录设置为“InternetExplorer”和unde来解决这个问题