StorageEvent не работает в Excel для Windows

Как предлагают некоторые существующие потоки (например, один, два, три), текущее диалоговое окно не предоставляет API для регулярной отправки сообщений со страницы хоста (например, панели задач) в диалоговое окно.

Поэтому я должен искать обходной путь: мы резервируем переменную message в localStorageзатем мы регулярно проверяем диалоговое окно, если значение message изменения. Это похоже на ручную реализацию прослушивателя localStorage,

Кто-нибудь знает, как реализовать это надежным и эффективным способом (учитывая, что JavaScript не является многопоточным языком)? Я не хочу, чтобы этот слушатель был дорогим, и какой интервал нужно было бы установить?

Изменить 1:

Я попробовал StorageEvent, который предложил @PatrickEvans. Как для надстройки, так и для диалогового сайта нам необходимо реализовать sendMessage... и receiveMessage... по переменным messageFromHostToSite а также messageFromSiteToHost в хранилище.

Он работал в Excel Online в Chrome и в Excel Online в IE 11. Однако он не работал в Excel 2016 для Windows 7 или 10; мы можем установить элементы в localStorage и вернуть их, меняя localStorage кажется, ничего не увольняет.

Так может ли кто-нибудь подтвердить, что StorageEvent действительно не поддерживается в Excel 2016 для Windows 7 или 10? В этом случае я все еще ищу другие обходные пути...

Изменить 2:

Я, наконец, сделал упрощенный пример: здесь находится XML-файл, который вызывает надстройку и сайт. Он хорошо работает в Excel Online, но не запускает события в Excel для Windows.

1 ответ

У меня были похожие проблемы при общении между приложениями. В моем тестировании Excel Online storageEvent работает, потому что связь между вкладками браузера одного и того же "экземпляра". В Excel для Windows 2 надстройки находятся в отдельных "экземплярах" браузера; которые не сообщают хранилище событий. Хуже всего было Office для Mac (WebKit); который не связывался с storageEvents, а также не мог прочитать изменения хранилища из другого приложения, если они не были перезапущены - я полагаю, это потому, что значения хранилища были кэшированы для экземпляра (не записаны на диск и не видны другому экземпляру / приложению),

Поэтому я считаю, что Excel Online может использовать StorageEvents, Excel для Windows потребует опроса (например, проверять каждую секунду), а Excel для Mac может потребовать серверное решение, такое как WebSockets.

Другие вопросы по тегам