Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Запуск кода с фрейма, код в родительском окне - КАК ? (https://javascript.ru/forum/css-html/28035-zapusk-koda-s-frejjma-kod-v-roditelskom-okne-kak.html)

lamer 05.05.2012 00:08

Запуск кода с фрейма, код в родительском окне - КАК ?
 
Здравствуйте, подскажите пожалуйста, как запустить javascript код который находиться в родительском окне, а кнопка для запуска находиться во фрейме на той же странице ? (Все находиться на одном домене)
Пример кода:
Вот родительское окно, в нем код с функцией, кнопка запуска алерта находиться на странице 1.htm т.е. во фрейме
<html>

<head>

</head>

<body>
<script>
function cliKo() { alert('ok'); }
</script>
<br>
<iframe nane="frame1" src="1.htm"></iframe>
</body>

</html>


Вторая страница, тут находиться кнопка для запуска алерта:

<html>

<head>

</head>

<body>
<input type="button" value="click" onclick="cliKo();">
</body>

</html>



Подскажите как запустить код ?

vadim5june 05.05.2012 00:24

onclick="top.cliKo();">

lamer 05.05.2012 01:08

Цитата:

Сообщение от vadim5june (Сообщение 172743)
onclick="top.cliKo();">

Спасибо, так работает.
Но вариант с проверкой почему то не хочет работать, подскажите где ошибка пожалуйста.

Родительская страница с кодом:
<html>

<head>

</head>

<body>
<script>
function eLogin() {
if ((parent.document.getElementById('username').value=='') || (parent.document.getElementById('userpass').value==''))
{alert('ERROR.');return false;}
setLogin();
return false;
};

function setLogin() { alert('Login'); }
</script>
<br>
<iframe nane="frame1" src="1.htm"></iframe>
</body>

</html>


Страница с фреймом с кнопкой запуска кода:
<html>

<head>

</head>

<body>
<input type="text" id="username"><br>
<input type="text" id="userpass"><br>
<input type="button" value="click" onclick="top.eLogin()">
</body>

</html>


Пробовал разные варианты:
parent.document.getElementById('username').value
window.parent.document.getElementById('username'). value
top.document.getElementById('username').value
window.top.document.getElementById('username').val ue

Не хочет работать, подскажите пожалуйста где ошибка ?

bes 05.05.2012 09:19

Цитата:

Сообщение от lamer
как запустить javascript код который находиться в родительском окне, а кнопка для запуска находиться во фрейме на той же странице

Родительское окно.
В него загружена какая-то страница, в которой создаётся фрейм (этот фрейм будет дочерним по отношению к родительскому окну).
Во фрейм загружена какая-то страница, в которой создаётся кнопка.
То есть фрейм находится на одной странице (загруженной в родительское окно), а кнопка находится на другой странице (загруженой в дочерний фрейм), а не так как вы написали.

Главное понимать к какой странице относится скрипт, тогда станет понятно как обращаться к элементам этого скрипта: глобальные переменные и функции скрипта являются соответственно свойствами и методами того окна (объекта window), в которое загружена страница с этим скриптом.

У вас все скрипты находятся на странице, которая загружена в родительское окно, поэтому при обращении к этим скриптам (переменным, функциям) из дочернего фрейма нужно использовать приставку parent (в данном случае также подойдёт и top), содержащую ссылку на родительское окно для этого фрейма (то есть окно, в которое загружена страница, на которой содержится код создания этого фрейма).

Когда вы обращаетесь к содержимому фрейма из родительского окна можно начать с имени этого фрейма (есть также другие способы обращения и, кстати, name пишется через m), тогда как вы начали с parent (parent - ссылка на родительское окно, в данном случае на само себя).

Проверить на локальном компьютере можете через IE, а в хроме, например, не даст политика безопасности (загрузив страницы на сервер по идее всё должно заработать), можно также проверить через denwer.

vadim5june 05.05.2012 09:27

А почему вы не делаете проверку во фрейме прям-так лучше-если все же надо так то вы неправильно делаете
лучше всего передать login и пароль в виде параметров
onclick="top.eLogin(document.getElementById('usern ame').value,document.getElementById('userpass').va lue))";
а в функции eLogin(name,pass){alert(name),alert(pass)}

vadim5june 05.05.2012 09:32

если надо из родительского документа обратиться в дочерний то так
window.frames[0].document.body
но это некроссбраузерный вариант-на какихто браузерах не будет работать-под рукой кроссбраузерного нет
ну и как писали выше с локального диска в хроме вообще не обратишся

lamer 06.05.2012 02:15

Спасибо vadim5june за помощь, реализовал вот так:

<script>
function eLogin() {
if ((document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById('username').value=='') || (document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById('userpass').value==''))
{alert('ERROR.');return false;}
setLogin();
return false;
};
</script>


Особенно помог пример
window.frames[0].document.body

А на счет проверки прямо в фрейме, так это просто пример, функция имеет абсолютно другой вид =)
Ещё рас спасибо вам за помощь.

bes 06.05.2012 15:15

Цитата:

Сообщение от lamer
Особенно помог пример
window.frames[0].document.body

lamer, мой пост вы по ходу не читали.


Часовой пояс GMT +3, время: 01:16.