无法在Mail Addin中使用window.history.replaceState函数

时间:2015-11-27 09:52:04

标签: office-js

我使用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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

发布这个以防有人遇到同样的问题。

答案 2 :(得分: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

答案 3 :(得分:0)

我找到了一个简单的解决方案,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>

正如Microsoft代表所指出的那样,这与Excel不兼容,但是我想使用邮件加载项就可以了。