Невозможно прочитать свойство replace 'undefined' в элементе iframe - PullRequest
0 голосов
/ 12 сентября 2018

ОБНОВЛЕНИЕ: Обнаружено, что скрипт reCaptcha был загружен в другом частичном представлении, из-за которого iFrame не существовал, потому что скрипт Google API не загружался раньше всего!

I 'м реализации локализации reCaptcha v2.Тем не менее, я получаю jQuery 3.3.1 ошибку "Не удается прочитать свойство 'replace' of undefined".

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 не является нулевым, даже когда я получаю эту ошибку.Я погуглил проблему, но большинство ответов указывают на несуществующий элемент, который я пытаюсь использовать «заменить», но я не понимаю, как это может быть проблемой, если элемент никогда не равен нулю.

Есть предложения?

1 Ответ

0 голосов
/ 12 сентября 2018

Вы не должны просто проверять, является ли iframeGoogleCaptcha нулевым, вы должны беспокоиться о его src, так как это то, к чему вы обращаетесь. Измените if (iframeGoogleCaptcha != null) на if (iframeGoogleCaptcha.attr("src") != undefined). Это уберет ошибку и ничего не произойдет, но, надеюсь, вы сможете увидеть, что происходит более четко.

...