С момента обновления до Windows 10 мы не можем запустить Office Javascript API в автономном режиме в Word. Мы запускаем Word build 16.0.4639.1000 64-bit. Ранее, в прошлом году, мы успешно использовали API Office Javascript для Word 2016 (той же сборки), используя v1.1.4, загруженную с github OfficeDev.
<script type="text/javascript" src="vendor/microsoft/office-js-1.1.4/dist/office.js"></script>
Однако приведенная выше строка больше не работает в Windows 10 текущей сборки Word.
Использование онлайн-версий отлично работает:
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>
НО работать онлайн не вариант.
Я попытался обновить версию v1.1.8 с github, а затем скачал с текущего сайта, размещенного в Microsoft, именно те файлы, которые F12 сообщает о загрузке Word Taskpane при использовании онлайн-ссылки (office.js, en-us / office_strings.js, ariatelemetry /aria-web-telemetry.js, word-win32-16.01.js).
Я проследил проблему до вставки DOM двух скриптов в файл office.js: файл языковых стандартов office_strings.js и файл хоста, например, слово win32-16.01.js.
Проблема в том, что IE11 блокирует запрос. Вкладка F12 сети показывает GET для каждого из этих файлов: для сайта Microsoft, GET являются нормальными. Для локального сервера GET отображают 200 успешных «из кэша» с задержкой 0 мс, без заголовков - и файл, безусловно, не находится в кэше IE. Затем функция загрузчика скриптов в office.js опрашивает период ожидания, ожидая установки своих внутренних флагов для этих двух файлов. Так как они не загружены, их функции onload, которые устанавливают эти флаги, не вызываются, и загрузчик скриптов в конечном итоге истекает. Для файла хоста (word -... js) затем возникает ошибка «MicrosoftAjax.js не загружен успешно». и, конечно же, поскольку office.js не имеет файла хоста, он не вызывает функцию Office.initialize ().
Та же проблема может быть замечена в IE11 в написанном мной автономном тестовом клиенте, который не работает для файла o15apptofilemappingtable.js (загружается office.js вместо файла хоста и строк локали).
В конечном итоге загрузчик сценария останавливается таким же образом с той же ошибкой.
Поэтому я считаю, что это на самом деле проблема с Internet Explorer 11 в Windows 10, а не с библиотеками officejs. Мы работаем с IE11 11.228.17134.0, до KB4343205. Необычные настройки безопасности, не настроены доверенные сайты.
Интересно то, что если клиентский сертификат НЕ загружен на машину, на которой выполняется запрос браузера, даже сценарии, вставленные из DOM локальным источником в office.js, загружаются нормально, и все работает. Я восстановил оригинальный сертификат с помощью Java 1.8 Keygen, и подтвердил его определенно SHA256. К сожалению, нашему приложению требуется сертификат клиента.
Я попытался передать офисные js-файлы с другого компьютера в локальной интрасети (та же проблема) и разностным веб-сервером (httpd вместо tomcat), но я думаю, что задержка 0 мс и стертые заголовки указывают, что IE11 блокируется даже до того, как задействован веб-сервер.
У меня есть ОЧЕНЬ ВРЕМЕННЫЙ И ХРУПКИЙ обходной путь, который может заинтересовать других:
- DOM-вставка скрипта работает нормально из JavaScript, написанного прямо в корневом HTML-файле! (Это означает, что наше приложение на панели задач может работать на нескольких офисных хостах.)
Тогда просто нужна небольшая утилита js, которая устанавливает флаг в загрузчике сценариев, возвращаемый OSF._OfficeAppFactory.getLoadScriptHelper ().
setMsScriptLoaded (OSF.ConstantNames.OfficeStringsId);
setMsScriptLoaded (OSF.ConstantNames.HostFileId);
Буду очень признателен, если кто-нибудь предложит другой обходной путь или даже правильное решение.