0

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

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

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

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

我将不胜感激任何解决方案。谢谢你。

4

1 回答 1

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 主题标签链接在 TextArea 中正常工作,我这样做:

addLinkHandler( textArea.textFlow );

PS 添加点击处理程序的算法基于这篇文章,但经过优化。

于 2012-11-08T16:35:34.707 回答