2

我使用 durandal 框架和 Office365 JavaScript API(office.js)为 Outlook365 创建了一个 SPA 邮件插件。在我的应用程序的某个地方我想使用 window.history.replaceState函数,但是这个函数在 office.js 中显式设置为 null 导致错误。

//following lines are presents in Office.js
window.history.replaceState = null;
window.history.pushState = null;
4

4 回答 4

1

Microsoft 在 Office 加载项中不支持某些功能(警报是另一个功能)。当然看起来他们故意禁用了那个。

于 2015-12-01T19:14:10.450 回答
1

我找到了一个简单的解决方案,react-router在此更改后工作正常。我们可以在 中将函数失效前备份Office.jsindex.html然后恢复:

<script>
  window.backupHistoryFunctions = {};
  window.backupHistoryFunctions.pushState = window.history.pushState;
  window.backupHistoryFunctions.replaceState = window.history.replaceState;
</script>
<!-- Office JavaScript API -->
<script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js">
</script>
<script>      
  window.history.pushState = window.backupHistoryFunctions.pushState;
  window.history.replaceState = window.backupHistoryFunctions.replaceState;
  console.log(window.history.replaceState)
</script>

正如微软代表指出的那样,这与 Excel 不兼容,但我想这对于邮件加载项来说没问题。

于 2020-07-23T23:53:53.377 回答
0

我通过执行以下操作覆盖了这种行为

<script>
  var pushStateRef = history.pushState;
  var replaceStateRef = history.replaceState;
</script>
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>
<script>
  history.pushState = pushStateRef;
  history.replaceState = replaceStateRef;
  delete pushStateRef;
  delete replaceStateRef;
</script>

假设您只支持支持历史的浏览器,这应该撤消 Office.js 无效。

我还打开了一个问题@Office.js 存储库: https ://github.com/OfficeDev/office-js/issues/429

于 2019-03-16T23:31:07.027 回答
0

如果您将 react-router 与 office.js 一起使用,您将收到“windows.history .pushState is not a function”错误并且所有路由都失败。您可以做的是在 html 页面底部添加以下代码以回退到 window.location.hash:

if (typeof(window.history.pushState) !== 'function') {
    window.history.pushState = function(path){
       window.location.hash = '#!' + path;
    }
}

如果有人遇到同样的问题,请发布此内容。

于 2017-04-27T19:36:02.713 回答