2015-06-08 4 views
1

Следующий фрагмент работает правильно и возвращает узел Document в веб-консолях Firefox, Chrome и Safari. Однако он возвращает null в PhantomJS 1.9.8.Как использовать DOMParser в PhantomJS?

(new DOMParser()).parseFromString("<div></div>", "text/html"); 

Любая идея, почему это возвращает null?

ответ

3

Как вы могли заметить, parseFromString() принимает второй аргумент, который обозначает ожидаемый тип. HTML просто не поддерживается в PhantomJS (в настоящее время версия 2.0.0):

enter image description here

Как this page отмечает, PhantomJS 2 основан на WebKit 538.1 (октябрь/ноябрь 2013) и приведенная выше таблица показывает, что поддержка HTML был добавлен в Chrome с версией 30, которая вышла на 1. Oktober 2013, которая уже была Blink (да, немецкая страница WikiPedia лучше, чем на английском). Вероятно, это произошло в более поздней версии WebKit в зависимости от циклов разработки.

Другие способы

  • PhantomJS может создать документ из "текст/XML". Поэтому, если у вас есть xhtml, вы можете разобрать его так.

  • Вы также можете изучить другие способы анализа HTML. Эта статья MDN обширна в этом отношении: HTML to DOM.

  • Если это бесплодно, вы можете попытаться выяснить, может ли некоторый модуль node.js правильно анализировать HTML. У PhantomJS и node.js есть разные среды исполнения, но модули, у которых почти нет зависимостей, как правило, работают в обоих.

+0

Как можно создать документ из «text/xml» в PhantomJS без использования DOMParser? Спасибо и заранее! – lizlux

+0

@lizlux Я не знаю другого способа, но почему вы не используете его, если он доступен? –

0

вы можете использовать polyfill как этот:
https://gist.github.com/eligrey/1129031

если вы копируете, что в vendor/assets/javascripts, вы можете иметь его нагрузить только в тестах:

# config/initializers/assets.rb 
Rails.application.config.assets.precompile += %w(html-domparser.js) 

# app/views/layouts/application.html.erb 
<%= javascript_include_tag 'html-domparser' if Rails.env.test? => 

в качестве альтернативы, если вы заинтересованный в поддержке старых браузеров, вы можете загрузить его во всех средах, как и в других js.

Смежные вопросы