如何通过setAsync将br标签附加到Outlook编辑器主体?

时间:2016-12-12 20:24:40

标签: outlook office365 outlook-addin office-js outlook-web-addins

我正在使用API​​ 1.4编写Outlook加载项,并尝试将br标记附加到Outlook 2016编辑器主体。

但是,只要开始键入Outlook,就会重新格式化文档并删除元素。

以下是在1s轮询间隔调用的实现 - 据我所知,没有更好的方法来观察DOM。



Office.context.mailbox.item.body.getAsync(
  Office.CoercionType.Html, {
    asyncContext: "Body"
  },
  function(asyncResult) {
    // DOMParser
    var doc = document.implementation.createHTMLDocument("document");
    doc.documentElement.innerHtml = asyncResult.value;

    // Append <br> if not found
    var isModified = false;
    var $html = $(doc.documentElement);
    var $body = $html.find("body"); 
    if (!!$body.find("br[id*='unique-identifier']").length) {
      $body.append("<br id='unique-identifier'>");
      isModified = true;
    }

    // Set if <br> was not found
    if (isModified) {
      Office.context.mailbox.item.body.setAsync(
        $body.html(), {
          coercionType: Office.CoercionType.Html
        }
        function(asyncResult) {}
      )
    }
  }
);
&#13;
&#13;
&#13;

后续getAsync显示br标记,直到您开始输入,然后它被删除并再次调用setAsync。这是一个烦恼,因为setAsync导致光标跳转到作曲家的开头并干扰用户流畅地输入。由于br标记的性质,我在这种情况下无法使用prepend或setSelectedDataAsync。

我认为重新格式化是通过基于asyncResult值从纯HTML转换为Word Doc来实现的,但我不知道如何解释这一点。

注意:这也不同于OWA,它不会在Word Doc和HTML之间进行转换,但会将idclass等其他属性加上x_作为前缀,并导致光标跳转。

1 个答案:

答案 0 :(得分:0)

我创建了一个原型来显示电子邮件正文中的br元素。您可以尝试以下代码:

Office.initialize = function () {   
    $(document).ready(function () {
        Office.context.mailbox.item.body.setAsync("<span>begin</span><br id='unique-identifier' /><span>end</span>",  {coercionType: Office.CoercionType.Html});
    }
}

跑完后,开始和结束之间都有一个br。 访问https://dev.outlook.com/reference/add-ins/Body.html#setAsync以查找更多信息。