Javascript 在Chrome中从动态表单发布到动态iframe将打开一个新窗口

Javascript 在Chrome中从动态表单发布到动态iframe将打开一个新窗口,javascript,forms,google-chrome,iframe,dynamic,Javascript,Forms,Google Chrome,Iframe,Dynamic,我正在做一些测试来创建一个允许跨域通信的JavaScript小部件 我有一个脚本标签,可以放在任何将动态表单和iframe注入页面的站点上 我的想法是将动态表单的target属性设置为动态iframe的名称,以便可以将数据从第三方站点发布到我的后端进行处理 把它放在一起,在Firefox中效果很好,但在Chrome中,提交会强制打开一个新窗口 如果我使用非动态iframe,它会突然起作用。然而,如果我想让我的小部件易于第三方集成到他们的站点中,这就不是很优雅了 有人知道如何让它工作吗?我不认为这

我正在做一些测试来创建一个允许跨域通信的JavaScript小部件

我有一个脚本标签,可以放在任何将动态表单和iframe注入页面的站点上

我的想法是将动态表单的target属性设置为动态iframe的名称,以便可以将数据从第三方站点发布到我的后端进行处理

把它放在一起,在Firefox中效果很好,但在Chrome中,提交会强制打开一个新窗口

如果我使用非动态iframe,它会突然起作用。然而,如果我想让我的小部件易于第三方集成到他们的站点中,这就不是很优雅了

有人知道如何让它工作吗?我不认为这是我的代码,因为正如我所说,当iframe是静态的时,代码就可以工作。我已经验证了动态iframe的名称和ID是否按预期设置

干杯

我添加了一个JSFiddle来演示这种行为。请注意,JavaScript实际上将被放置在HTML中div id小部件下面的脚本标记中


我偶然发现了解决办法

iframe name属性可能需要在附加到DOM之前进行设置。我已使用以下内容更新了我的JSFIDLE():

append: function(tag, attrs) {
        var el = document.createElement(tag);
        if (tag === 'iframe' && attrs && attrs.name) {
            try {
                el.name = attrs.name; // This seems to fix it!
                el = document.createElement('<iframe name="' + attrs.name + '">');
            } catch (e) {}
        }

        _last(_ref).appendChild(el);
        _ref.push(el);
        if (attrs && typeof attrs === 'object') {
            _each(attrs, functions.attr);
        }
        return functions;
    },
append:function(标记、属性){
var el=document.createElement(标记);
如果(标记=='iframe'&&attrs&&attrs.name){
试一试{
el.name=attrs.name;//这似乎可以解决它!
el=document.createElement(“”);
}捕获(e){}
}
_最后(_ref).appendChild(el);
_参考推力(el);
if(attrs&&typeof attrs==='object'){
_每个(attrs,functions.attr);
}
返回函数;
},

动态表单是否可以在动态iframe中并发布到自身?动态iframe将使用CSS隐藏,只是后端服务的网关。否则,我将在我的站点上创建一个静态表单,并使iframe完全可见。
append: function(tag, attrs) {
        var el = document.createElement(tag);
        if (tag === 'iframe' && attrs && attrs.name) {
            try {
                el.name = attrs.name; // This seems to fix it!
                el = document.createElement('<iframe name="' + attrs.name + '">');
            } catch (e) {}
        }

        _last(_ref).appendChild(el);
        _ref.push(el);
        if (attrs && typeof attrs === 'object') {
            _each(attrs, functions.attr);
        }
        return functions;
    },