Ste*_*son 7 javascript dojo html5 postmessage web-worker
我正在寻找一种简洁的方法来检测浏览器中的postMessage是否支持发送和接收对象或只是字符串.我认为那里的某个人必须写了一些这样的东西,但我还没有设法找到解决方案.
我正在使用postMessage向/从WebWorker发送数据.虽然检测浏览器是否支持工作人员是直截了当的,但是检测对象是否可以通过postMessage发送已经证明更加困难.
我想写一个简单的检测功能.因此,如果浏览器支持发送使用它的对象.如果只允许字符串,我可以回退到使用JSON.stringify().我可能会将函数分配给dojo/has测试(尽管这与问题/答案无关).
其他人为解决这个问题做了什么?任何建议都会很棒,我是WebWorkers和postMessage的新手.提前致谢.
gre*_*ers 21
我找到了一种更简单的方法来检测postMessage是否仅支持字符串还是支持其他类型.只需在对象上添加自定义toString方法即可.当尝试在IE8和IE9中使用postMessage发送对象时,它们将被转换为对象上带有toString方法的字符串.由于支持发送对象的浏览器不会调用toString,因此我们可以使用它.此测试不是异步,因此您将立即获得结果.没有对网络工作者进行测试,但我想你可以使用相同的技术.
var onlyStrings = false;
try{window.postMessage({toString:function(){onlyStrings=true;}},"*");}catch(e){}
console.log("Browser only supports postMessage with strings? " + onlyStrings);
Run Code Online (Sandbox Code Playgroud)
在IE8,IE9,IE10以及Chrome,Firefox,Safari和Opera的最新版本中进行了测试:http:
//jsbin.com/igowoFaj/1/edit?js,console
更新:BrowserScope测试是否有更多的测试和浏览器.结论是,如果是,发送可克隆对象,数组,数字,像素数据和数组缓冲区onlyStrings
是安全的false
.理论上,所有允许发送对象的浏览器都应该使用结构化克隆算法,但Android浏览器和Opera Mobile都有怪癖.BrowserScope测试结果有点难以阅读,因为如果浏览器实际上支持该类型,则send_xxx的0只有问题,因此请检查supports_xxx.如果它们相等就没关系,但如果浏览器有支持但无法发送(当onlyStrings为false时)则是一个错误.
归档时间: |
|
查看次数: |
19465 次 |
最近记录: |