new worker处理跨域问题

注意不要使用箭头函数哦
cros-worker.ts




const { location } = globalThis;

/** 判断url是否跨域 */
function detectCors(url: string) {
  const a = new URL(url, location.href);
  return a.origin !== location.origin;
}

const { Worker } = globalThis;
/**
 * 这个就是Worker,但是可以跨域
 * 实现了Worker的所有接口
 * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Worker
 * @see https://github.com/webpack/webpack/discussions/14648
 */
const CorsWorker = (function (scriptURL: string | URL, options?: WorkerOptions | undefined) {
  let url = typeof scriptURL === 'string' ? scriptURL.toString() : scriptURL.href;
  if (detectCors(url)) {
    let scripts: string;
    if (options?.type === 'module') {
      scripts = `import ${JSON.stringify(url)};`;
    } else {
      scripts = `importScripts(${JSON.stringify(url)});`;
    }
    url = URL.createObjectURL(
      new Blob([scripts], {
        type: 'application/javascript',
      })
    );
  }
  return new Worker(url, options);
}) as unknown as typeof Worker

export default CorsWorker;

main引入
 

import CorsWorker from './utils/cros-worker';

globalThis.Worker = CorsWorker;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值