【发布时间】:2009-05-22 10:32:20
【问题描述】:
我有一个在 iframe 中嵌入页面的 HTML + javascript 页面。我希望能够使用封闭页面中的 javascript 在嵌入页面中触发提交按钮(这会导致 POST)。有图书馆已经这样做了吗?
【问题讨论】:
标签: javascript html iframe
我有一个在 iframe 中嵌入页面的 HTML + javascript 页面。我希望能够使用封闭页面中的 javascript 在嵌入页面中触发提交按钮(这会导致 POST)。有图书馆已经这样做了吗?
【问题讨论】:
标签: javascript html iframe
如果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 的 ID,formId 是 iframe 内的表单 ID,类似于
文档内部:
<iframe id="iframeId" src="/somePage.html" ... >
在“somePage.html”的文档内:
<form id="formId" method="post" action="...">
请注意,如果IFRAME 在另一个域中托管页面,那么如果您尝试从封闭页面提交,您可能会收到某种“拒绝访问”错误。这是浏览器为防止恶意脚本而采取的安全预防措施(例如,防止以用户的名义自动提交表单等事情)
【讨论】:
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()
【讨论】: