我们的团队想要建立一个可以在浏览器和 Excel 插件中打开的文档网站。我们选择Docusaurus V2作为主要框架来构建文档网站,并在其中嵌入了 office.js。
Office.js加载后删除history.pushState
和history.replaceState
API,所以我添加了一些JS代码来填充它,如下:
<html>
<head>
... ...
<script type="text/javascript">
if (history) {
var pushStateRef = history.pushState;
var replaceStateRef = history.replaceState;
}
function patch() {
if (history && !history.pushState) {
history.pushState = pushStateRef;
history.replaceState = replaceStateRef;
}
}
function onOfficejsLoad() {
Office.onReady(function() {
console.log('office.js is ready.');
patch();
});
}
</script>
<script
type="text/javascript"
src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"
onload="onOfficejsLoad();"
></script>
</head>
</html>
上面的代码使该网站在 Chrome、Safari 和IE 11中的 Excel Online 中的加载项中运行良好。但是,它在Excel for Windows中效果不佳:当我们单击触发路由器事件时,例如单击 docusaurus 的侧边栏,出现错误,路由器无效,侧边栏无法正常工作(见截图) .
我设法通过添加以下内容来修复此错误history.js
:
<html>
<head>
... ...
<script
type="text/javascript"
src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"
onload="onOfficejsLoad();"
></script>
<script
nomodule
type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/html5-history-api/4.2.10/history.js"
></script>
</head>
</html>
我仍然发布这个问题,因为我不明白为什么以前的版本确实在 Excel Online IE 11 中使用了我们的插件,但在 Excel for Windows 中却没有,它们的行为不应该相同吗?最重要的是,在开发 Excel 插件时,是否有任何最佳实践可用于管理history.pushState
与 office.js 的冲突?