更新:发现reCaptcha脚本已在另一个局部视图中加载,这导致iFrame不存在,因为google API脚本不会在其他所有内容之前加载!
我正在实现reCaptcha v2的本地化。但是,我收到了jQuery 3.3.1错误“无法读取未定义的属性'replace'”。
function setRecaptchaLanguage() {
var lang = 'hr';
switch (window.localStorage.getItem('activeCulture')) {
case 'hr':
lang = 'hr';
break;
case 'en-US-POSIX':
lang = 'en';
break;
}
if (window.localStorage.getItem('language') == 'ru-RU') {
lang = 'ru';
window.localStorage.setItem('language', null);
}
// Get GoogleCaptcha iframe
debugger
var iframeGoogleCaptcha = $('#captchaElement').find('iframe');
// For setting new language
if (iframeGoogleCaptcha != null)
iframeGoogleCaptcha.attr("src", iframeGoogleCaptcha.attr("src").replace(/hl=(.*?)&/, 'hl=' + lang + '&'));
}
$(document).ready(function () {
//set reCaptcha language
setRecaptchaLanguage();
});
这个错误不会每次都出现,我仍然很难确定这个问题。切换语言时会发生,但是即使我收到此错误,“ iFrameGoogleRecaptcha”也不为空。我已经搜索了这个问题,但是大多数答案都指向我试图在其上使用'replace'的不存在的元素,但是我不明白如果该元素永远不会为null怎么可能会成为问题。
有什么建议吗?
答案 0 :(得分:2)
您不仅应该检查iframeGoogleCaptcha
是否为空,还应该担心其src
,因为这是您要访问的东西。将if (iframeGoogleCaptcha != null)
更改为if (iframeGoogleCaptcha.attr("src") != undefined)
。这将使错误消失并且什么也不会发生,但是希望您能够更清楚地看到正在发生的事情。