Наш Firefox-аддон выдает запросы Google на бэкэнд (main.js
), а затем извлекает некоторый контент через xpath. Для этой цели мы используем innerHTML
для создания экземпляра document
для синтаксического анализа xpath. Но когда мы подчиняемся этот аддон к Mozilla, мы получили отклонены, потому что:Как использовать `nsIParserUtils.parseFragment()` для Firefox addon
Этот аддон создает DOM узлы из HTML-строк, содержащих потенциально unsanitized данные, сопоставляя innerHTML, jQuery.html, или через аналогичные средства. Помимо неэффективности, это серьезный риск для безопасности. Для получения дополнительной информации см https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion
Перейдя по ссылке, предоставленной, мы попытались заменить innerHTML
с nsIParserUtils.parseFragment()
. Тем не менее, пример кода:
let { Cc, Ci } = require("chrome");
function parseHTML(doc, html, allowStyle, baseURI, isXML) {
let PARSER_UTILS = "@mozilla.org/parserutils;1";
...
В Cc, Ci
утилиты могут быть использованы только на main.js
, в то время как функция требует document
(doc
) в качестве аргумента. Но мы не смогли найти примеров создания document
внутри main.js
, где мы не смогли использовать document.implementation.createHTMLDocument("");
. Потому что main.js
- это фоновый скрипт, который не имеет ссылки на глобальный встроенный document
.
Я много гулял, но не нашел решения. Может кто-нибудь любезно помочь?
Ваш главный скрипт имеет доступ к нескольким '' элементов. Выбор, который вы выбрали, во многом будет зависеть от пространства имен, в котором вы хотите, чтобы этот документ существовал в (XUL или HTML, с другими возможностями) или цели, для которой вам нужен «». Побочка в том, что нет «глобального», встроенного в ''; существует множество элементов '' (более чем по одному на вкладку + другие). [Этот ответ] (http://stackoverflow.com/a/29228418/3773011) имеет код, который получит ссылку на * a * '' и * a * '' для текущего окна браузера. –
Makyen