2012-11-06 34 views
0

我使用包含像這樣的鏈接星火的文本區:的Flex 4文本區:自動字符的HTML轉/ TextFlow的鏈接

<a href="https://twitter.com/search?q=%23hashtag" target="_blank">#hashtag</a> 

正如你所看到的,這是對Twitter搜索頁面的鏈接具體的hashtag。散列符號必須在查詢字符串中轉義。但是,我在這裏遇到了一個問題:當我點擊鏈接時,'%'符號會自動轉義並且URL損壞(...search?q=%2523hashtag)。我可以關閉這個自動轉義嗎?

如果在URL中使用'#'符號不會被轉義,因此Twitter頁面在此情況下無法正確打開。所以我不能在URL中使用'#'和'%23'。

我希望爲此提供任何解決方案。 謝謝。

+0

不知道這是否會工作,但你有沒有嘗試封裝'<[CDATA[]]>'? –

+0

這不起作用,當我將HTML文本導入TextFlow時,TLF不理解CDATA塊。 – davee44

回答

0

好的...到目前爲止,我找不到一種方式來關閉點擊時URL的自動轉義。但是我找到了解決方法。

基本上,我爲TextFlow內的所有鏈接元素添加了自定義點擊處理程序,並在單擊時手動打開鏈接(而不是內置的TLF行爲)。就像這樣:

public function addLinkHandler(textFlowOrGroupElement: FlowGroupElement): void 
{ 
    // scan the flow elements 
    for (var f1: int = 0; f1 < textFlowOrGroupElement.numChildren; f1 ++) { 
     // found element 
     var curFlowGroupElement: FlowElement = textFlowOrGroupElement.getChildAt(f1); 

     // if this is the link element, add the click event listener 
     if (curFlowGroupElement is LinkElement) { 
      (curFlowGroupElement as LinkElement).addEventListener(FlowElementMouseEvent.CLICK, onLinkClick); 
     } 
     // if this is another flow group 
     else if (curFlowGroupElement is FlowGroupElement) { 
      // scan this group in turn, recursively 
      addLinkHandler(curFlowGroupElement as FlowGroupElement); 
     } 
    } 

} 

這裏是鏈接的點擊處理程序:到底

public function onLinkClick(e: FlowElementMouseEvent): void 
{ 
    e.stopImmediatePropagation(); 
    e.preventDefault(); 

    var linkElement: LinkElement = e.flowElement as LinkElement; 

    navigateToURL(new URLRequest(linkElement.href), '_blank'); 
} 

所以使Twitter的主題標籤鏈接的文本區正常工作,我這樣做:

addLinkHandler(textArea.textFlow); 

PS添加點擊處理程序的算法基於this post,但進行了優化。

相關問題