如何在iframe表单提交后关闭窗口

时间:2017-04-20 18:21:21

标签: javascript jquery iframe

我有一个带有iframe的空白页面,该页面显示来自我操控之外的外部域的表单。我正在尝试编写一些Javascript / jQuery,它会在提交表单后关闭窗口。

这是我的代码:

<body>
    <script>
        $('iframe input[type="submit"]').on('click', function () {
            window.close();
        });
    </script>

    <iframe src="SomeOtherDomain.com"></iframe>
</body>

当我点击按钮时没有任何反应。我做错了什么?

修改

我不确定它是否有所作为,但看起来iframe会调用第二个iframe ...我在iframe中有一个iframe。

2 个答案:

答案 0 :(得分:0)

只要您的iframe src来自同一个域,就可以使用:

$(document).ready(function () {
var f = $('#myframe')[0];
var win = f.contentWindow;

//Created test environment in IFrame with ID "myframe"
$(win.document.body).append('<form><input type="submit" value="click me"/></form>');
$(win.document).on('submit', function () {
    setTimeout(function () { $(f).remove();  }, 1000)
});

});

只需删除该元素,但请记住,您无法从不属于同一域的iframe中获取contentDocument。

工作方案: https://jsfiddle.net/f3eayurw/

答案 1 :(得分:0)

我认为您需要提供一些时间(100毫秒)来提交表单数据。请通过调用deleteIframeTimer

来试试
public static String decode(final String st) {
    final StringBuilder sb = new StringBuilder();

    final char[] chars = st.toCharArray();

    int i = 0;
    while (i < chars.length) {
        int repeat = 0;
        while ((i < chars.length) && Character.isDigit(chars[i])) {
            repeat = repeat * 10 + chars[i++] - '0';
        }
        final StringBuilder s = new StringBuilder();
        while ((i < chars.length) && !Character.isDigit(chars[i])) {
            s.append(chars[i++]);
        }

        if (repeat > 0) {
            for (int j = 0; j < repeat; j++) {
                sb.append(s.toString());
            }
        } else {
            sb.append(s.toString());
        }
    }

    return sb.toString();
}

@Test
public void test() {
    Assert.assertEquals("abb", decode("1a2b"));
    Assert.assertEquals("aaaaaaaaaa", decode("10a"));
    Assert.assertEquals("baaaaaaaaaa", decode("b10a"));
    Assert.assertEquals("abab", decode("2ab"));
    Assert.assertEquals("Heeeeeeeeeeeellooooo", decode("H9e3e2l5o"));
}