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

时间:2018-01-18 23:09:09

标签: windows-10 internet-explorer-11 office-js excel-2016

如果我尝试在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也无法像我期望的那样解决我的盒子上的问题。

更新 我的CachePath注册表项的图像:CachePath is set to LocalLow

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

简答:

  1. 关闭IE和Excel并运行此命令:

    icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L
    
  2. 仍然不能正常工作?打开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
    
  3. 仍然不能正常工作?从注册表中删除整个Internet Explorer文件夹:

    Computer\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer
    
  4. 更长的答案:

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

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

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

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

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

        icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L
        
      • 此处有更多信息:https://stackoverflow.com/a/20848924/3806701

      • 如果在管理员模式下运行excel时工作正常,则可能是问题所在。 (管理员用户运行高度完整,不会出现这些问题)
    2. 不知何故,IE11正在尝试将localStorage写入DOMStore目录,但是在LOCAL文件夹下。

      • IE在注册表中查找应该将localStorage写入的路径地址(并且可以根据IE运行的模式/设置进行更改)。
      • 有时候这条道路搞砸了,需要修理。这里的答案显示了在注册表中您可以将Local更改为LocalLow的位置,以便它写入正确的DOMStore文件夹:https://stackoverflow.com/a/23583134/3806701
      • 这里最大的问题是,你怎么能知道它首先要写在哪里?使用这个很酷的工具Process Monitor,您可以看到iexplore.exe进程中发生了什么,并查看它查找/获取的确切注册表项以及它尝试写入的确切位置:https://docs.microsoft.com/en-us/sysinternals/downloads/procmon {{ 3}}
    3. 最后,如果上述解决方案都没有解决问题并且注册表的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更好,下次启动时它会认为已经重新安装并正确设置注册表文件夹...