SHA256
Перевести тестовый контур на t.shineup.me
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
||||
const SOLANA_WEB3_SCRIPT_SRC = './solana-web3.iife.min.js';
|
||||
|
||||
let solanaWeb3Promise = null;
|
||||
|
||||
function getExistingScript() {
|
||||
return document.querySelector('script[data-shine-solana-web3="1"]');
|
||||
}
|
||||
|
||||
function resolveScriptUrl() {
|
||||
return new URL(SOLANA_WEB3_SCRIPT_SRC, import.meta.url).toString();
|
||||
}
|
||||
|
||||
export function loadSolanaWeb3() {
|
||||
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
||||
return Promise.reject(new Error('Solana Web3 loader доступен только в браузере'));
|
||||
}
|
||||
if (window.solanaWeb3) {
|
||||
return Promise.resolve(window.solanaWeb3);
|
||||
}
|
||||
if (!solanaWeb3Promise) {
|
||||
solanaWeb3Promise = new Promise((resolve, reject) => {
|
||||
const existing = getExistingScript();
|
||||
if (existing) {
|
||||
existing.addEventListener('load', () => resolve(window.solanaWeb3), { once: true });
|
||||
existing.addEventListener('error', () => reject(new Error('Не удалось загрузить локальный solana-web3.js')), { once: true });
|
||||
return;
|
||||
}
|
||||
|
||||
const script = document.createElement('script');
|
||||
script.src = resolveScriptUrl();
|
||||
script.async = true;
|
||||
script.dataset.shineSolanaWeb3 = '1';
|
||||
script.onload = () => {
|
||||
if (!window.solanaWeb3) {
|
||||
reject(new Error('Локальный solana-web3.js загружен, но объект solanaWeb3 недоступен'));
|
||||
return;
|
||||
}
|
||||
resolve(window.solanaWeb3);
|
||||
};
|
||||
script.onerror = () => reject(new Error('Не удалось загрузить локальный solana-web3.js'));
|
||||
document.head.appendChild(script);
|
||||
});
|
||||
}
|
||||
return solanaWeb3Promise;
|
||||
}
|
||||
Reference in New Issue
Block a user