Какова лучшая практика для исправления history.pushState, который удаляется office.js? - PullRequest
3 голосов
/ 23 октября 2019

Наша команда хочет создать веб-сайт с документацией, который можно открыть в браузерах и надстройках 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>

Приведенный выше код помог веб-сайту хорошо работать в нашей надстройке в Excel Online в Chrome, Safari,а также IE 11 . Однако это не сработало в Excel для 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 для Windows, разве их поведение не должно быть таким же? Что наиболее важно при разработке надстроек Excel, есть ли рекомендация , которой нужно следовать для управления конфликтами history.pushState и office.js?

1 Ответ

0 голосов
/ 13 ноября 2019

Я добавил JS-код, чтобы заполнить его

Я думаю, что вы сделали то же, что и я. Я не думаю, что Office.js является правильным для удаления / переопределения методов истории, но, возможно, у них были веские причины для этого (например, разрешено только полное обновление страницы).

Однако это не такхорошо работают в Excel для Windows

Знаете ли вы, какой браузер используется в Excel для Windows? Это может быть совершенно другой браузер, который не соответствует стандартам / работает в другой среде (например, не все API-интерфейсы HTML5 предоставляются для объекта window). Это может быть причиной странного поведения.

Извините, у меня нет машины с Windows для отладки этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...