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.