所以我“解决”了我的实际问题,并改变了问题“为什么这是一个问题?”
我在这里有这个代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>iFrame Page Loading</title>
<script type='application/javascript' src='http://code.jquery.com/jquery-latest.js'></script>
<script type='application/javascript'>
$(document).ready(function() {
var $form = $('form');
var $target = $('#target');
// Create an invisible iframe right after the form.
var $iframe = $('<iframe name="_hidden"></iframe>').hide();
// Change this line to the commented version after it to fix all problems:
$target.append($iframe);
// $target.parent().append($iframe);
// Make the form target the iframe.
$form.attr('target', '_hidden');
// Make the form action the 'ajax_load' value.
$form.attr('action', $form.find('.ajax_load').attr('value'));
// On form submit, create an event to replace $target with iframe's
// contents on iframe load.
$form.submit(function() {
$iframe.bind('load', function() {
$target.html($iframe.contents().find('*').html());
// Uncommenting this line fixes Firefox but not Safari - see below
// $target.append($iframe);
$iframe.unbind('load');
});
});
});
</script>
</head>
<body>
<form method='get' action=''>
<input type='hidden' class='ajax_load' value='test.html' />
<input type='submit' value='Load' />
</form>
<div id='target'></div>
</body>
</html>
(应该可以通过将“test.html”更改为其他内容来测试此内容,只要它是本地文件;由于跨域限制,google.com将无效)
它完全符合我的要求:首先它在#target中创建一个不可见的iframe,然后更改表单,以便抓取新的URL并定位iframe。在提交时,iframe会加载抓取的内容。加载时,iframe中的html替换#target中的html。
问题是,在浏览器加载iframe后,它会继续加载......某些东西。 Firefox并没有说出什么,并愉快地继续喋喋不休。 Safari说出了问题并且停止了,我可以得到的最好的信息是iframe加载会发生某种疯狂的递归。这不太理想。
当我将隐藏的iframe放在目标之外时,问题就消失了。只有在确保在加载html后再次将iframe附加到目标时,它才会在Firefox中消失。
所以,我不再有实际问题了,但我非常想知道为什么我正在做的事情确实是一个问题:从隐藏的iframe加载HTML并使用它来替换HTML的内容那个iframe的父节点。
答案 0 :(得分:0)
您可以在代码中添加一些消息,以确定我们确切地挂在哪一行。这应该可以缩小故障范围。