InDesign:如何正确使用placeXML()

时间:2015-06-10 22:44:01

标签: javascript xml adobe-indesign extendscript

在我的脚本中,我设置了类似的内容:

// "element" is an xml element in the structure that contains text
// "frame" is one page item

element.placeXML( frame );

这非常有用。它将从元素中获取文本并将其放入页面上的框架中。但是,我需要在文本粘贴到框架后对文本执行某些操作,并且由于原因太长而无法解释此问题,因此使用mapTagsToStyles不是一个选项。我想,这应该是一件容易的事,所以我尝试了以下代码:

element.placeXML( frame );

// after the xml text gets placed, the frame becomes a text frame...

if ( frame instanceof TextFrame ){
    // some code here
}

但是,if语句返回false,除非在运行脚本之前帧已经是TextFrame,这在XML元素是图像的情况下也是不合需要的。由于图像不支持“parentStory”等属性,因此会导致错误。

似乎整个脚本完成后它只是一个文本框架。换句话说,在调用函数的瞬间,XML不会被放置。它似乎是异步行为,但在这种情况下我不知道如何使用“onload”事件监听器。

// say "frame" is an empty rectangle frame...
// inserting text will change it into a text frame.

// This function, although written here, does not execute here.
element.placeXML( frame );

if ( frame instanceof TextFrame ){
    // instanceof will return [object Rectangle],
    // because placeXML has not inserted any text yet.
}

// end of script. ---------
// the placeXML() function executes here.

使用此功能有更正确的方法吗?这是预期的效果,还是extendcript中的一个小故障?

1 个答案:

答案 0 :(得分:0)

尝试(frame.getElements()[0] instanceof TextFrame)