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' );
}

最終的に、TextArea で Twitter ハッシュタグ リンクが正しく機能するようにするには、次のようにします。

addLinkHandler( textArea.textFlow );

PSクリックハンドラーを追加するアルゴリズムは、この投稿に基づいていますが、最適化されています。

于 2012-11-08T16:35:34.707 に答える