Outlook加载项 - 使用背景图像插入HTML

时间:2018-01-16 12:34:21

标签: html outlook-addin outlook-web-addins vml

我有一个outlook插件,应该将HTML插入约会。这可以通过调用:

来完成
item.body.setSelectedDataAsync 

我的问题是我尝试使用背景图片插入HTML。这在浏览器中使用Outlook时工作正常,但Outlook客户端需要使用VML的变通方法,如下所述: https://www.emailonacid.com/blog/article/email-development/emailology_vector_markup_language_and_backgrounds

我猜item.body.setSelectedDataAsync从传递给插入的HTML中剥离了VML所需的注释(如<!--[if gte mso 9]>)?

如何在不同Outlook版本(浏览器和客户端)的加载项中使用背景图像添加HTML?

以下是用于插入HTML的JavaScript代码示例:

let  htmlToInsert = '<table cellpadding="0" cellspacing="0" border="0" width="' + imageWidth + '" >';
    htmlToInsert += '<tr><td style="text-align: center; font-size: x-large">' + this.props.roomMap.mapTitle + '</td></tr>';
    htmlToInsert += '<tr><td valign="top" style="min-height:' + imageHeight + 'px;height:' + imageHeight + 'px; background-repeat: no-repeat; background-position: center bottom; width:' + imageWidth +';min-height:' + imageHeight + 'px;height:' + imageHeight + 'px;" background="' + this.props.roomMap.thumbnailUrl + '">';
    htmlToInsert += '<!--[if gte mso 9]>';
    htmlToInsert += '<v:rect style="width:' + imageWidth + 'px;height:' + imageHeight + 'px;" strokecolor="none">';
    htmlToInsert += '<v:fill type="tile" src="'+ this.props.roomMap.thumbnailUrl +'" /></v:fill>';
    htmlToInsert += '</v:rect>';
    htmlToInsert += '<v:shape id="NameHere" style="position:absolute;width:' + imageWidth + 'px;height:' + imageHeight + 'px;">';
    htmlToInsert += '<![endif]-->';
    htmlToInsert += '<img src="https://www.meetingroommap.net/images/marker.png"/ style="margin-left:' + markerX + 'px; margin-top:' + markerY + 'px">';
    htmlToInsert += '<!--[if gte mso 9]>';
    htmlToInsert += '</v:shape>';
    htmlToInsert += '<![endif]-->';
    htmlToInsert += '</td></tr>';
    htmlToInsert += '<tr><td style="text-align: center; font-size: xx-small">Powered by <a target="_blank" href="https://www.meetingroommap.net" >www.MeetingRoomMap.net</a></td></tr>';
    htmlToInsert += '</table>';


    console.log(htmlToInsert);
    item.body.setSelectedDataAsync(
        htmlToInsert,
        { coercionType: Office.CoercionType.Html, 
        asyncContext: { } },
        function (asyncResult) {
            if (asyncResult.status === Office.AsyncResultStatus.Failed){
                    console.log("Error calling item.body.setSelectedDataAsync: " + asyncResult.error.message);
            }
            else {
                // Successfully set data in item body.
            }
        });

1 个答案:

答案 0 :(得分:0)

感谢您的反馈。经过进一步调查后,似乎没有很好的解决方法来实现您的方案。我们将继续了解加载项开发人员的新要求,这有助于我们在平台上实现出色的方案。我们在用户语音页面上跟踪Outlook加载项功能请求。请在那里添加您的请求。当我们完成规划过程时,还会考虑用户语音的功能。

用户语音链接:https://officespdev.uservoice.com/forums/224641-general/category/131778-outlook-add-ins

再次感谢您的反馈,
Outlook加载项工程团队