4

我们的团队想要建立一个可以在浏览器和 Excel 插件中打开的文档网站。我们选择Docusaurus V2作为主要框架来构建文档网站,并在其中嵌入了 office.js

Office.js加载后删除history.pushStatehistory.replaceStateAPI,所以我添加了一些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 的冲突?

4

1 回答 1

0

我添加了一些 JS 代码来填充它

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

但是,它在 Excel for Windows 中效果不佳

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

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

于 2019-11-13T00:57:22.330 回答