【问题标题】:Triggering buttons in contained iframe在包含的 iframe 中触发按钮
【发布时间】:2009-05-22 10:32:20
【问题描述】:

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

【问题讨论】:

    标签: javascript html iframe


    【解决方案1】:

    如果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 在另一个域中托管页面,那么如果您尝试从封闭页面提交,您可能会收到某种“拒绝访问”错误。这是浏览器为防止恶意脚本而采取的安全预防措施(例如,防止以用户的名义自动提交表单等事情)

    【讨论】:

    • @George:你说的完全正确;谢谢你接听!
    【解决方案2】:

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

    【讨论】:

    • 成为 X-Browser 总是很方便
    猜你喜欢
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2018-11-24
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多