Я сравниваю все iframes в моем javascript, чтобы увидеть, соответствует ли один из них элементу тела моего элемента (a -tag). У меня проблема в том, что коллекция iframes может иногда меняться, потому что все они генерируются фреймворком. Поэтому иногда я получаю ошибки «Отказано в доступе» в IE8, а иногда нет. Я не ссылаюсь ни на какие внешние Iframe, так как все мои Iframe являются частью фреймворка и, следовательно, имеют одинаковый протоколл, порт и т. Д. Вот код, который я использую для циклического перемещения по коллекции iframe:
var calculatedwidth = 0;
var calculatedheight = 0;
var searchbody = $(srcElement).closest('body');
//I store the Iframe-nodelist in var arrFrames
var arrFrames = document.getElementsByTagName("iframe");
LabelA1:
for(i = 0; i<arrFrames.length; i++){
//console.log(i);
//if(arrFrames[i].id != 'PeopleDetailsIframe'){
if($(arrFrames[i].contentWindow.document.body).is(searchbody)){
// This line is where the error occures normaly
calculatedwidth = $(arrFrames[i]).offset().left;
calculatedheight = $(arrFrames[i]).offset().top;
break LabelA1;
}
else{
//console.log("Forum Iframe not found");
}
}
}
Я временно исправил свою проблему, добавив разрыв, чтобы выйти из цикла, если найден мой искомый iframe. Это работает примерно в 80% случаев, когда мой код выполняется. Но так как веб-страница настраивается, некоторые пользователи ответили, что они получают ошибку javascript при запуске моего кода. Основываясь на некоторых исследованиях, проведенных мной по этому вопросу Междоменные сценарии , Создание сценариев с помощью коллекции Iframe , я узнал, что коллекция Iframe является живой коллекцией? Таким образом, это означает, что коллекция обязательно изменится (иногда), когда я буду проходить через нее. Поэтому я предположил, что это может вызвать 2 ошибки, бесконечный цикл или неправильные ошибки индекса. Я думал, что сохранение ссылки на iframes в var предотвратит ошибки. Но, очевидно, я был неправ:
var arrFrames = document.getElementsByTagName("iframe");
Это не помогло. Какие-нибудь предложения, как я могу предотвратить неправильный индекс Проблема? Или я совершенно не прав насчет моей проблемы?
Помощь очень ценится!