我知道 iframe 是邪恶的,但我的是遗留应用 n 我需要在其中使用 iframe。所以……
我需要为我的网络应用动态创建 n 个 iframe 显示标签。所有帧源都是域内的,因此可以在帧内进行完全遍历 n 访问。
DOM 中 iframe 的问题在于这些 iframe 注册为 window.frames.framename,因此我将在“frames”对象中包含这些对象的数组。
我的要求是“事件”框架必须具有名称“表单”。所以我在将该框架设置为事件时更改了该 iframe 属性。但这并没有在 DOM 中反射(reflect)为 window.frames.form,所以我也通过像这样设置当前框架对象来手动更改它: frames.form = my_frame.content 窗口
所有这些工作正常 n 我现在能够正确访问事件“表单”iframe 中 n 中的所有内容。
现在的问题是我在主页上的链接有 target="form"。目标未被识别为名称为“表单”的最新集(事件)iframe,因此单击该链接时会在浏览器的新窗口/选项卡中打开。此行为在除 firefox 之外的所有浏览器中都存在。 (Firefox 执行所需的操作:以最新形式的 iframe 打开这些链接)
我想我不了解浏览器如何操纵与 iframe 相关的 DOM 中的此类更改。所以任何帮助将不胜感激。谢谢!
更新: 这是一个简化的代码(注意:不是原始代码):http://jsfiddle.net/u4VJL/5/
function AddNewTab(e) {
$('#list').attr('id', 'nolist').attr('name', 'nolist');
$('#form').attr('id', 'noform').attr('name', 'noform');
$(document.body).append('<iframe id="list" name="list" src="" marginwidth="0" marginheight="0" scrolling="auto" frameborder="1" class="form" style="width:22%"></iframe>');
$(document.body).append('<iframe id="form" name="form" src="" marginwidth="0" marginheight="0" scrolling="auto" frameborder="1" class="form" style="width:74%"></iframe>');
frames.list = $('#list')[0].contentWindow;
frames.form = $('#form')[0].contentWindow;
return false;
}
$('#addnew').click(AddNewTab);
重现问题的步骤:
- 点击一次“添加新标签”链接。
- 单击“示例链接”- 该 href 将加载到右侧框架中 命名为“表单”。
- 再次点击“添加新标签”。应该会出现一个新的 iframe。
- 再次点击“示例链接”。该页面现在应该在第二个右侧加载 框架,但它首先加载。
- 注意:存在此问题的浏览器(我已经测试过):Google Chrome、 IE8。 Firefox 没有这个问题。
最佳答案
你需要使用 live:
$('#addnew').live("点击", AddNewTab);
呃,这是一个错误的答案,我认为你需要这样看:
$("a[target=form]").click( function(){
$("#form").last().attr("src", $("a[target=form]").attr("href"));
$("#form").reload();
return false;
});
这行得通
关于javascript - 当 iframe DOM 更改时,目标 ="framename"如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18565278/