2009-05-19 64 views
0

我有一个嵌入了iframe页面的HTML + javascript页面。我希望能够在嵌入式页面中使用javascript在封闭页面中触发提交按钮(这会导致POST)。有没有图书馆已经这样做?在包含的iframe中触发按钮

回答

7

如果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承载的网页在其他领域,那么,如果你尝试从封闭的页面提交,你可能会得到某种形式的“拒绝访问”错误。这是浏览器为防止恶意脚本而采取的安全预防措施(例如,防止像代表用户自动提交表单)

+0

yourFrame.contentWindow.document只适用于IE – geowa4 2009-05-19 17:37:04

+0

@George:你绝对正确;感谢捕捉! – 2009-05-19 17:40:50

1

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()