【问题标题】:IE 11/Office.js: Access is Denied trying to use localStorageIE 11/Office.js:访问被拒绝尝试使用 localStorage
【发布时间】:2018-06-28 03:28:21
【问题描述】:

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

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 注册表项的图像:

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

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


有什么想法吗?

【问题讨论】:

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


    【解决方案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
      

    更长的答案:

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

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

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

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

      • 在这种情况下,即使用户对他们尝试写入的文件具有完全权限,如果只能处理 LOW 完整性文件的进程尝试对更高完整性文件执行操作,他们也会被拒绝访问。
      • 通过将 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/procmonenter link description here
    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 更好,下次启动时它会认为它已重新安装并正确设置注册表文件夹...

    【讨论】:

    • 您的回答对解决我的客户机器上的本地存储问题非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多