Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示警报消息后停止功能时出错_Javascript_Html_Jquery - Fatal编程技术网

Javascript 显示警报消息后停止功能时出错

Javascript 显示警报消息后停止功能时出错,javascript,html,jquery,Javascript,Html,Jquery,我正在开发一个代理服务,一切都很好。当您按下提交按钮时,它具有onclick功能。现在,我还可以检测何时启用adblock,如果检测到adblock,我不希望该函数执行(这意味着我希望这样,如果启用了adblock,代理将不会真正启动,并且我希望仅当您按下按钮直到禁用adblock时,警报消息才会弹出。) 如果你有adblock,这里有一个我正在寻找的例子。()在此网站上,如果启用了adblock,则无法提交表单。在你按下警报框上的“ok”后,我的仍会通过。在我的javascript代码中,我尝

我正在开发一个代理服务,一切都很好。当您按下提交按钮时,它具有onclick功能。现在,我还可以检测何时启用adblock,如果检测到adblock,我不希望该函数执行(这意味着我希望这样,如果启用了adblock,代理将不会真正启动,并且我希望仅当您按下按钮直到禁用adblock时,警报消息才会弹出。)

如果你有adblock,这里有一个我正在寻找的例子。()在此网站上,如果启用了adblock,则无法提交表单。在你按下警报框上的“ok”后,我的仍会通过。在我的javascript代码中,我尝试了一个“return false”和一个“else”,但似乎没有任何效果。如果启用了adblock,我不希望表单提交

我希望这样,如果启用了adblock,它将显示警报框,当您按“确定”时,我不希望它仍在新选项卡中启动代理。我希望它在禁用adblock时启动

这是我的密码:

$(文档).ready(函数(){
$('#browsebtn')。单击(函数(){
val=$('#urlinput').val();
$('#urlinput').val(val.replace($('#remove1').val(),“”);
});
});
$(文档).ready(函数(){
$('#browsebtn')。单击(函数(){
val=$('#urlinput').val();
$('#urlinput').val(val.replace($('#remove2').val(),“”);
});
});
$(文档).ready(函数(){
$('#browsebtn')。单击(函数(){
val=$('#urlinput').val();
$('#urlinput').val(val.replace($('#remove3').val(),“”);
});
});
功能强制降下(strInput){
strInput.value=strInput.value.toLowerCase();
}
函数checkAdBlocker(){
试一试{
取回(
新请求(“https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js", {
方法:'头',
模式:“无cors”
})).catch(错误=>{
showNotification();
});
}捕获(e){
//请求失败,可能是由于ad阻止程序
showNotification();
}
var x;
x=document.getElementById(“urlinput”).value;
如果(x==“”| | x==”https://“| | x==”http://“| | x==”www.“| | x==”http://www.“| | x==”https://www.") {
$(“#错误”).show().delay(3000.fadeOut();
返回false;
}否则{
var ddl=document.getElementById(“服务器类型”);
var selectedValue=ddl.options[ddl.selectedIndex].value;
如果(selectedValue==“server1”){
setTimeout(函数(){
打开窗户https://devoooo-proxy.herokuapp.com/proxy/'+document.getElementById('urlinput').value);
}, 200);
}
如果(selectedValue==“server2”){
setTimeout(函数(){
打开窗户https://google-github.herokuapp.com/http/'+document.getElementById('urlinput').value);
}, 200);
}
如果(selectedValue==“server3”){
setTimeout(函数(){
打开窗户https://proxy.bibliotecavirtualalergia.com/browse.php?u=http://'+document.getElementById('urlinput').value);
}, 200);
}
如果(selectedValue==“server4”){
setTimeout(函数(){
打开窗户http://server3main.epizy.com/browse.php?u=http://'+document.getElementById('urlinput').value);
}, 200);
}
}
}
函数showNotification(){
警报(“请禁用adBlocker”);
}

浏览
选择服务器:

在类似的情况下,我通常在
while loop
中使用
try…catch
作为跟踪变量:

while (true) {
    var adBlocker = false
    try {
        fetch(
            new Request("https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js", {
                method: 'HEAD',
                mode: 'no-cors'
            })).catch(error => {
                showNotification();
                adBlocker = true
            });
    } catch (e) {
        // Request failed, likely due to ad blocker
        showNotification();
        adBlocker = true
    }
    if (adBlocker == false) {
        break
    }
}
更新:
fetch
是异步函数,因此
adBlocker
变量是
false
,循环在引导错误之前中断 在这段代码中,我使fetch-In-async函数能够使用
wait
并从
调用
redirect
,然后使用
fetch
成功的方法:

function checkAdBlocker() {
async function AdBlock() {
    try {
        // Wait for fetch
        let adTest = await fetch("https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js")
            .then(response => {
                redirect()
                adBlocker = false;
            })
            .catch(error => {
                showNotification();
            });
    } catch (e) {
        // Request failed, likely due to ad blocker
        showNotification();
    }
}

AdBlock()


function redirect() {
    var x;
    x = document.getElementById("urlinput").value;
    if (x == "" || x == "https://" || x == "http://" || x == "www." || x == "http://www." || x == "https://www.") {
        $("#error").show().delay(3000).fadeOut();
        return false;
    } else {
        var ddl = document.getElementById("servertype");
        var selectedValue = ddl.options[ddl.selectedIndex].value;
        if (selectedValue == "server1") {
            setTimeout(function () {
                window.open('https://devoooo-proxy.herokuapp.com/proxy/' + document.getElementById('urlinput').value);
            }, 200);
        }
        if (selectedValue == "server2") {
            setTimeout(function () {
                window.open('https://google-github.herokuapp.com/http/' + document.getElementById('urlinput').value);
            }, 200);

        }
        if (selectedValue == "server3") {
            setTimeout(function () {
                window.open('https://proxy.bibliotecavirtualalergia.com/browse.php?u=http://' + document.getElementById('urlinput').value);
            }, 200);

        }
        if (selectedValue == "server4") {
            setTimeout(function () {
                window.open('http://server3main.epizy.com/browse.php?u=http://' + document.getElementById('urlinput').value);
            }, 200);

        }
    }
}

}

它可以工作,但仍然无法摆脱新选项卡的打开。我需要它,以便在显示警报框后新选项卡不会打开。好的,问题是
fetch
是异步函数,因此代码不会等待其响应,我已更新了答案,请尝试(:嗨,谢谢你花了这么多时间在这上面。到目前为止,它似乎在工作,但每当你试图关闭警报框,它就会再次打开-它永远不会停止。如果你有一个adblocker,请尝试查看此错误,只需删除
而循环
(:Lol,甚至没有检查循环!(我对javascript非常陌生)非常感谢,它工作得非常好!:)