Доступ к функции javascript во вложенном iframe в IE - PullRequest
4 голосов
/ 28 мая 2009

У меня в настоящее время есть структура страницы, которая состоит из страницы (Parent), которая включает iframe (iframe0), и внутри этого iframe у меня есть другой iframe (iframe1). В iframe1 у меня есть функция javascript, которую я пытаюсь вызвать из Parent. В Firefox / Chrome / Safari я могу вызвать эту функцию со следующим кодом:

 frames["iframe0"]["iframe1"].functionName();

Однако в Internet Explorer приведенный выше код не работает и возвращает ошибку «Объект не поддерживает это свойство или метод». Я пробовал некоторые другие способы доступа к методу, и все они возвращали одну и ту же ошибку.

 window.frames.iframe0[iframe1].functionName();
 window.iframe0.iframe1.functionName();
 window.frames.iframe0.frames.iframe1.functionName();

Я даже пытался вызвать функцию в iframe0, которая вызывала функцию в iframe1 и которая даже не работала.

Кто-нибудь имеет представление о том, как получить доступ к функции javascript, вложенной в iframe глубиной 2 уровня?

Спасибо.

Обновление: Изучив проблему дальше, я обнаружил, что проблема, с которой я имею дело, не связана с тем, что я задал. Ответ, который Юлебр дал ниже, отвечает на вопрос, который я задал, и там я буду отмечен как ответ. Я, вероятно, начну другой вопрос, описывающий мою проблему более подробно.

Ответы [ 2 ]

10 голосов
/ 29 мая 2009

Я привел пример с использованием 3 HTML-файлов. Самым внешним является test.html, в котором есть iframe, содержащий iframe1.html. В свою очередь, iframe1.html содержит iframe, содержащий iframe2.html. Я надеюсь, что это тот тип установки, который вы имеете в виду.

Как правило, вы можете вызывать функцию iframe с помощью iframe.contentWindow.myfunc ();

Используя contentWindow.document, вы можете получить доступ ко второму уровню iframe.

Пример функции 'doit ()' вызывает функцию в родительском элементе, первом iframe и втором iframe.

Надеюсь, это поможет!

<!------- test.html -------->
<html>
<head>
    <script type="text/javascript">
        function parent_function() {
            alert('parent');
        }
        function doit() {
            parent_function();
            document.getElementsByTagName('iframe')[0].contentWindow.iframe1_function();
            document.getElementsByTagName('iframe')[0].contentWindow.document.getElementsByTagName('iframe')[0].contentWindow.iframe2_function();
        }
    </script>
</head>
<body>
main
<a href="javascript:doit();">do it</a>
<iframe src='iframe1.html'>
</body>
</html>

<!------- iframe1.html -------->
<html>
<head>
    <script type="text/javascript">
        function iframe1_function() {
            alert('iframe1');
        }
    </script>
</head>
<body>
frame1
<iframe src='iframe2.html'>
</body>
</html>

<!------- iframe2.html -------->
<html>
<head>
    <script type="text/javascript">
        function iframe2_function() {
            alert('iframe2');
        }
    </script>
</head>
<body>
frame2
</body>
</html>
0 голосов
/ 11 января 2017

Быстрый способ выбрать iframe - выбрать его в dom explorer, затем в консоли js вы можете запустить $0.contentWindow.myFunction()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...