0

모질라 부가 기능 평가자가 parseHTML이라는 기능을 통해 내 서버에서 내 Firefox 부가 기능으로 보내고있는 html을 전달하도록 요청 받았습니다. 문제의 방법은 this XUL school tutorial에 설명되어 있습니다.안전하게 원격 HTML을 사용합니다

그러나 내 콘텐츠 스크립트에는 typeof parseHTML == "undefined"입니다. 내 애드온은 XUL이 아니라 애드온 SDK를 사용하여 작성 되었기 때문에 이것이라고 생각합니다.

SDK로 빌드 된 추가 기능에이 방법에 대한 액세스 권한이없는 것은 맞습니까? SDK에 동일한 메소드가 있습니까?

+0

물론이 기능은 정의되어 있지 않습니다. 소스 코드는 링크 된 자습서에서 인용됩니다. 정말로 필요한 것은 [nsIParserUtils] (https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIParserUtils)입니다. 애드온 코드 (콘텐츠 스크립트가 아닌)가 액세스 할 수있는 대상입니다. 그러면 HTML 코드가 애드온 코드를 통과합니까? XUL 학교 안내서는 오래되었지만 링크 된 특정 문서는 꽤 새롭고 최신 정보입니다. –

+0

아니요, 콘텐츠 스크립트의 JS 템플릿에서 만들어졌습니다. 콘텐츠 스크립트에서 런타임에 템플릿을 컴파일하고 HTML 문자열을 전달하여 추가 기능 코드에 메시지를 내야하는 것처럼 들립니다. html 문자열을 살균 한 다음 렌더링을 위해 콘텐츠 스크립트로 다시 전달 하시겠습니까? 재미있게 들립니다 .-) –

+0

원시 HTML 코드를 처리하지 않도록 템플릿 메커니즘을 변경하십시오. '.textContent'를 사용하여 동적 데이터를 채울 수 있다면 위생을하지 않아도 안전합니다. –

답변

1

물론이 함수는 정의되어 있지 않습니다. 이는 전역 적으로 정의 된 도우미가 아니라 코드 예제에 표시된대로 코드에서 정의해야하는 항목입니다. 액세스 권한이 필요한 nsIParserUtils interface을 사용합니다. SDK를 기반 확장에 당신은 그것을 위해 chrome authority을 사용 : 당신이 콘텐츠 스크립트에있는 경우

var {Cc, Ci} = require("chrome"); 
var parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils); 
var sanitized = parser.sanitize(html, parser.SanitizerAllowStyle); 

은 다음 과정의를 사용할 수 없습니다 - 당신은 추가 기능에 HTML 코드를 전송해야합니다, 소독 거기에 그것을 다시 콘텐츠 스크립트로 보냅니다. 이것이 옵션이지만, 처음에는 innerHTML을 사용하지 않는 것과 같은 다른 가능성을 고려할 수 있습니다 (요소에 텍스트를 설정하고 나서 안전한 대안 인 textContent 만 있으면됩니다).

사이드 노트 : XUL 튜토리얼은 다소 오래되었지만,이 특정 페이지는 1 년 전에 MDN으로 가져 왔고, 역사에 따라 정기적으로 업데이트됩니다. 따라서 현재로서는 애드온 SDK (실제로는 대부분의 MDN 기사와 유사 함)를 명시 적으로 지정하지 않았습니다.