无法读取iframe元素上的替换“未定义”属性

时间:2018-09-12 06:31:36

标签: jquery html recaptcha

更新:发现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怎么可能会成为问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您不仅应该检查iframeGoogleCaptcha是否为空,还应该担心其src,因为这是您要访问的东西。将if (iframeGoogleCaptcha != null)更改为if (iframeGoogleCaptcha.attr("src") != undefined)。这将使错误消失并且什么也不会发生,但是希望您能够更清楚地看到正在发生的事情。