如何在PhantomJS中使用DOMParser?

时间:2015-06-08 18:30:04

标签: javascript dom phantomjs

以下代码段正常运行,并在Firefox,Chrome和Safari网络控制台中返回Document节点。但是,它在PhantomJS 1.9.8中返回null。

mvn clean install

知道为什么这会返回null吗?

3 个答案:

答案 0 :(得分:4)

您可能已经注意到parseFromString()采用了表示预期类型的​​第二个参数。 PhantomJS(目前版本2.0.0)根本不支持HTML:

enter image description here

正如this page所述,PhantomJS 2基于WebKit 538.1(2013年10月/ 11月),上表显示HTML支持已添加到Chrome中,版本30出现在1. Oktober 2013上已经Blink(是的,德国的WikiPedia页面比英文版更好)。根据开发周期,它可能在以后的WebKit版本中出现。

其他方式

  • PhantomJS可以从“text / xml”创建一个DOCUMENT。所以如果你有xhtml,你可以像这样解析它。

  • 您还可以查看解析HTML的其他方法。这篇MDN文章在这方面非常广泛:HTML to DOM

  • 如果那没有结果,你可以试着看看某个node.js模块是否可以充分解析HTML。 PhantomJS和node.js具有不同的执行环境,但几乎没有依赖关系的模块往往同时适用于这两种模式。

答案 1 :(得分: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? =>

或者,如果您对支持旧浏览器感兴趣,可以在任何其他环境中加载它。

答案 2 :(得分:0)

以@schpet的内容为基础。

如果您对application.html.erb中的text-align: center;感到陌生。

这对我有用: 在rails_helper.rb中:

if Rails.env.test?