2009-06-23 4 views
1

htmlText를 설정하여 초기화하는 TextField가 있습니다. 텍스트에 앵커 태그 (하이퍼 링크)가 있습니다. 사용자가 하이퍼 링크를 클릭하면 단락의 두 번째 줄과 다음 줄의 들여 쓰기가 변경됩니다. 왜? 어떻게 그만합니까?사용자가 TextField에서 하이퍼 링크를 클릭 할 때 Flash에서 들여 쓰기가 변경되는 것을 어떻게 막을 수 있습니까?

내 HTML에는 줄의 시작 부분에 이미지가 있고 그 다음에 태그와 그 뒤에 더 많은 텍스트가옵니다. 항상 파란색 볼 하이퍼 링크 스타일을 마우스 그들 위에있을 때 밑줄, 난이 수행 - 원래를 줄 바꿈 및 exrta 공백으로 여기

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 텍스트의 단편은 (가독성을 향상시키기 위해 추가 했다 하나의 긴 선)

<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/> 

것이 판명 된 바와 같이, 텍스트 필드가 감싸고 번째 줄 "11/24/08 만회"로 시작하도록하는 폭이다. 하이퍼 링크를 클릭하면이 특정 줄이 들여 쓰기됩니다. 후속 단락은 영향을받지 않습니다.

ASIDE : 이미지의 폭은 약 37 픽셀입니다. (플래시는 중첩 된 목록을 허용하지 않으므로 li 태그 대신 이미지를 사용 했으므로 다양한 공백 문자를 사용하여 일련의 이미지를 사용하여 3 단계의 들여 쓰기를 시뮬레이트했습니다.

IDEA : 나는 모두 변경하려고했습니다. 하이퍼 링크를 사용하여 URL 프로토콜로 "event :"를 사용하면 링크를 따라가는 대신 TextEvent.LINK 이벤트가 트리거됩니다. 그런 다음 두 번째 호출에서 브라우저를 열어야합니다. 이 이벤트 핸들러를 사용하여 html 텍스트 자체를 설정하면 이 문제를 해결할 수 있습니다. (응용 프로그램에서 페이지를 전환 한 다음 다시 페이지로 돌아 오면 모든 것이 정상입니다.)

문제 : "이벤트 :"프로토콜을 사용하고 사용자가 마우스 오른쪽 버튼을 클릭하면 오류, 또는 그래서 나는 들었다. (http://www.blog.lessrain.com/as3-texteventlink-and-contextmenu-incompatibilities/ 참조) 나는이 절충을 좋아하지 않는다.

답변

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) LINK 이벤트를 처리) 이벤트 리스너

stepText.addEventListener(TextEvent.LINK, hyperlinkHandler); 

3을 추가합니다.

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

내가 먼저 아무것도 변경 생각하지 않는 빈 문자열 필드를 설정하지 않는, 그래서 아무것도하지 않는 경우.

관련 문제