当用户单击TextField中的超链接时,如何阻止Flash更改缩进?

时间:2009-06-23 02:04:09

标签: actionscript-3 hyperlink textfield

我有一个TextField,我通过设置htmlText进行初始化。 该文本具有锚标签(超链接)。 当用户单击超链接时,段落中第二行和后续行的缩进将更改。为什么?我该如何阻止它?

我的html在行的开头有一个图像,后跟标记,后跟更多文本。要将超链接设置为在鼠标悬停时始终显示为蓝色并加下划线,请执行以下操作:

var css:StyleSheet = new StyleSheet();
css.parseCSS("a {color: #0000FF;} a:hover {text-decoration: underline;}");
stepText.styleSheet = css;  
stepText.htmlText = textToUse;
stepText.visible = true;

这是html文本的一个片段(添加了换行符和exrta空格以提高可读性 - 最初是一条长行):

<textformat indent="-37" blockindent="37" >
    <img src="media/interface/level-1-bullets/solid-circle.png" 
         align="left" 
         hspace="8" 
         vspace="1"/> 
    American Dental Association. (n.d.). <i>Cleaning your teeth and gums (oral hygiene)</i>. 
    Retrieved 11/24/08, from 
        <a href="http://www.ada.org/public/topics/cleaning_faq.asp" 
           target="_blank">http://www.ada.org/public/topics/cleaning_faq.asp
        </a>
</textformat>
<br/>

事实证明,文本字段的宽度使其包裹,第二行以“Retrieved 11/24/08”开头。单击超链接会导致此特定行缩进。后续段落不受影响。

ASIDE:图像是一个大约37像素宽的列表项目符号。 (我使用的是图像而不是li标签,因为Flash不允许嵌套列表,因此我使用一系列具有不同空白量的图像伪造它以模拟三个缩进级别。)

IDEA:我正在考虑更改所有超链接以使用“event:”作为URL协议,这会导致触发TextEvent.LINK事件而不是跟随链接。然后我将不得不在第二次通话中打开浏览器。我可以使用此事件处理程序将html文本设置为自身,可能清除问题。 (当我在我的应用程序中切换页面然后返回页面时,一切都很好了。)

问题:如果我使用“event:”协议并且用户尝试单击鼠标右键,则会出现错误,或者我被告知。 (见http://www.blog.lessrain.com/as3-texteventlink-and-contextmenu-incompatibilities/)我不喜欢这种权衡。

1 个答案:

答案 0 :(得分:1)

我发现了一种解决方法,与我上面的IDEA一致。

1)使用“event:”前缀所有超链接。 2)在控件上添加一个事件监听器来处理请求。 3)监听器启动浏览器并将文本设置为空字符串,然后设置其原始值。

1)使用事件进行前缀:。

public static function hrefEvents(s:String):String {
    var hrefRegex:RegExp = /href="/gm;
    var output:String = s.replace(hrefRegex, "href=\"event:");
    var dupe:RegExp = /event:event:/gm;
    output = output.replace(dupe, "event:");
    return output;
}

2)添加事件监听器

stepText.addEventListener(TextEvent.LINK, hyperlinkHandler);

3)处理LINK事件。

private function hyperlinkHandler(e:TextEvent) {
    var temp:String = stepText.htmlText;
    stepText.htmlText = "";
    stepText.htmlText = temp;
    var url:String = e.text;
    trace("Clicked on link to URL: " + url);
    navigateToURL(new URLRequest(url), "_blank");   
}

如果我没有先将字段设置为空字符串,则认为没有任何改变,所以它什么也没做。