【问题标题】:displayDialogAsync in Word online not documenting close action / broken behavior different from Word Online to Word for MacWord Online 中的 displayDialogAsync 未记录从 Word Online 到 Word for Mac 的关闭操作/损坏行为
【发布时间】:2018-05-30 02:56:02
【问题描述】:

当我在 Word Online 中关闭对话框时,我在控制台中收到以下消息:

Unknown conversation Id.

我没有得到一个我可以处理的代码,我只是得到那个......

(macOS / Chrome 版本 66.0.3359.181(官方构建)(64 位))

在 Word for Mac 16.13.1 (180523) 上运行的相同代码(从 localhost 和侧面加载的清单运行) - 构建速度慢 - 导致对话框窗口无法正常运行...关闭时它们不会触发我可以使用的代码并且 Javascript 似乎没有在其中运行。当我尝试检查对话框时,我得到一个疯狂的窗口闪烁并且控制台没有打开。

总体感觉 displayDialogAsync API 有问题。

这是一个创建对话框的示例 sn-p:

$('.integrateQuotes').click(function(){
    console.log('Clicking quote machine choice...');
    var dialogUrl = 'https://localhost/AnnotateX/qWord/modules/integratequotes.html';
    var dialog = null;   //  dialogwindow object
    Office.context.ui.displayDialogAsync(dialogUrl, {height: 80, width: 80, displayInIframe: true}, function (asyncResult){
        dialog = asyncResult.value;
        error = asyncResult.error;
        status = asyncResult.status;
        console.log('Result from dialog window...error: ') +  + console.log(' and status: ') + console.log(status) + console.log(dialog);
        dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage);
    });
  });
  self.location.href = '#writingDiv';

和进程消息:

function processMessage(arg) {
    // var messageFromDialog = JSON.parse(arg.message);
    // showUserName(messageFromDialog.name);
    console.log('processing message from dialog: ') + console.log(arg);

    // switch (arg.error) {
    //      case 12002:
    //          console.log("The dialog box has been directed to a page that it cannot find or load, or the URL syntax is invalid.");
    //          break;
    //      case 12003:
    //          console.log("The dialog box has been directed to a URL with the HTTP protocol. HTTPS is required.");            break;
    //      case 12006:
    //          console.log("Dialog closed.");
    //          break;
    //      default:
    //          console.log("Unknown error in dialog box.");
    //          break;
    //   }

    // dialog.close();
    if (arg.message === 'easyBib'){
      //Now open URL
      var win = window.open('http://www.easybib.com/cite/results?source=website&provider=&cite-style=mla7&query=' + localStorage.easyBib);
      console.log("Sending to easyBib: " + localStorage.easyBib);
      if (win) {
          //Browser has allowed it to be opened
          win.focus();
      } else {
          //Browser has blocked it
          alert('Please allow popups for this website');
      }
    } else {
      dialog.close();
      self.location.href = '#writingDiv';
    }
    // self.location.href = 'qResearch.html';
    // window.location.replace("/qResearch.html");
    // window.location.href = "/newPage.html";
}

我现在要在 Windows 上尝试...但是有些东西

【问题讨论】:

    标签: javascript office-js


    【解决方案1】:

    要处理用户关闭对话框的事件,您需要 DialogEventReceived 事件的处理程序,而不是 DialogMessageReceived。更多内容请访问:Using a Dialog with Office Add-ins

    【讨论】:

    • 感谢您指出这一点......也许这个问题有太多问题。 Javascript 应该仍然可以运行(如果它可以在 Word Online 中运行,它应该可以在 macOS 最新的 Word 中运行)。例如,如果我打开一个对话框窗口,将其关闭(使用“x”),然后尝试重新打开
    • 感谢您指出这一点......也许这个问题有太多问题。我更新了我的代码,虽然我仍然在使用 Word Online 的控制台中收到“对话 ID”消息,但窗口在 Word Online 中按预期运行。使用 macOS Word 2016(上面的缓慢构建详细信息),窗口打开一次,但不会在用户关闭时向父级发送消息。对话框仍然存在,因此如果您尝试重新打开,您会收到“对话框已存在”消息。
    • 此外,当对话框打开时,javascript 并未在对话框中运行。在这个最新版本的 Word 中,看起来很像损坏的功能。类似问题:github.com/OfficeDev/Office-Add-in-Dialog-API-Simple-Example/…social.msdn.microsoft.com/Forums/Lync/en-US/…
    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多