Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 目标是什么;framename";在iframe DOM发生更改时工作_Javascript_Html_Dom_Iframe_Target - Fatal编程技术网

Javascript 目标是什么;framename";在iframe DOM发生更改时工作

Javascript 目标是什么;framename";在iframe DOM发生更改时工作,javascript,html,dom,iframe,target,Javascript,Html,Dom,Iframe,Target,我知道iFrame是邪恶的,但我的是遗留应用程序n,我需要在其中使用iFrame。所以 我需要为我的web应用动态创建iFrame的n个显示选项卡。所有帧源都是域内的,因此帧内的完全遍历n访问是可能的 DOM中的iframe的问题是这些iframe注册为window.frames.framename,因此我将在“frames”对象中拥有这些对象的数组 我的要求是“活动”框架必须具有名称“表单”。因此,当将该帧设置为活动时,我会更改该iframe属性。但这在DOM中并不反映为window.fram

我知道iFrame是邪恶的,但我的是遗留应用程序n,我需要在其中使用iFrame。所以

我需要为我的web应用动态创建iFrame的n个显示选项卡。所有帧源都是域内的,因此帧内的完全遍历n访问是可能的

DOM中的iframe的问题是这些iframe注册为window.frames.framename,因此我将在“frames”对象中拥有这些对象的数组

我的要求是“活动”框架必须具有名称“表单”。因此,当将该帧设置为活动时,我会更改该iframe属性。但这在DOM中并不反映为window.frames.form,因此我通过如下设置当前帧对象来手动更改: frames.form=my_frame.content窗口

所有这些都很好,我现在能够正确地访问活动“表单”iframe中n中的所有内容

现在的问题是我在主页上的链接有target=“form”。目标未被识别为名为“form”的最新设置(活动)iframe,n因此,单击该链接会在浏览器的新窗口/选项卡中打开。除firefox外,所有浏览器都存在此行为。(Firefox做了必要的事情:以最新的iframe格式打开这些链接)

我想我不知道浏览器如何处理与iframe相关的DOM中的这些更改。因此,任何帮助都将不胜感激。谢谢

更新: 下面是一个简化的代码(注意:不是原始代码):

函数AddNewTab(e){
$('#list').attr('id','nolist').attr('name','nolist');
$('#form').attr('id','noform').attr('name','noform');
$(document.body).append(“”);
$(document.body).append(“”);
frames.list=$('#list')[0].contentWindow;
frames.form=$('#form')[0].contentWindow;
返回false;
}
$(#addnew')。单击(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;
});

这确实有效

帧名称
。这是可行的(在Firefox、Chrome和上面的IE8 n中):

函数AddNewTab(e){
$('#list').attr('id','nolist').attr('name','nolist');
$('#form').attr('id','noform').attr('name','noform');
如果(frames.list)frames.list.name='nolist';
如果(frames.form)frames.form.name='noform';
$(document.body).append(“”);
$(document.body).append(“”);
frames.list=$('#list')[0].contentWindow;
frames.form=$('#form')[0].contentWindow;
frames.list.name='list';
frames.form.name='form';
返回false;
}
$(#addnew')。单击(AddNewTab);
此处的工作代码:


((PS:tchh!!我发誓我已经试过了,但是以前没能成功。不管怎样,我想我试过的时候是错的。谢谢大家!!)

嗯,应该可以。。。当您将另一个
iframe
更改为具有
name=frame
时,您确定要先去掉前一个名称吗?你能在这里或小提琴上张贴一些代码吗?是的。我实际上在这里使用Knockout.js。所以它一定会处理好的。过一会儿我会发布一个示例代码,这样您就可以看到我在说什么了。谢谢给iframe指定一个与name attributeal相同的id。因此,我之前认为,该删除可能是原因,但现在我确定不是,因为如果整个(iframe)元素应该在出现“可观察到的”更改时再次刷新/创建,那么它会弄乱我在iframe中的内容,但事实并非如此。所以无论如何示例代码正在进行中。需要澄清的是,您的父级
iframe
是一个链接和
目标
链接指向
表单的链接。您可以添加更多解释吗?为什么使用
live
?你知道这是不赞成的,对吗?(并在jQuery1.9中删除)啊,我知道我可以在DOM中操作target=form的“a”标记,但由于我的应用程序的复杂性,这对我来说是不可行的。但我仍然会+1您的答案,因为它确实是一个替代方案(但不幸的是,它不是我可以大规模实现的方案)。
$("a[target=form]").click( function(){
    $("#form").last().attr("src", $("a[target=form]").attr("href"));
    $("#form").reload();
    return false;
});
    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);