MCPcopy Create free account
hub / github.com/zxlie/FeHelper / _getWorkerInstance

Function _getWorkerInstance

apps/json-format/format-lib.js:1580–1636  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1578 * @returns {Promise<Worker|null>}
1579 */
1580 let _getWorkerInstance = async function() {
1581 if (workerInstance) {
1582 return workerInstance;
1583 }
1584
1585 // 如果已经检测到CSP限制,直接返回null,避免重复尝试
1586 if (cspRestricted) {
1587 return null;
1588 }
1589
1590 // 检查基本环境限制(沙盒、协议等)
1591 if (_checkBasicRestrictions()) {
1592 cspRestricted = true;
1593 return null;
1594 }
1595
1596 // 在非chrome-extension协议下,使用Blob URL方式创建Worker可能会触发CSP错误
1597 // 为了避免控制台报错,直接使用同步模式
1598 // 只有在chrome-extension协议下才使用Worker(不会有CSP限制)
1599 if (location.protocol !== 'chrome-extension:') {
1600 // 静默标记为受限,直接使用同步模式,避免触发CSP错误
1601 cspRestricted = true;
1602 return null;
1603 }
1604
1605 // 只在chrome-extension协议下创建Worker
1606 let workerUrl = chrome.runtime.getURL('json-format/json-worker.js');
1607 // 判断是否为Firefox
1608 const isFirefox = typeof InstallTrigger !== 'undefined' || navigator.userAgent.includes('Firefox');
1609 try {
1610 if (isFirefox) {
1611 try {
1612 workerInstance = new Worker(workerUrl);
1613 return workerInstance;
1614 } catch (e) {
1615 // Firefox下创建Worker失败,静默处理
1616 cspRestricted = true;
1617 return null;
1618 }
1619 } else {
1620 // Chrome/Edge在chrome-extension协议下,可以直接使用Worker URL,不需要Blob
1621 try {
1622 workerInstance = new Worker(workerUrl);
1623 return workerInstance;
1624 } catch (e) {
1625 // 创建Worker失败,静默处理
1626 cspRestricted = true;
1627 return null;
1628 }
1629 }
1630 } catch (e) {
1631 // 任何其他错误,静默标记为CSP受限并回退
1632 cspRestricted = true;
1633 workerInstance = null;
1634 return null;
1635 }
1636 };
1637

Callers 1

formatFunction · 0.85

Calls 1

_checkBasicRestrictionsFunction · 0.85

Tested by

no test coverage detected