0

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 を使用できません。

asyncResult 値に基づいて、プレーンな HTML から Word Doc に変換することで再フォーマットが行われると思いますが、これを説明する方法がわかりません。

注意: これは、Word Doc と HTML の間で変換しない OWA とは異なりますが、withidのようなプレフィックスとその他の属性を付け、カーソルがジャンプします。classx_

4

1 に答える 1

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});
    }
}

実行後、begin と end の間に br があります。詳細については、 https://dev.outlook.com/reference/add-ins/Body.html#setAsyncにアクセスしてください。

于 2016-12-30T21:20:28.443 に答える