var tempDiv = document.createElement('div');
Если вы находитесь в среде XUL, это не создает узел элемента HTML: это будет элемент XUL. Поскольку свойство innerHTML
является эксклюзивным для HTMLElement
, а не для других XML Element
s, установка innerHTML
для tempDiv ничего не изменит (кроме добавления пользовательского свойства, содержащего строку HTML). Следовательно, внутри tempDiv нет элементов с классом «g» ... внутри вообще нет элементов.
Если в браузер загружен простой HTML-документ, вы можете попробовать использовать content.document.createElement
, чтобы получить элемент-оболочку HTML, для которого будет доступен innerHTML
. Это все еще не лучший способ проанализировать целую страницу HTML, потому что рассматриваемый документ может содержать <head>
контент, который вы не можете поместить в div, и HTTP-заголовки, которые вы будете выбрасывать. Вероятно, лучше загрузить целевой файл в собственный объект HTMLDocument. Хороший способ сделать это - использовать iframe
. См. эту страницу для примеров обоих этих подходов.
tempDiv.innerHTML = myHTML.replace(/<script(.|\s)*?\/script>/g, '');
Это семь оттенков не очень хорошей идеи для обработки HTML с помощью регулярных выражений; это может пойти не так во многих случаях, когда Google немного изменит разметку своей страницы. Пусть браузер вместо этого выполняет работу по синтаксическому анализу. Установка innerHTML
не приводит к немедленному выполнению элементов скрипта (хотя дальнейшие манипуляции с DOM возможны); Вы можете выбрать ненужные элементы скрипта позже, если вам нужно. С подходом XUL iframe вы можете просто отключить JavaScript в iframe.
for (var gclass in gclasses) {
Цикл for...in
предназначен для использования против объектов, используемых в качестве отображений. Он должен не использоваться для итерации последовательности (такой как Array, NodeList или в этом случае HTMLCollection), поскольку он не выполняет то, что вы ожидаете. Для повторения последовательностей придерживайтесь стандартного цикла в стиле C for (var i= 0; i<sequence.length; i++)
.
Вы также можете сделать добавление объявлений var
для всех остальных локальных переменных.