如何解决Internet Explorer中使用CoinHive时出现的SCRIPT5022: SecurityError?
解决IE中CoinHive的SecurityError问题
这个错误的核心原因是Internet Explorer对Web Worker的加载机制有严格限制——它不允许从Blob URL(也就是CoinHive.CRYPTONIGHT_WORKER_BLOB生成的URL)加载Worker脚本,必须使用同源的外部脚本文件。下面是具体的解决步骤:
1. 提取Worker脚本内容
首先,你需要把CoinHive的Cryptonight Worker脚本从Blob里提取出来。可以在正常运行的浏览器(比如Chrome、Firefox)中操作:
- 打开浏览器控制台,输入这段代码并执行:
fetch(CoinHive.CRYPTONIGHT_WORKER_BLOB).then(res => res.text()).then(console.log) - 控制台会输出Worker的完整JS代码,把这段代码复制下来,保存为一个单独的文件,比如
cryptonight-worker.js。
2. 修改CoinHive的初始化逻辑
接下来,通过浏览器检测,让IE环境加载你保存的外部Worker文件,其他浏览器保持原有Blob加载逻辑:
// 检测当前是否为IE浏览器 function isIE() { return window.navigator.userAgent.indexOf('MSIE ') > -1 || window.navigator.userAgent.indexOf('Trident/') > -1; } // 针对IE替换Worker加载源 if (isIE()) { // 替换成你保存的worker文件的同源路径,比如当前域名下的/js/cryptonight-worker.js CoinHive.CRYPTONIGHT_WORKER_BLOB = '/path/to/cryptonight-worker.js'; } // 正常初始化CoinHive var miner = new CoinHive.Anonymous('你的站点密钥'); miner.start();
3. 确保Worker文件同源
务必保证cryptonight-worker.js和你的网页处于同一域名下(同源),IE不允许Worker加载跨域脚本,否则依然会触发安全错误。
额外提示
- 这种兼容方式只会影响IE,其他浏览器仍能正常使用Blob加载,不会破坏原有功能。
- 如果CoinHive更新了Worker脚本,记得同步更新你本地保存的
cryptonight-worker.js文件。
内容的提问来源于stack exchange,提问作者user9678848
相关产品推荐
相关产品推荐

