我使用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;
答案 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.js
在index.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不兼容,但是我想使用邮件加载项就可以了。