Я пишу надстройку Outlook, используя API 1.4, и пытаюсь добавить тег 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 заставляет курсор переходить в начало композитора и мешает пользователю плавно печатать. В этом случае я не могу использовать prepend или setSelectedDataAsync из-за характера тега br
.
Я предполагаю, что переформатирование происходит путем преобразования простого HTML в документ Word на основе значения asyncResult, но я не знаю, как это учитывать.
NB: это также отличается от OWA, который не выполняет преобразование между Word Doc и HTML, но ставит перед id
и другими атрибутами, такими как class
, префикс x_
и заставляет курсор прыгать.