Ошибка jQuery — не удается вызвать метод ‘indexOf’ неопределенного

#jquery

#jquery

Вопрос:

У меня есть этот код, чтобы устранить проблему перехода во флэш-память по всему вашему содержимому в z-индексе:

 $("iframe").each(function(){
    var ifr_source = $(this).attr('src');
    var wmode = "wmode=opaque";
    if(ifr_source.indexOf('?') != -1) {
        var getQString = ifr_source.split('?');
        var oldString = getQString[1];
        var newString = getQString[0];
        $(this).attr('src',newString '?' wmode 'amp;' oldString);
    }
    else $(this).attr('src',ifr_source '?' wmode);
});
 

По какой-то причине я получаю ошибки в indexOf, и это нарушает работу сайта. Но, как ни странно, это не нарушает его полностью, у меня есть только одно исправление изменения размера css.

Ошибка неперехваченного типа: не удается вызвать метод ‘indexOf’ неопределенного

Сайт находится здесь: http://syndex.me

Хотелось бы знать, почему это происходит.

Ответ №1:

Получить src непосредственно из this . Для этого вам не нужно создавать целый объект jQuery.

 ifr_source = this.src;
 

В качестве бонуса this.src возвращает пустую строку, даже если атрибут src не задан, тогда attr как возвращает jQuery undefined , и вы должны выполнить проверку перед использованием indexOf .

Ответ №2:

Вероятно iframe , у вас вообще нет никакого src объявленного атрибута.

Имейте это, чтобы избежать ошибки:

 var ifr_source = $(this).attr('src') || "";
 

Редактировать: просмотр источника здесь действительно так:

 <iframe id="likeit"></iframe>
 

С другой стороны, добавление к URL-адресу этого фрейма не будет хорошей идеей, лучше просто оставить его в покое, поэтому окончательный код должен быть:

 var ifr_source = $(this).attr('src') || "";
if (ifr_source.length > 0) {
    var wmode = "wmode=opaque";
    if(ifr_source.indexOf('?') != -1) {
        var getQString = ifr_source.split('?');
        var oldString = getQString[1];
        var newString = getQString[0];
        $(this).attr('src',newString '?' wmode 'amp;' oldString);
    }
    else
        $(this).attr('src',ifr_source '?' wmode);
}
 

Комментарии:

1. Это странно, хотя, потому что тогда желаемый эффект, добавление ?wmode=opaque не происходит. Однако это останавливает ошибку.

2. Если вы добавите его, вы вызовете бесконечный цикл, поскольку iframe будет ссылаться на ту же страницу.

3. Извините, я не понимаю, моя цель — проверить, есть ли в iframe src вопросительный знак, если это так, я могу прикрепить параметр к этой строке (что остановит проблему с z-индексом флэш-видео YouTube. Я не понимаю, почему после ваших проверок, предложенных в новом коде, что это вызовет бесконечный цикл, разве это не противоречит смыслу кода? Спасибо за ваше время и терпение.

4. Весь мой смысл в том, чтобы игнорировать iframe без источника — он должен работать просто отлично (как и раньше) с фреймами, указывающими куда-то.