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