我目前正在开发一个使用ContentControl.getOoxml()
的Word加载项,并且遇到了在线和本机环境之间的行为差异。在Word Online中,它仅返回OOXML等效的内容控件的内容,而在本机Word中,它返回OOXML等效的整个内容控件 - 内容和所有。换句话说,在前者中它的行为类似于getInnerHTML
,在后者中它的行为类似于getOuterHTML
。
为了说明这个问题,我创建了一个简单的脚本,该脚本对包含两个内容控件的文档进行操作。它获取第一个OOXML,然后将其插入第二个:
Office.initialize = function (reason) {
return Word.run(function (context) {
// Load content controls in test document
var contentControls = context.document.contentControls;
context.load(contentControls, 'id');
return context.sync().then(function () {
// Get ooxml of first content control
var ooxml = contentControls.items[0].getOoxml();
return context.sync().then(function () {
// Insert ooxml from first content control into second content control
contentControls.items[1].insertOoxml(ooxml.value, 'replace');
return context.sync();
});
});
}).catch(function (error) {
console.log('Error: ' + JSON.stringify(error));
if (error instanceof OfficeExtension.Error) {
console.log('Debug info: ' + JSON.stringify(error.debugInfo));
}
});
};
在本机Word中运行脚本时,您会注意到第二个内容控件最终内部包含第三个内容控件,其中包含第一个控件的内容。在Word Online中,它只有第一个控件的内容。
可以通过从空白文档开始并插入两个富文本内容控件(最好在第一个文本中,以便您可以看到更改)轻松创建测试文档,或者您可以使用我创建的test document
这两种情况肯定都很有用(事实上,我一直认为使用两种不同的方法会很酷,类似于getInnerHTML
和getOuterHTML
(或{{1} } boolean参数指定要检索的内容),但在功能基于正在执行的环境时却没有那么多。
有没有办法确保各个环境的功能是一致的,如果没有,建议的替代方案?