不幸的是,我必须使用 VPN 才能访问 google,包括 recapcha。一些 chrome 扩展可以将它们重定向到 recaptcha.net,否则我根本看不到验证码......在大多数情况下有效,但有时无效。现在我得到了这个网站,源代码显示替换没有发生。 就像:
<div class="gglcptch gglcptch_v3"><input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response"> <script src="https://www.google.com/recaptcha/api.js?render=6LesAYIUAAAAAMj2s2eUJfWEJNiAZTdeGONG5r5w"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('6LesAYIUAAAAAMj2s2eUJfWEJNiAZTdeGONG5r5w', {action: 'BWS_reCaptcha'}).then(function(token) {
document.querySelectorAll( "#g-recaptcha-response" ).forEach( elem => ( elem.value = token ) );
});
});
</script></div>
所以我组装了这段代码:
$(document).ready(function(){
$('.gglcptch gglcptch_v3').html(function(index,html){
return html.replace(/www\.google\.com\/recaptcha\//g,'recaptcha.net/recaptcha/');
});
});
Chrome 开发人员没有显示错误,但替换仍然没有发生。 所以我的猜测是顺序?当 document.ready 时,脚本已经完成运行? 我该怎么办?
最佳答案
<强>1。你的选择器是错误的。应该像下面这样:
$('.gglcptch.gglcptch_v3').html(
// ... your function
)
$(document).ready(function(){
$('.gglcptch.gglcptch_v3').html(function(index,html){
return html.replace(/www\.google\.com\/recaptcha\//g,'recaptcha.net/recaptcha/');
});
console.log($('.gglcptch.gglcptch_v3 script').attr('src'))
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="gglcptch gglcptch_v3"><input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response"> <script src="https://www.google.com/recaptcha/api.js?render=6LesAYIUAAAAAMj2s2eUJfWEJNiAZTdeGONG5r5w"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('6LesAYIUAAAAAMj2s2eUJfWEJNiAZTdeGONG5r5w', {action: 'BWS_reCaptcha'}).then(function(token) {
document.querySelectorAll( "#g-recaptcha-response" ).forEach( elem => ( elem.value = token ) );
});
});
</script></div>
<强>2。但这不会将 google recapcha 替换为任何其他外部来源。
when document.ready, script already done running?
答案是:是的。
<强>3。您应该加载外部脚本(来自 recaptcha.net 等)。 参见例如此链接:JavaScript - function to load external JS files is needed
关于javascript - jquery 查找并替换脚本代码中的字符串然后运行此脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60472675/