【问题标题】:How to append br tag to Outlook composer body via setAsync?如何通过 setAsync 将 br 标记附加到 Outlook 作曲家正文?
【发布时间】:2016-12-12 20:24:40
【问题描述】:

我正在使用 API 1.4 编写 Outlook 插件,并尝试将 br 标记附加到 Outlook 2016 作曲家正文。

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

以下是在 1 秒的轮询间隔上调用的实现——据我所知,没有更好的方法来观察 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) {}
      )
    }
  }
);

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

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

注意:这也不同于 OWA,它不会在 Word Doc 和 HTML 之间进行转换,但会在 id 和其他属性(如 class)前加上 x_ 并导致光标四处跳动。

【问题讨论】:

  • 您是否尝试使用 div 或 span 来模仿您的
    标签?这是否也将被删除:“
     
    ”?
  • 带有样式和   的 div有效,尽管空 div 无效。在 Outlook 中被视为“有效”的内容是否存在某些限制?
  • documentation 不限制您使用任何 HTML 标签。空标签(独立 br 或空 div)的问题只是正文内容的内部 Outlook 优化。当您使用某些值时,标签不会被剥离。至少你的问题已经解决了,是吗?
  • 一个有效地限制在 Outlook“优化”可能设置的内容。 OWA 将一些次要的东西修改为正文,如属性,但 Outlook 完全重新格式化 HTML 和样式。如果我使用 HTML 设置正文,则格式应该反映我要求设置的内容,而不是 Outlook 优化的内容。这可能是规避 Outlook 的一种小方法,但也不是万能的。

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


【解决方案1】:

我创建了一个原型来在电子邮件正文中显示 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});
    }
}

运行后,begin 和 end 之间有一个 br。 请访问https://dev.outlook.com/reference/add-ins/Body.html#setAsync 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2023-03-24
    • 2015-11-10
    • 1970-01-01
    • 2014-09-20
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多