Кнопки запуска в встроенном фрейме - PullRequest
0 голосов
/ 19 мая 2009

У меня есть страница HTML + javascript, которая встраивает страницу в iframe. Я хотел бы иметь возможность вызвать кнопку отправки (которая вызывает POST) на встроенной странице, используя JavaScript на прилагаемой странице Библиотека уже делает это?

Ответы [ 2 ]

7 голосов
/ 19 мая 2009

Если IFRAME размещает страницу в том же домене, вы можете сказать

// To trigger from the enclosing page
var yourFrame = document.getElementById("iframeId");
if(yourFrame.contentDocument) {    
   yourFrame.contentDocument.getElementById("formId").submit(); // FF, etc
} else {
   yourFrame.contentWindow.document.getElementById("formId").submit(); // IE
}

// To trigger from the enclosed page
document.getElementById("formId").submit();

... где iframeId - это идентификатор iframe, а formId - это идентификатор формы внутри iframe, что-то вроде

Внутри документа:

<iframe id="iframeId" src="/somePage.html" ... >

Внутри документа в "somePage.html":

<form id="formId" method="post" action="...">

Обратите внимание, что если IFRAME размещает страницу в другом домене, то при попытке отправки с вмещающей страницы вы, вероятно, получите какую-то ошибку "отказано в доступе". Это мера безопасности, принятая браузером для предотвращения злонамеренных сценариев (например, для предотвращения таких вещей, как автоматическая отправка формы от имени пользователя)

1 голос
/ 19 мая 2009

iframe должен находиться в том же домене, в противном случае вы SOL.

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

Сначала получите кадр:

  • document.getElementById всегда работает.
  • window.frames[ frameName ] тоже подойдет, но используйте первый

Затем получите документ (вот где он становится сложным):

var doc = yourFrame.contentDocument ? yourFrame.contentDocument : yourFrame.contentWindow.document

Стандарты браузеров требуют использования contentDocument; IE (по крайней мере до 8) использует contentWindow.document для получения документа.

Наконец, вы можете взять форму и отправить ее.

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