我们的团队希望建立一个可在浏览器和Excel加载项中打开的文档网站。 我们选择Docusaurus V2作为构建文档网站的主要框架,并将office.js嵌入其中。
Office.js加载后将删除history.pushState
和history.replaceState
API,
所以我添加了一些JS代码来进行polyfill,如下所示:
<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的侧边栏,出现错误,路由器没有效果,并且侧边栏不能正常工作(请参见Screenshot)。
我设法通过添加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的限制?
答案 0 :(得分:0)
我添加了一些JS代码来进行填充
我认为您所做的就是我也会做的。我认为Office.js删除/覆盖历史记录方法不正确,但也许他们有充分的理由这样做(例如,只允许刷新整个页面)。
但是,它在Excel for Windows中无法正常运行
您知道Excel for Windows使用什么浏览器吗?可能是一个完全不同的浏览器,它不符合不同环境中的标准/运行(例如,window
对象上未提供所有HTML5 API)。这就是为什么会有奇怪的行为。
抱歉,我没有Windows机器来调试此问题。