Web 技术研究所

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

WeakMap在Worker中导致Firefox崩溃的BUG

  之前封装SharedWorker操作库的时候本来打算使用WeakMap的,后来由于Firefox的这个BUG而放弃了。其实本文的标题描述的不是很明确,不是所有Worker中的WeakMap都会导致崩溃,只有在WeakMap中直接添加实现了DOM事件模型的内置对象时才会崩溃。
  下面是一些测试及Firefox32@Windows7上的运行结果
//测试1,标准ES对象作为key,正常执行
new Worker('data:text/javascript,new WeakMap().set({});');
//测试2,普通的内置对象作为key,正常执行
new Worker('data:text/javascript,new WeakMap().set(Blob);');
//测试3,实现了DOM事件模型的内置对象被直接作为key,Firefox崩溃
new Worker('data:text/javascript,new WeakMap().set(self);');

//测试4,将实现了DOM事件模型的内置对象包装起来后作为key,正常执行
new Worker('data:text/javascript,new WeakMap().set([self]);');
  Chrome上这些情况都不会出错,但由于Chrome目前不支持DataURL作为Worker的执行程序,所以Chrome的测试请行将上面的测试代码改为BlobURL或者直接做成js文件引用。
  既然上面这些情况只有第三个测试会导致Firefox崩溃,其实对使用的影响不算太大。如果真有需求的话可以用一层Object将其包装起来后再作为key使用。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^