gpt4 book ai didi

ms-office - 修复由 office.js 删除的 history.pushState 的最佳做法是什么?

转载 作者:行者123 更新时间:2023-12-02 04:22:32 38 4
gpt4 key购买 nike

我们的团队希望构建一个可以在浏览器和 Excel 加载项中打开的文档网站。
我们选择了Docusaurus V2作为构建文档网站的主要框架,并嵌入office.js在里面。

Office.js 删除 history.pushStatehistory.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>

上面的代码使网站在我们的 Excel Online 加载项中的 Chrome、Safari 以及 中运行良好。 IE 11 .但是,它在 中效果不佳。适用于 Windows 的 Excel :当我们点击触发路由器事件时,例如单击 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?

最佳答案

I added some JS code to polyfill it



我想你所做的也是我也会做的。我不认为 Office.js 删除/覆盖历史记录方法是正确的,但也许他们有很好的理由这样做(例如只允许整页刷新)。

However, it did not work well in Excel for Windows



您知道 Excel for Windows 中使用的是什么浏览器吗?它可能是一个完全不同的浏览器,不符合标准/在不同的环境中运行(例如,并非所有 HTML5 API 都在 window 对象上提供)。这可能就是为什么会有奇怪的行为。

抱歉,我没有 Windows 机器来调试这个问题。

关于ms-office - 修复由 office.js 删除的 history.pushState 的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58523883/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com