我正在开发一个我想在CDN上托管的库.该库将用于跨多个服务器的许多不同域.库本身包含一个脚本(现在让我们称之为script.js),它加载一个web worker(worker.js).
加载库本身非常简单:只需将<script type="text/javascript" src="http://cdn.mydomain.com/script.js"></script>
标记添加到我想要使用该库的域(www.myotherdomain.com).但是,由于库正在从http://cdn.mydomain.com/worker.js 加载一个worker new Worker('http://cdn.mydomain.com/worker.js')
,我得到一个SecurityException.在cdn.mydomain.com上启用CORS.
对于Web worker,不允许在远程域上使用Web worker.使用CORS无济于事:浏览器似乎忽略它,甚至不执行预检检查.
解决这个问题的方法是执行XMLHttpRequest以获取worker的源,然后创建一个BLOB url并使用此url创建一个worker.这适用于Firefox和Chrome.但是,这似乎不适用于Internet Explorer或Opera.
解决方案是将工作人员放在www.myotherdomain.com上或放置一个代理文件(它只是使用XHR或importScripts从cdn加载工作者).我不喜欢这个解决方案:它要求我在服务器上放置其他文件,因为库在多个服务器上使用,所以更新会很困难.
我的问题包括两个解析: