我有一个带有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。
答案 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。
答案 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"));
}