내 응용 프로그램에서 사용자가 잠재적으로 안전하지 않은 주석을 입력하도록했습니다.컨트롤러에서 Javascript로 HTML을 전달하는 적절한 방법은 무엇입니까?
<%= simple_format h annotation.body %>
그것은 줄 바꿈을 보존뿐만 아니라 제대로 HTML을 탈출 : 내보기에서 렌더링 할 때, 다음과 멋지게 주석을 보여줍니다. 이제 Javascript로 만든 오버레이에서이 본문을 렌더링해야합니다. 지금, 나는 컨트롤러에서 다음 호출하여 JSON을 통해 내 주석을 가져 오기 :
def index
# ...
respond_to do |format|
format.json { render :json => @annotations }
end
end
그리고이 (매우 간단한 예) 같은 오버레이 생성 : 물론
$.getJSON(this.annotations_url, function(data) {
$.each(data, function(key, val) {
annotation = val;
this.div_body.html(annotation.body);
// ...
을, 결과 HTML을 것입니다 이 아닌은 올바르게 이스케이프 처리되고 줄 바꿈도 보존되지 않습니다.
지금, 나는 그렇게하면 내가 많이 건조되지 않을 것 같은이 느낌 때문에 이스케이프 라인 브레이크 변환을 수행하는 순수 자바 스크립트를 사용하여 같은 느낌하지 않습니다. 전체 코드를 관리하고 복잡하게 만드는 것은 어렵습니다.
컨트롤러에서 JSON을 통해 안전한 HTML 본문을 어떻게 보낼 수 있습니까? ERB simple_format
및 h
메소드는보기에서만 사용할 수있는 것처럼 보입니다.
또는 Javascript로 모든 것을 정말로 수행해야합니까?
이 코드는 매우 효과적입니다. 코드를 렌더링하기 전에'format.json' 블록에 추가했습니다. 지금 컨트롤러에 있지만 JS에서 수행하는 것보다 나은 점이 있습니다. – slhck