我正在使用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;
后续getAsync显示br
标记,直到您开始输入,然后它被删除并再次调用setAsync。这是一个烦恼,因为setAsync导致光标跳转到作曲家的开头并干扰用户流畅地输入。由于br
标记的性质,我在这种情况下无法使用prepend或setSelectedDataAsync。
我认为重新格式化是通过基于asyncResult值从纯HTML转换为Word Doc来实现的,但我不知道如何解释这一点。
注意:这也不同于OWA,它不会在Word Doc和HTML之间进行转换,但会将id
和class
等其他属性加上x_
作为前缀,并导致光标跳转。
答案 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以查找更多信息。