Office365 触发dialog.close后Word加载项停止工作。办公室JS

Office365 触发dialog.close后Word加载项停止工作。办公室JS,office365,office-js,Office365,Office Js,我一直在开发一个Office365应用程序,在该应用程序中,我打开了一个对话框,在某种活动之后,我用dialog.close()关闭了对话框。它工作得非常好,但功能区按钮停止工作,下次它将不再显示相同的对话框 Office.context.ui.displayDialogAsync("https://" + location.host + "/Dialog.html", { width: 90, height: 90, requireHTTPS: true }, function (asyn

我一直在开发一个Office365应用程序,在该应用程序中,我打开了一个对话框,在某种活动之后,我用dialog.close()关闭了对话框。它工作得非常好,但功能区按钮停止工作,下次它将不再显示相同的对话框

  Office.context.ui.displayDialogAsync("https://" + location.host + "/Dialog.html", { width: 90, height: 90, requireHTTPS: true }, function (asyncResult) {
        dialog = asyncResult.value;
        dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage);
        if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) {
            return;
        }
    });
这是我的processMessage函数

function processMessage(arg) {
try{
    var messageFromDialog = JSON.parse(arg.message);

    var base64 = messageFromDialog.image.split(",")[1];
    Word.run(function (context) {
        var body = context.document.getSelection();
        body.insertInlinePictureFromBase64(base64, Word.InsertLocation.replace);
        return context.sync();
    }).catch(function (error) {
        app.showNotification("Error: " + JSON.stringify(error));
        if (error instanceof OfficeExtension.Error) {
            app.showNotification("Debug info: " + JSON.stringify(error.debugInfo));
        }
    });
    if (messageFromDialog.messageType === "dialogClosed") {
        dialog.close();
    }
} catch (ex) {
    console.log("Exception " + ex);
}
}
提前感谢:)

已更新


此问题仅在office online中发生。

很抱歉延迟调查此问题。长话短说,我不得不对你的代码做一些修改,这样就可以工作了,它抛出了一些异常(见下面的修改)。我没有您插入的图像,因此我还假设您发送给该方法的base64是有效图像。另外,仅供参考,请更新Office build 16.0.7967.2139已于4月21日发布,但这也适用于您引用的版本

以下是我所做的更改:

  • 我更改了这一行以仅获取属性:var messagefromdalog=arg.message;(为什么要解析JSON?)
  • 我还讨论了这个问题:如果(messageFromDialog==“close”),我们没有messageType属性 顺便说一句,我的Dialog.html页面看起来像这样(我看不到你的页面,但我假设用户正在上面选择图像)
  • 
    Office.initialize=函数(){
    $(“#按钮1”)。单击(一);
    $(“#按钮2”)。单击(两个);
    };
    功能一()
    {
    Office.context.ui.messageParent(“1”);
    }
    函数二(){
    Office.context.ui.messageParent(“关闭”);
    }
    选择一个数字

    1. 第一 2. 二号
    您好,您能添加您正在体验的Word平台吗?(即Windows、Mac、Online?)也请将您的版本号发送给我们,以便我们可以进行更详细的调查。谢谢@JuanBalmori我正在使用Windows Word2016。你能分享你的版本号吗?感谢号?很抱歉是的,如果您转到文件->帐户,您将在office徽标下面看到类似于版本:XXXX(Build XXXX.XXXX)的内容。您可以发送该信息吗?谢谢关于第1点和第2点。一旦我删除了
    JSON.Parse
    ,它就会在下一行
    messageFromDialog.image未定义时抛出异常。也就是说,在这一行:
    var base64=messageFromDialog.image.split(“,”[1]关于第3点,我已经处理了事件。请看我上面的问题。你能再解释一下怎么做吗?它看起来像是
    messageType
    属性在那里,它也在返回相应的结果。下面是
    arg
    对象:
    {[functions]:,\uuuuuuuuuuu:{},message:“{”messageType:“dialogClosed”,“image:“data:image/png;base64,---64字符串在这里----“}”,类型:“dialogMessageReceived”}
    @Juan。看起来像。我们做的和你建议的完全一样。我们正在解析JSON,因为我们在字符串化后将JSON放入消息中,并且我们已经订阅了您提到的事件。那么这篇文章的输出是什么呢?你在使用什么office.js?你更新办公室了吗?代码现在起作用了吗?我将office更新为
    16.0.7927.1020
    ,同样的事情也在进行中。我的办公室说没有其他可用的更新,OfficeJs是: