Диалог надстройки Word, не отражающий значение localalstorage, установленное из parent - PullRequest
0 голосов
/ 25 марта 2019

Я использую офисный диалог API в надстройке Word.Когда я устанавливаю локальное хранилище и читаю в диалоговом окне после его открытия, я вижу значение в диалоговом окне.Но когда диалог открыт и я установил локальное хранилище в parent, я не вижу этого в диалоге.Я использую localalstorage для общения с дочерним диалогом после запуска.Есть ли другой способ общения между родителем и ребенком после открытия диалога?использование Office.context.ui.messageParent при отправке сообщения из диалогового окна в родительский.

Main page:

$scope.opensettingDialog = function () {
Office.context.ui.displayDialogAsync("https://localhost/tz/setting", {90,50},
               function (asyncResult) {
                   dialog = asyncResult.value;
            dialog.addEventHandler(Office.EventType.DialogMessageReceived, processSettingDialog);
        });}

function processSettingDialog (arg) {
    var messageFromDialog = JSON.parse(arg.message);
    if (messageFromDialog.messageType == "save") {
        //do operations & store result
        localStorage.setItem("tbSave", "true");
    }
    else {
        dialog.close();
    }
}


Settings Dialog:

$scope.acceptSettings = function () {

    var messageObject = {
        messageType: "savedoc"
    };
    var jsonMessage = JSON.stringify(messageObject);
    Office.context.ui.messageParent(jsonMessage);

    $scope.intervalpromise = $interval(checkSave2Update(), 1000);


};

//Wait for parent operation to complete
var checkSave2Update= function () {
    var processingStatus = localStorage.getItem("tbSave");//it never has the value set in the parent page.

    if ((processingStatus == "undefined") || (processingStatus == null)) {
        $interval.cancel($scope.intervalpromise);
        $scope.intervalpromise = $interval(checkSave2Update(), 1000);
        return;
    }
    else {//cancel wait
        $interval.cancel($scope.intervalpromise);
    }
}

1 Ответ

0 голосов
/ 02 апреля 2019

С точки зрения localStorage, это может быть просто проблема Internet Explorer (на рабочем столе надстройка Office запускается внутри контейнера IE).

Проблема и обходной путь подробно описаны в https://stackoverflow.com/a/40770399. По существу, локальное хранилище может быть не синхронизировано между вкладками (и это фактически то, что представляет собой область задач и диалог). Чтобы это исправить, вы можете установить значение для некоторого ключа, и это обеспечит обновление localStorage.

Мы используем этот обходной путь в Script Lab: см. https://github.com/OfficeDev/script-lab/blob/master/packages/common/src/utilities/ensure.fresh.local.storage.ts

Надеюсь, это поможет.

...