2015-06-10 36 views
1

在我的劇本,我有它設置與此類似:的InDesign:如何正確使用placeXML()

// "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 
} 

,但如果語句返回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. 

是否有更正確的使用此功能的方法?這是一個預期的效果,還是它在延伸腳本中的一個小故障?

回答

0

嘗試(frame.getElements()[0]的instanceof TextFrame)

+0

雖然這是針對特定頁面項目的一種有趣的方式,placeXML()函數仍是一個問題。 例如,frame是[對象Rectangle]。 placeXML插入文本後,它變爲[對象TextFrame]。但是由於placeXML在腳本完成之前不會執行,框架仍然是[對象矩形]。 我會在主帖中添加更多示例。 –

+0

我認爲樣品確實會有幫助。我自己試了一下,不能面對這個問題。你是否禁用屏幕重繪? – Loic

+0

不是故意的,大聲笑。我會嘗試從我的巨大腳本中挑選出來,看看我是否可以在一個新的腳本中以較小的比例複製問題。我會讓你知道發生了什麼... –