IE 11/Office.js:尝试使用 localStorage 时拒绝访问

IE 11/Office.js: Access is Denied trying to use localStorage

如果我在 Excel 2016(桌面版)中尝试 运行 我的 office-js 加载项中的此代码,它会抛出错误并提示访问被拒绝。

ngOnInit() {
    console.log('Writing to localStorage...' );
    localStorage.setItem('foo', 'bar');
    console.log('done.');
}

但是,这只发生在一台计算机上,但在其他每台计算机上都能正常工作。此外,此代码在包括 IE 11 在内的任何浏览器中都可以正常工作 运行。此外,如果我 运行 excel 在管理员模式下,它也可以按预期工作。

在 Excel 的 IE11 沙盒实例中写入 localStorage 时有一些权限或关闭的东西,我不知道它在哪里或什么。

我想我已经尝试了对这个相关问题的所有修复,其中 none 似乎在这种情况下有所不同 (Access Denied for localstorage in IE10)。

更多背景: 最初,这在我的电脑上工作(我试图为同事修复它),但我将我的 CachePath 注册表项(如此处所述:Access Denied for localstorage in IE10)更改为 Local 而不是 LocalLow 以便能够重现我盒子上的虫子。但是,在尝试了各种方法来修复它之后,即使将该注册表项切换回 LocalLow 也无法像我预期的那样解决我的盒子上的问题。


更新: 我的 CachePath 注册表项的图像:

但是,使用进程监视器,我可以看到它使用了错误的路径并忽略了注册表项更新:

为什么忽略我的注册表更新?


有什么想法吗?

简答:

  1. 关闭 IE 和 Excel 和 运行 这个命令:

    icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L
    
  2. 还是不行?打开 regedit 并从注册表中删除这两个文件夹:

    Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings.0\Cache\Extensible Cache
    Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings.0\LowCache\Extensible Cache
    
  3. 还是不行?从注册表中删除整个 Internet Explorer 文件夹:

    Computer\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer
    

更长的答案:

通常,IE11 运行在 Excel 的保护模式下将 javascript 中 localStorage 对象中设置的任何内容写入此文件位置:

%userprofile%\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore

注意路径中的 LocalLow 文件夹。大多数程序会将数据写入本地目录(这是只保留在本地计算机上的数据与漫游数据,漫游数据将在他们登录的任何地方漫游),但 LocalLow 文件夹上的 Low 指的是某些东西 Windows 在 Vista 中被称为 "Integrity" Levels。我相信 Excel 中的保护模式,IE 只能处理低完整性级别的文件,通常这不是问题,因为 LocalLow 中的所有内容都应该是低完整性的。

  1. LocalLow 中的子文件夹以某种方式将其完整性级别设置为高于低的级别。

    • 在这种情况下,即使用户对他们尝试写入的文件拥有完全权限,如果只能处理低完整性文件的进程试图对更高完整性文件执行某些操作,他们也会被拒绝访问.
    • 通过将 LocalLow 中的所有内容设置回低完整性来解决此问题:

      icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L
      
    • 更多信息在这里:

    • 如果您在管理员模式下 运行 excel 时一切正常,这可能就是问题所在。 (管理员用户 运行 具有高完整性,不会有这些问题)
  2. 不知何故,IE11 试图将 localStorage 写入 DOMStore 目录,但在 LOCAL 文件夹下。

    • IE 在注册表中查找它应该将 localStorage 写入的路径地址(并且可以根据 mode/settings IE 在其下运行而改变)。
    • 有时路径会变得混乱,需要修复。此答案显示了在注册表中您可以将 Local 更改为 LocalLow 的位置,以便它写入正确的 DOMStore 文件夹:
    • 这里最大的问题是,您如何首先知道它试图写入的位置?使用这个很酷的工具 Process Monitor,您可以看到 iexplore.exe 进程中发生了什么,并确切地看到它正在查找的注册表项 up/getting 以及它试图写入的确切位置:https://docs.microsoft.com/en-us/sysinternals/downloads/procmonenter link description here
  3. 最后,如果none以上解决方案解决了问题,并且注册表的CachePath设置正确,路径中包含LocalLow,我在注册表中删除了以下键:

    • 可能最好先备份注册表,以防万一,作为最佳做法,同时确保并关闭 iexplore.exe 的所有实例,然后删除这些键:

      Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Internet Settings.0\Cache\Extensible Cache
      Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Internet Settings.0\LowCache\Extensible Cache
      Computer\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer
      
    • 对我来说这比 re-installing IE 好,下次启动它时它会认为它已重新安装并正确设置注册表文件夹...