Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Javascript Iframe (https://javascript.ru/forum/misc/27181-javascript-iframe.html)

Vs1001 04.04.2012 19:46

Javascript Iframe
 
<script type="text/javascript">
function startfunc () {
var i, frames;
frames = document.getElementsByTagName("iframe");
for (i = 0; i < frames.length; ++i)
{
frames[i].document.forms[0].submit();
}
}
startfunc();
</script>

Пишет ошибку (Uncaught TypeError: Cannot read property 'forms' of undefined startfunc
(anonymous function))

и обрывается дальше функция

Как это решить? Если ищу формы, когда создаю страницу без Iframe, то всё работает, submit. А как только добавляю Iframe та же самая submit перестаёт работать.


"for (var i = 0; i < document.getElementsByName(\"mdcform\").length; i++) {\n"+
"document.getElementsByName(\"mdcform\")[i].submit();\n"+
" }\n"+
(вот так работает если без iframe)



Вот такие фреймы внутри:

<iframe style="display: none;">
<form method="POST" name="mdcform3" action="http://services.odata.org/OData/OData.svc/Categories">
<input type="hidden" name="..." value="..."/>
<input type="hidden" name="..." value="Mi, 04-Apr-2012 20:47:29 GMT"/>
</form>
</iframe>
<iframe style="display: none;">
<form method="POST" name="mdcform4" action="http://services.odata.org/OData/OData.svc/Categories">
<input type="hidden" name="..." value="..."/>
<input type="hidden" name="..." value="Mi, 04-Apr-2012 20:47:29 GMT"/>
</form>
</iframe>

melky 04.04.2012 22:29

у фрейма нет свойства document.

у него есть contentWindow (глобальный объект window у фрейма)
и contentDocument (объект document у фрейма)

Vs1001 05.04.2012 12:56

спасибо!

у меня не получается найти элементы во фрейме, если просто искать по документу, находит. а если во фрейме то нет. имена одни и те же.
сами фреймы тоже находят. проблема в том, что если submit делать когда нет фреймов, то всё ок. а если есть фреймы то только через них надо, иначе не идёт.


window.onload = function startfunc () {
var i, frames;
if(readCookie("MRSAPSSO2") != null){
frames = document.getElementsByTagName("iframe");
for (i = 0; i < frames.length; ++i)
{
var iframe = frames[i];
var iframeDocument = null;
if (iframe.contentDocument) {
iframeDocument = iframe.contentDocument;
} else if (iframe.contentWindow) {
// for IE 5.5, 6 and 7:
iframeDocument = iframe.contentWindow.document;
}
if (!!iframeDocument) {
// do things with the iframe's document object
} else {
// this browser doesn't seem to support the iframe document object
}
iframeDocument.getElementsByTagName("form")[0].submit();
}
}

VelMizar 05.04.2012 20:33

Это не возможно... Если содержимое Iframe не с одного домена... Кажись что-то с этим связанно....

bes 06.04.2012 08:47

http://learn.javascript.ru/frames-and-iframes

1) Задавать переменным имена, совпадающие с именами ключевых объектов (например, frames) может быть совсем небезопасно.
2) Для доступа к iframe у окна и так уже есть свойство frames[].
3) Лично мне не совсем понятно, откуда вы пытаетесь отправить данные из форм (у вас формы на той же странице, где и фреймы, я же так предполагаю, вы хотели отправить данные из форм, которые будут загружены в эти фреймы).


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