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

Windows 10 IE 11/Office.js:尝试使用localStorage时拒绝访问,windows-10,internet-explorer-11,office-js,excel-2016,Windows 10,Internet Explorer 11,Office Js,Excel 2016,如果我尝试在Excel 2016(桌面)中的office js加载项中运行此代码,它会抛出一个错误并表示访问被拒绝 ngOnInit() { console.log('Writing to localStorage...' ); localStorage.setItem('foo', 'bar'); console.log('done.'); } 但是,这只在一台计算机上发生,但在其他计算机上却能正常工作。此外,该代码在任何浏览器(包括IE11)中运行时都能很好地工作。

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

ngOnInit() {
    console.log('Writing to localStorage...' );
    localStorage.setItem('foo', 'bar');
    console.log('done.');
}
但是,这只在一台计算机上发生,但在其他计算机上却能正常工作。此外,该代码在任何浏览器(包括IE11)中运行时都能很好地工作。此外,如果我在管理员模式下运行excel,它也会正常工作

在Excel的IE11沙盒实例中写入localStorage时,有一些权限或某些内容被关闭,我无法确定它在哪里或是什么

我想我已经尝试了这个相关问题的每一个解决方案,但在这个案例中,它们似乎都没有起到作用()

更多背景信息: 最初,这在我的计算机上起作用(我试图为同事修复它),但我将CachePath注册表项(如此处所述:)更改为Local,而不是LocalLow,以便能够在我的计算机上重现该错误。然而,在尝试了各种方法来修复它之后,即使将该注册表项切换回LocalLow,也不能像我预期的那样解决我的框上的问题


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

但是,使用process monitor,我可以看到它使用了错误的路径并忽略了注册表项更新:

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



有什么想法吗?

简短回答:

  • 关闭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
    
    Computer\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer
    
  • 还是不工作?从注册表中删除整个Internet Explorer文件夹:

    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
    

  • 更长的回答:

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

    %userprofile%\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore
    
    请注意路径中的LocalLow文件夹。大多数程序都会将数据写入本地目录(这是指仅停留在本地计算机上的数据,而不是漫游在本地计算机上的数据,无论它们登录到哪里,它们都会使用自己的配置文件漫游),但LocalLow文件夹上的Low指的是Windows在Vista中引入的称为。我相信在Excel内部的受保护模式下,IE只能处理低完整性级别的文件,通常这不是问题,因为LocalLow中的所有内容都应该是低完整性

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

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

      icacls %userprofile%\Appdata\LocalLow /t /setintegritylevel (OI)(CI)L
      
    • 更多信息请点击此处:

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

    • IE在注册表中查找其应将localStorage写入的路径地址(这可能会根据IE操作的模式/设置而改变)
    • 有时候,这条路会变得一团糟,需要修复。此答案显示了您可以在注册表中的何处将Local更改为LocalLow,以便将其写入正确的DOMStore文件夹:
    • 这里最大的问题是,你怎么知道它首先要写在哪里?使用这一酷炫的工具Process Monitor,您可以查看iexplore.exe进程中引擎盖下发生的事情,并准确查看它正在查找/获取的注册表项以及它试图写入的位置:
  • 最后,如果上述解决方案都不能解决问题,并且注册表的CachePath已正确设置为在路径中包含LocalLow,则我将删除注册表中的以下项:

    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
    
    • 最好先备份注册表,以防万一,作为最佳做法,同时确保并关闭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要好,下次你启动它时,它会认为它已经重新安装,并且会正确设置注册表文件夹


  • 您的回答对解决我客户机上的本地存储问题非常有帮助!