修复由office.js删除的history.pushState的最佳实践是什么?

问题描述 投票:3回答:1

我们的团队希望建立一个可在浏览器和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>

以上代码使网站可以在我们的Chrome Online,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中的外接程序中能正常工作,但在Windows版Excel中却不能,它们的行为不一样吗?最重要的是,在开发Excel加载项时,是否要遵循任何[[最佳实践来管理history.pushState和office.js的限制?

ms-office office-js html5-history history.js docusaurus
1个回答
0
投票
我添加了一些JS代码来填充它

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

但是,它在Excel for Windows中不能很好地工作

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

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

© www.soinside.com 2019 - 2024. All rights reserved.