Web worker中的DOM操作

时间:2015-11-10 23:28:24

标签: javascript html5 web-worker

我知道工作人员无法直接操作文档,但DOM API方法如何?他们去哪儿了?!

例如,如果我发出一个接收HTML片段的请求,那么如果只需要解析它以便从特定节点检索某些数据,我应该做什么?!

在网络工作者上使用虚拟DOM绝对没办法?!

4 个答案:

答案 0 :(得分:4)

浏览器支持

DOMParserdocument.implementation通常用于在浏览器中将HTML解析为DOM。工作环境中都没有。

在Firefox中,这是不可能的,因为有人刚刚完全延迟并且决定所有线程只有一个DOM解析器实例。请参阅此错误:https://bugzilla.mozilla.org/show_bug.cgi?id=677123

在谷歌浏览器中,它也无法正常工作。

解决方法 - 外部库

没错,因为浏览器开发人员并没有意识到DOM和XML解析将成为WebWorkers的主要用途之一,我们不得不回到外部库。最好的选择似乎是JSDOM,但您需要弄明白how to browserify it

这是DOMParser尝试失败的原因,我将其保留在此主题的未来实验中:https://jsfiddle.net/svaqb2wn/2/

答案 1 :(得分:1)

我刚刚建立了一个解决这个问题的库。 它基于循环架构,它仍然是WIP,但你可以在这里找到源。

http://github.com/aronallen/-cycle-sandbox/

答案 2 :(得分:0)

您可以使用在Web Worker中运行的DOM实现之一:

答案 3 :(得分:-1)

首先,您可能认为解析XML的正确方法是XMLHttpRequest,在10个案例中,您认为正确。但是,在当前的网络工作者规范中,我们无法访问XMLHttpRequest。另一种方法是使用一些流行的XML解析库之一:

https://github.com/isaacs/sax-js

http://xmljs.sourceforge.net/index.htmlhttps://www.npmjs.com/package/xmljs

HTML只是XML,因此您可以通过这种方式解析数据。使用上面npmjs中的xmljs的示例:

var XmlParser = require("xmljs");
var fs = require("fs");


var p = new XmlParser({ strict: true });
var xml = fs.readFileSync("./SOAP1.xml"); // XML in the examples direct 
var xmlNode = p.parseString(xml, function(err, xmlNode) {
    if(err) {
        console.error(err);
        return;
    }
    var nodes = xmlNode.path(["Envelope", "Body", "GetstockpriceResponse", "Price"], true);
    console.log(nodes.map(function(n) { return n.text; }));
});