"document.createElement('script').onError"总是使用本地 fuckadblock 脚本执行,但不使用相同的脚本执行 cdnjs.cloudflare.co



背景

我有一个用他妈的块的钩子。这是钩子的代码,它工作正常。它在adblock打开时检测adblock,在adblock不打开时不检测adblock。它从服务器调用脚本,但我想存储脚本并在本地运行fuckadblock。我使用的是盖茨比框架。

import { useEffect } from 'react'
/**
* Detects of addBlock is enabled
* @param addBlockDetected What to do when addBlock is detected
*/
export default function(addBlockDetected) {
useEffect(() => {
if(typeof fuckAdBlock !== 'undefined' || typeof FuckAdBlock !== 'undefined') {
// If this is the case, it means that something tries to usurp are identity
// So, considering that it is a detection
addBlockDetected();
} else {
// Otherwise, you import the script FuckAdBlock
var importFAB = document.createElement('script');
importFAB.onload = function() {
// If all goes well, we configure FuckAdBlock
fuckAdBlock.onDetected(addBlockDetected)
// fuckAdBlock.onNotDetected(adBlockNotDetected);
};
importFAB.onerror = function() {
// If the script does not load (blocked, integrity error, ...)
// Then a detection is triggered
addBlockDetected(); 
};
importFAB.integrity = 'sha256-xjwKUY/NgkPjZZBOtOxRYtK20GaqTwUCf7WYCJ1z69w=';
importFAB.crossOrigin = 'anonymous';
// importFAB.src = '../js/fuckadblock.js';
importFAB.src = 'https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.min.js';
document.head.appendChild(importFAB);
}
}, [])
}

问题

我尝试在https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.min.js复制脚本,将其保存到本地文件并使用npm install fuckadblock。然后我将importFAB.src = 'https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.min.js';更改为importFAB.src = 'path/to/fuckadblock.js';

当我这样做的时候,看起来这个功能总是执行

importFAB.onerror = function() {
// If the script does not load (blocked, integrity error, ...)
// Then a detection is triggered
addBlockDetected(); 
};

这意味着无论广告块是打开还是关闭,它都能检测到广告块是否打开


我想在本地存储脚本,只有在实际启用adblock的情况下才能检测到adblock。


更新

我尝试更新我的脚本以包括导入npm模块,但这不起作用

import { useEffect } from 'react'
/**
* Detects of jellyBlock is enabled
* @param adBlockDetected What to do when jellyBlock is detected
*/
export default function(adBlockDetected) {
useEffect(() => {
if(typeof fuckAdBlock !== 'undefined' || typeof FuckAdBlock !== 'undefined') {
// If this is the case, it means that something tries to usurp are identity
// So, considering that it is a detection
adBlockDetected();
} else {
// Otherwise, you import the script FuckAdBlock
(async () => {

var importFAB = document.createElement('script');
importFAB.onload = function() {
// If all goes well, we configure FuckAdBlock
fuckAdBlock.onDetected(adBlockDetected)
// fuckAdBlock.onNotDetected(adBlockNotDetected);
};
importFAB.onerror = function() {
// If the script does not load (blocked, integrity error, ...)
// Then a detection is triggered
adBlockDetected(); 
};
importFAB.integrity = 'sha256-xjwKUY/NgkPjZZBOtOxRYtK20GaqTwUCf7WYCJ1z69w=';
importFAB.crossOrigin = 'anonymous';
try{
import("fuckadblock").then((fab) => {
importFAB.src = fab
}).catch(
adBlockDetected()  
) //'https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.min.js';
}catch{
adBlockDetected()
}
//      importFAB.src = await import("fuckadblock")//'https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.min.js';
document.head.appendChild(importFAB);

})
}
}, [])
}

这很可能是脚本位置错误或没有提供服务。

一种纠正方法是使用npm i fuckadblock:对import("fuckadblock")进行纠正

import { useEffect } from 'react'
/**
* Detects of adBlock is enabled
* @param adBlockDetected What to do when adBlock is detected
*/
let detected = false;
export default function(adBlockDetected) {
useEffect(() => {
if(detected) {
adBlockDetected();
return;
}
if((typeof fuckAdBlock !== 'undefined' || typeof FuckAdBlock !== 'undefined')) {
// If this is the case, it means that something tries to usurp are identity
// So, considering that it is a detection
adBlockDetected();
} else {
(async () => {
try {
const fadblock = await import("fuckadblock");
if(typeof fuckAdBlock === 'undefined' || typeof FuckAdBlock === 'undefined')
adBlockDetected()
else
fuckAdBlock.onDetected(adBlockDetected);
} catch {
adBlockDetected();
}
})();
}
}, []);
}

最新更新