我知道 iframe 是邪恶的,但我的是旧版应用程序,我需要在其中使用 iframe。所以...
我需要为我的网络应用程序动态创建 n 个 iframe 显示选项卡。所有帧源都是域内的,因此可以在帧内进行完全遍历 n 访问。
DOM 中的 iframe 的问题是这些 iframe 注册为 window.frames.framename,因此我将在“frames”对象中拥有这些对象的数组。
我的要求是“活动”框架必须具有“表单”名称。所以我在将该框架设置为活动时更改了该 iframe 属性。但这并没有在 DOM 中反映为 window.frames.form,所以我通过像这样设置当前框架对象来手动更改它:frames.form = my_frame.content Window
所有这一切都很好,我现在可以从活动的“表单”iframe 中正确访问 n 中的所有内容。
现在的问题是我在主页中具有 target="form" 的链接。目标未被识别为名称为“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。
- 再次单击“示例链接”。该页面现在应该在第二个右侧框架中加载,但它首先加载。
- 注意:有这个问题的浏览器(我已经测试过):谷歌浏览器,IE8。Firefox 没有这个问题。