2

我知道 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 没有这个问题。
4

2 回答 2

0

您需要实时使用:
$('#addnew').live("click", AddNewTab);

呃,这是一个错误的答案,我认为你需要这样看:

$("a[target=form]").click( function(){
    $("#form").last().attr("src", $("a[target=form]").attr("href"));
    $("#form").reload();
    return false;
});

这行得通

于 2013-09-03T07:57:43.273 回答
0

frame name确实。这有效(在上面的 Firefox、Chrome 和 IE8 n 中):

    function AddNewTab(e) {
        $('#list').attr('id', 'nolist').attr('name', 'nolist');
        $('#form').attr('id', 'noform').attr('name', 'noform');
        if (frames.list) frames.list.name = 'nolist';
        if (frames.form) frames.form.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;

        frames.list.name = 'list';
        frames.form.name = 'form';

        return false;
    }
    $('#addnew').click(AddNewTab);

此处的工作代码:http: //jsfiddle.net/krislogy/u4VJL/8/

((PS:tchh!!我发誓我曾经尝试过,但之前无法让它发挥作用。无论如何,当我以为我尝试的时候我想我错了。谢谢大家!!))

于 2013-09-04T14:42:48.403 回答