2016-12-09 11 views
0

파이어 폭스 애드온은 백엔드 (main.js)에서 Google에 질의를하고 xpath를 통해 일부 내용을 추출합니다. 이를 위해 innerHTML을 사용하여 xpath 구문 분석을위한 document 인스턴스를 만듭니다. 이 부가 기능은 innerHTML을, jQuery.html, 또는 유사한 수단을 통해 할당하여, 잠재적으로 unsanitized 데이터가 포함 된 HTML 문자열에서 DOM 노드를 만드는파이어 폭스 애드온에`nsIParserUtils.parseFragment()`를 사용하는 방법

: 우리는 모질라이 부가 기능을 제출할 때 때문에, 우리는 거부되었다. 비효율적 인 것 외에도 이는 주요 보안 위험 요소입니다. 자세한 내용은 제공된 링크를 https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion

를 참조, 우리는 nsIParserUtils.parseFragment()innerHTML를 교체했습니다. 그러나, 예시적인 코드가 다음 함수는 인수로 document (doc)해야하지만

let { Cc, Ci } = require("chrome"); 
function parseHTML(doc, html, allowStyle, baseURI, isXML) { 
    let PARSER_UTILS = "@mozilla.org/parserutils;1"; 
    ... 

Cc, Ci 유틸리티 만 main.js에 사용될 수있다. documentmain.js 안에 작성하는 것에 대한 예제를 찾을 수 없었습니다. document.implementation.createHTMLDocument("");을 사용할 수 없었습니다. main.js은 배경 스크립트로, 글로벌 기본 제공 document에 대한 참조가 없습니다.

나는 많이 봤지만 어떤 해결책도 찾을 수 없었다. 아무도 친절하게 도와 줄 수 없었습니까?

+1

주 스크립트 요소''다수에 액세스 할 수 있습니다. 어떤 것을 골라 내는지는 문서가 존재할 네임 스페이스 (다른 가능성을 가진 XUL 또는 HTML) 또는 ''이 필요한 용도에 따라 크게 달라집니다. 부작용은 ''에 "global"이 없다는 것입니다. ''요소가 많이 있습니다 (탭당 ​​+ 1 개 이상 다른 요소 이상). [이 답변] (http://stackoverflow.com/a/29228418/3773011)에는 현재 브라우저 창에 대해 * a *''및 * a *' '을 참조하는 코드가 있습니다. – Makyen

답변

1

당신은 아마 당신이 윈도우 객체없이 특권 상황에서 사용할 수 있다는 점을 제외하고 표준 DOMParser 접근 창에서 전역와 동일하다, 대신 nsIDOMParser을 사용하고 싶습니다.

독자적으로 제공하지 않으면 전체 문서에 <html><body> 요소가 합성되어 있습니다. 당신이 절대적으로 조각이 필요한 경우는 domparser을 통해 조각을 추출하기 위해 HTML5 템플릿 요소를 사용할 수 있습니다

let partialHTML = "foo <b>baz</b> bar" 
let frag = parser.parseFromString(`<template>${partialHTML}</template>`, 'text/html').querySelector("template").content