Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Worker中无法处理DOM的问题

  Worker中是无法处理DOM的。大家也许会觉得这很正常嘛?Worker和页面文档执行在不同的线程中,要是可以直接操作可能会带来线程不同步的问题。那么问题来了,Worker不能处理页面文档是可以体谅的,但是为什么不能处理非页面的DOM呢,我觉得是个坑。
  并不是只有页面文档才有DOM,我们可以自己创建一个与页面文档完全隔离的文档,这些就是非页面的DOM。如果这些非页面的DOM可以在Worker中创建,可以将其视为该Worker私有的,无法在其它Worker或页面上操作。我觉得这是没有逻辑问题的。但是目前,Worker中不能创建这样的非页面DOM,而且这个设定已经被写入规范。下面是测试代码: <body>
<script style="
  display:block;white-space:pre;
  font:14px/1.5 Monospace;
">function getCurrentXML(){
  var xml="<xml><i>item1</i><i>item2</i></xml>";
  var blob=new Blob([xml],{type:"text/xml"});
  var url=URL.createObjectURL(blob);
  var xhr=new XMLHttpRequest;
  xhr.open("GET",url,true);
  xhr.onload=function(){
    console.log(xhr.responseXML);
  };
  xhr.send();
};
</script>
<hr/>
<button id="runinpage">在页面上执行</button>
<button id="runinworker">在Worker中执行</button>
<script>
runinpage.onclick=getCurrentXML;
runinworker.onclick=function(){
  var data=(getCurrentXML+"").match(/\{([\s\S]*)\}/)[1];
  var blob=new Blob([data],{type:"text/javascript"});
  var url=URL.createObjectURL(blob);
  var worker=new Worker(url);
};
</script>

  在Worker中,responseXML永远都是null
  这也不是什么冷门的用法,把页面与服务器通讯的部分抽取出来放在Worker中的做法好像很合理吧?但是此时通讯要是使用XML的话,那就呵呵了。我觉得Worker应该支持对文档的处理,只是不能支持文档对象的直接传输而已。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^