2010-05-02 4 views
2

У меня есть страница с несколькими iframe. Один из этих iframes имеет страницу из другого домена. Внутри этого iframe есть еще один iframe со страницей из родительского домена.Обнаружение внутри которого iframe выполняет скрипт

my page from mydomain.com 
    -> an iframe 
    -> iframe "#foo" from another-domain.com> 
    -> iframe "#bar" from mydomain.com 
    -> another iframe 

Мне нужно получить ссылку на узел «#foo» на главной странице. Модель безопасности должна позволить мне это сделать, потому что «#bar» имеет тот же домен, что и главная страница. Итак, что я делаю, выполняется итерация через массив window.top и сравнение каждого элемента с объектом window, который в настоящее время является «оконным» объектом «#bar». Мой тестовый код выглядит следующим образом:

for (var i = 0; i < top.length; i++) { 
    for (var j = 0; j < top[i].length; j++) { 
     if (top[i][j] == window) { 
      alert("The iframe number " + i + " contains me"); 
     } 
    } 
} 

Это прекрасно работает во всех браузерах, но Internet Explorer 6 вызывает ошибку безопасности при экранном top[i][j]. Любые идеи о том, как решить эту проблему на IE6?

Спасибо!

ответ

0

Сотрудник нашел решение: вместо этого встал дерево.

var getLastParent = function (baseWindow, topWindow) { 
    var lastParent, nextParent; 
    lastParent = nextParent = baseWindow; 
    while (nextParent != topWindow && nextParent != nextParent.parent) { 
     lastParent = nextParent; 
     nextParent = nextParent.parent; 
    } 
    return lastParent; 
}; 
var findWindow = function (baseWindow, topWindow) { 
    var lastParent = getLastParent(baseWindow, topWindow); 
    for (var i = 0; i < topWindow.length; i++) { 
     if (topWindow[i] == lastParent) 
      return i; 
    } 
    return -1; 
}; 
1

Похоже, что IE недовольна доступом ко всем свойствам try[i], поскольку это часть другого контекста безопасности, хотя свойство, к которому вы обращаетесь, будет находиться в том же контексте безопасности, что и скрипт.

Возможно, вам здесь не повезло. Тем не менее, вы пытались заменить:

  • попробовать [я]
  • попытка [я] [J]

с:

  • try.frames [I]
  • try.frames [i] .frames [j]

Это должно быть более или менее одинаковые. Это длинный выстрел, и я не знаю, будет ли это работать, но это может быть просто.

+0

Yup, я попытался использовать объект фреймов, но он имел тот же эффект. – juandopazo

Смежные вопросы