I have an HTML + javascript page that embeds a page in an iframe. I would like to be able to trigger a submit button (which causes a POST) within the embedded page using javascript in the enclosing page. Is there a library already doing this?
If the IFRAME hosts a page in the same domain, you can say
// 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();
... where iframeId is the ID of the iframe, and formId is the ID of the form inside the iframe, something like
Inside the document:
<iframe id="iframeId" src="/somePage.html" ... >
Inside the document at "somePage.html":
<form id="formId" method="post" action="...">
Note that if the IFRAME is hosting a page in another domain, then if you try to submit from the enclosing page, you will probably get some kind of "access denied" error. This is a security precaution taken by the browser to prevent malicious scripting (e.g. to prevent things like automatically submitting a form on a user's behalf)
The iframe needs to be in the same domain, otherwise you are SOL.
To access the elements in the frame, you need to behave differently in different browsers.
First, get the frame:
document.getElementByIdalways works.window.frames[ frameName ]should be fine too, but use the first one
Then get the document (here's where it gets tricky):
var doc = yourFrame.contentDocument ? yourFrame.contentDocument : yourFrame.contentWindow.document
Standards browsers require the use of contentDocument; IE (at least before 8) uses contentWindow.document to get the document.
Finally, you can grab the form and submit it.
doc.getElementById('yourForm').submit()