2010-09-11 2 views
0

У меня есть страница HTML, где у меня есть этот формат по существу:Как вызвать функцию яваскрипта внутри соседнего фрейма

<html> 
<body> 

<!-- iFrame A --> 
<iframe></iframe> 

<!-- iFrame B --> 
<iframe></iframe> 
</body> 
</html> 

В IFRAME «B», я хотел бы, чтобы вызвать функцию JS в IFRAME «А ", что в конечном итоге изменит свойство window.location и перенаправит страницу. У меня есть jquery и в моем распоряжении, но он не смог понять способ вызова чего-то в этом соседнем фрейме.

Любые предложения?

+0

Все ли 3 человека в одном домене? Если нет, то есть в каждом домене и которым вы управляете? –

+0

Да, все три в одном и том же домене – mirezus

ответ

0

Используйте window.parent для получения родительского (главного окна), затем используйте window.frames в родительском окне, чтобы получить фрейм B. Оттуда вызывается ваша функция.

+0

В некоторых браузерах массив window.frames заполняется только в том случае, если фреймы названы, вместо того, чтобы иметь только ID – mplungjan

7

Предполагая, что все находится на том же домене, и у вас есть две плавающие фреймы с идентификаторами "IFrame-а" и "IFrame-б", с JQuery в родительском:

В раме A:

function foo() { 
    alert("foo from frame A"); 
} 

от кадра:

window.parent.$("#iframe-a")[0].contentWindow.foo(); 

И вы должны увидеть «Foo из кадра А» получить извещение.

+1

, почему [0]? и почему родитель? .. Окно $ ("# iframeA") contentWindow.foo(); должно быть достаточно, если id = "iframeA", так как вы всегда должны иметь уникальные идентификаторы – mplungjan

+0

Я не уверен, почему это работает, но это так. Мне придется исследовать это еще немного. Спасибо за ваши идеи @bcherry – mirezus

+0

@mplungjan. Поскольку мы находимся в кадре B, нам нужно пройти до родителя, прежде чем мы сможем запросить фрейм A, поскольку он не является частью DOM B. '[0]' получает необработанный узел DOM из объекта jQuery, поэтому мы можем получить доступ к 'contentWindow'. – bcherry

1

В некоторых браузерах массив window.frames заполняется только в том случае, если фреймы имеют именованные имена, а не только ID Если кадры названы и содержимое принадлежит одному и тому же происхождению (домен, порт, протокол) то window.frameb.functionName() вызовет функцию в стандартном javascript. Другие ответы для jQuery version

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