Flex 4 TextArea:HTML / TextFlow链接中的自动字符转义

时间:2012-11-06 14:39:04

标签: actionscript-3 flex flex4 tlf

我正在使用Spark的TextArea,其中包含如下链接:

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

如您所见,这是指向特定主题标签的Twitter搜索页面的链接。必须在查询字符串中转义哈希符号。但是,我在这里遇到了一个问题:当我点击链接时,'%'符号会自动转义,并且URL会损坏(...search?q=%2523hashtag)。我可以关闭这种自动转义吗?

如果在URL中使用“#”符号,则不会转义,因此在这种情况下Twitter页面无法正确打开。所以我不能在URL中使用'#'和'%23'。

我很感激任何解决方案。 谢谢。

1 个答案:

答案 0 :(得分:0)

好的...到目前为止,我无法找到一种方法来点击点击后自动转义网址。但我找到了解决方法。

基本上,我向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-hashtag链接在TextArea中正常工作,我这样做:

addLinkHandler( textArea.textFlow );

P.S。添加点击处理程序的算法基于this post,但已经过优化。