2017-12-13 8 views
0

와 나는 WYSIWYG 편집기 (CKEditor)를 사용하고 내가 알아 내려고 노력하고 있어요하는 각도 (5)에 DomSanitizer을 사용하기에 적합한 방법이다 각도 5.각도 5 DomSanitizer는 하이퍼 링크

와 내용을 렌더링하는 것을 시도하고있다 내가 직면하고있는 문제는 하이퍼 링크가 결과로 생기는 HTML에서 작동하지 않는다는 것입니다 ("클릭 가능하지 않음").

public getSafeContent(): SafeHtml { 
    return this.sanitizer.bypassSecurityTrustHtml(this.page.content); 
} 

내 템플릿에이 방법을 사용하여 : :이 그대로 모든 인라인 스타일과 HTML를 렌더링

<div [innerHTML]="getSafeContent()"></div> 

을 내가는 SafeHTML의 내용을 반환하려면 다음 타이프 스크립트 코드를 사용하고

, 하이퍼 링크는 작동하지 않습니다.

내가 대신이 일을 시도 :

그 하이퍼 링크 결과
public getSafeContent(): SafeHtml { 
    return this.sanitizer.sanitize(SecurityContext.HTML, this.page.content); 
} 

실제로 작동하지만 인라인 스타일은 아니다.

위생 처리 된 콘텐츠로 작업 할 수있는 스타일과 하이퍼 링크를 모두 얻을 수있는 방법이 있습니까?

업데이트

이 페이지는 크롬 개발 도구의 모습입니다 :

<div _ngcontent-c22="" class="row"> 
    <div _ngcontent-c22="" class="col-lg-12"> 

     <div _ngcontent-c22=""> 
      <p><a href="http://www.google.com">google</a></p> 
     </div> 
    </div> 
</div> 

와 구글 링크를 클릭 할 수 없습니다.

+0

무엇 하이퍼 링크가 그대로입니까? 문맥은 어떻게 생겼습니까? –

+0

'sanitize()'대신 [bypassSecurityTrustHtml] (https://angular.io/api/platform-browser/DomSanitizer#bypassSecurityTrustHtml)을 시도해 보셨습니까?

google

그래 나는 같은 결과 DOM 보면 무엇을 –

+0

일반적인 상황은? – user2845798

답변

0

bypassSecurityTrustHtml은 콘텐츠에 <script> 태그를 허용합니다. URL의 경우 bypassSecurityTrustUrl이 필요합니다. 여기를 참조하십시오 : https://angular.io/api/platform-browser/DomSanitizer#bypassSecurityTrustUrl. ,

은 내가 bypassXXX 방법을 적재 한 번도 안 써봤, 그래서 당신이 bypassSecurityTrustUrl(bypassSecurityTrustHtml(myContent)) 같은 일을 할 수 있을지는 모르지만 각 방법은 문자열을 사용하지만 (유형 SafeHtml/SafeUrl의) 객체를 반환 아마 이후 추측 것 따라서 문자열을 기대하는 스택 함수 호출에 대한 입력으로 사용할 수 없습니다.

따라서 콘텐츠를 구문 분석하고 각 URL을 bypassSecurityTrustUrl으로 전달한 다음 모든 것을 다시 함께 결합해야 할 수도 있습니다.

업데이트

난 그냥 살균 방법 바라 보았다. 나는이 시도하지 않은,하지만이 같은 작동 될 수 있습니다 sanitize 이후

this.sanitizer.sanitize(SecurityContext.HTML, this.sanitizer.bypassSecurityTrustUrl(myContent)); 

가 입력으로 SafeValue 수 있습니다. 내부의 bypassSecurityTrustUrl은 URL을 삭제하고 SafeUrl을 반환합니다. 외부 바코드는 포장을 풀고 입력으로 사용하여 HTML을 안전하게 만듭니다. 내가 말했듯이, 나는 그것을 시도하지 않았지만 이론적으로 좋아 보인다.

+0

bypassSecurityTrustUrl()은 HTML 태그가 있으면 불평 할 것이므로 전체 콘텐츠를이 함수에 전달할 수 없습니다. URL을 추출하여 내용에 추가하면 작동합니다. 이 함수를 direcly로 사용하는 경우 this.sanitizer.sanitize (SecurityContext.HTML, myContent); 링크는 작동하지만 인라인 스타일은 지워집니다. – user2845798

+0

여기에 코드를 입력 할 수 없습니다 ...? 추가 답변을 추가했습니다 ... – TimTheEnchanter

0

이 나를 위해 작동합니다

구성 요소 :

content = '<b>Hello World</b><p style=\'font-size:14pt\'> 
<a href=\'http://www.google.com\'>Go to Google</a></p>Test123'; 

public getSafeContent(): SafeHtml { 
    return this.sanitizer.bypassSecurityTrustHtml(this.content); 
} 

HTML :

<div [innerHTML]="getSafeContent()"></div> 

링크의 작품과 인라인 스타일

+0

방금 ​​예제를 테스트했는데 링크가 클릭만으로 작동하지 않습니다. 마우스 오른쪽 버튼을 클릭하고 새 탭에서 열기를 선택했지만 클릭하지 않으면 작동합니다. 템플릿에 동일한 HTML을 직접 삽입하면 링크가 예상대로 작동합니다. 어떤 각도 버전을 사용하고 있습니까? 나는 5.1.1을 달리고있다. – user2845798