【发布时间】: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