如果我尝试在Excel 2016(桌面)中的office-js加载项中运行此代码,则会抛出错误并说Access被拒绝。
ngOnInit() {
console.log('Writing to localStorage...' );
localStorage.setItem('foo', 'bar');
console.log('done.');
}
然而,这只发生在一台计算机上,但在所有其他计算机上按预期工作。此外,此代码在任何浏览器(包括IE 11)中都可以正常运行。此外,如果我在管理员模式下运行excel,它也可以按预期工作。
有一些权限或某些东西已关闭,写入Excel的沙盒化IE11实例中的localStorage,我无法弄清楚它在哪里或是什么。
我想我已经尝试过对这个相关问题的每一个解决方案,但在这种情况下(Access Denied for localstorage in IE10),它们似乎没有任何区别。
更多背景资料 最初,这在我的计算机上运行(我试图为同事修复它),但我将我的CachePath注册表项(如此处所示:Access Denied for localstorage in IE10)更改为Local而不是LocalLow以便能够重现我的盒子上的小虫。但是,在尝试各种方法来修复它之后,即使将该注册表项切换回LocalLow也无法像我期望的那样解决我的盒子上的问题。
但是,使用进程监视器,我可以看到它使用了错误的路径并忽略了注册表项更新:
为什么忽略我的注册表更新?
有什么想法吗?
答案 0 :(得分:1)
简答:
关闭IE和Excel并运行此命令:
icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L
仍然不能正常工作?打开regedit并从注册表中删除这两个文件夹:
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache\Extensible Cache
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\LowCache\Extensible Cache
仍然不能正常工作?从注册表中删除整个Internet Explorer文件夹:
Computer\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer
更长的答案:
通常情况下,在Excel内的保护模式下运行的IE11会将javascript中localStorage对象中设置的任何内容写入此文件位置:
%userprofile%\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore
注意路径中的LocalLow文件夹。大多数程序都会将数据写入本地目录(用于仅保留在本地计算机上的数据与漫游的数据,无论他们在何处登录,它们都将使用其配置文件进行漫游),但LocalLow文件夹中的Low指的是Windows引入的内容。在Vista中被称为"Integrity" Levels。我相信Excel中的保护模式,IE只能使用低完整性级文件,通常这不是问题,因为LocalLow中的所有内容都应该是低完整性。
LocalLow中的子文件夹以某种方式将其完整性级别设置为高于低的值。
通过将LocalLow中的所有内容设置回LOW完整性来解决此问题:
icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L
不知何故,IE11正在尝试将localStorage写入DOMStore目录,但是在LOCAL文件夹下。
最后,如果上述解决方案都没有解决问题并且注册表的CachePath被正确设置为在路径中包含LocalLow,我删除了注册表中的以下键:
首先备份注册表可能是一个好主意,以防万一,作为最佳实践,并确保并关闭iexplore.exe的所有实例,然后删除这些键:
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Internet Settings\5.0\Cache\Extensible Cache
Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Internet Settings\5.0\LowCache\Extensible Cache
Computer\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer
对我而言,这比重新安装IE更好,下次启动时它会认为已经重新安装并正确设置注册表文件夹...