0

私たちのFirefoxアドオンは、バックエンド(main.js)でGoogleにクエリーを発行し、xpathでいくつかのコンテンツを抽出します。この目的のために、innerHTMLを使用して、xpath解析用のdocumentインスタンスを作成します。このアドオンは、innerHTMLプロパティ、jQuery.html、または同様の手段を通じて割り当てることによって、潜在的にunsanitizedデータを含むHTML文字列からDOMノードを作成しているFirefoxアドオンのための `nsIParserUtils.parseFragment()`の使い方

:私たちはMozillaのにこのアドオンを送信するときので、しかし、我々は拒否されました。非効率的であることを除けば、これは大きなセキュリティリスクです。詳細については、提供されたリンクに続きhttps://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion

を参照してください、私たちはnsIParserUtils.parseFragment()innerHTMLを交換しようとしました。しかし、サンプルコード:関数引数としてdocumentdoc)を必要としながら

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への参照を持たないバックグラウンドスクリプトです。

私はたくさんのGoogle検索を行ったが、解決策はまだ見つかりませんでした。誰かが親切に手伝ってくれましたか?

+1

あなたの主なスクリプトが複数の '' 要素へのアクセスを持っています。どのドキュメントを選択するかは、そのドキュメントが存在するネームスペース(XULまたはHTML、その他の可能性がある)、または ''が必要な目的に大きく依存します。側面の問題は、「」に組み込まれた「グローバル」がないことです。 ''要素がたくさんあります(タブごとに少なくとも1つ以上+その他)。 [この回答](http://stackoverflow.com/a/29228418/3773011)には、現在のブラウザウィンドウの* a * ''と* a * ' 'の参照を取得するコードがあります。 – Makyen

答えて

1

代わりにnsIDOMParserを代わりに使用します。これは、ウィンドウオブジェクトなしで特権コンテキストから使用できる点を除いて、ウィンドウグローバルでアクセス可能な標準DOMParserと同じです。

これは、独自のものを用意していない場合、合成された<html><body>の要素を持つ文書全体を提供しますが、あなたは絶対にフラグメントが必要な場合は、DOMParserを経由しての断片を抽出するためにHTML5のテンプレート要素を使用することができます。

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