javascript:IFrame SRC作为新窗口?

javascript:IFrame SRC作为新窗口?,javascript,iframe,Javascript,Iframe,我有一个web应用程序,其中有一堆来自其他工具的iFrame。 现在,用户应该可以在新窗口/新选项卡中打开iframe内容,通常我只需添加如下内容: function onButtonClick() { var src = $('#iframe').prop('src'); windows.open(src, "_blank"); } 但his只会打开我的iFrame上下文的新版本,例如,如果用户在iFrame中打开一个页面或单击某个内容,并且javascript在我的iFrame中更改

我有一个web应用程序,其中有一堆来自其他工具的iFrame。 现在,用户应该可以在新窗口/新选项卡中打开iframe内容,通常我只需添加如下内容:

function onButtonClick() { var src =    $('#iframe').prop('src');
windows.open(src, "_blank"); }
但his只会打开我的iFrame上下文的新版本,例如,如果用户在iFrame中打开一个页面或单击某个内容,并且javascript在我的iFrame中更改了某个内容,则用户将失去该值


因此,我可以将iframe内容添加到新的窗口内容中,而不丢失iframe中网站的动态状态吗?

如果不重新加载,您不能在不同窗口之间移动iframe,因为规范规定必须重新评估属性:

将iframe元素插入到具有浏览上下文的文档中时,用户代理必须创建嵌套的浏览上下文,然后“第一次”处理iframe属性

--

(via)


旧答案:

//编辑:由于iframe在移动时重新加载,并且原始src已恢复,因此无法按预期工作

如果将iframe移出当前页面,则非常容易:


示例:

如果iframe内容来自不同的域,则您无法访问当前显示的URL,同一来源策略会阻止这种情况。假设同一来源,您仍然无法做到这一点,而不会丢失网站的动态状态。是的,我知道这一点,但事实上iframe不仅仅与窗口或选项卡相同吗?-如果是,您可以根据需要将firefox窗口移动到firefox选项卡/在firefox进程之间拖放,为什么不对iframe执行相同的操作?Thx感谢您的尝试OK,我浪费了我的时间尝试,因为它无法完成,因为规范说它不能完成(
<button id="example-button">open in new window</button>

<div id="example-container">
    <iframe id="example-iframe" src="https://example.com/">
    </iframe>
</div>
document.getElementById('example-button').addEventListener('click', function (ev) {
    ev.preventDefault();

    var win = open('about:blank');
    var iframe = document.getElementById('example-iframe');

    // the popup might not be immediately available:
    setTimeout(function () {
        var body = win.document.body;

        body.style.padding = 0;
        body.style.margin = 0;
        body.appendChild(iframe);

        iframe.style.position = 'fixed';
        iframe.style.padding = 0;
        iframe.style.margin = 0;
        iframe.style.width = '100%';
        iframe.style.height = '100%';
        iframe.style.border = 0;
    }, 0);

    // move the iframe back if the popup in closed
    win.addEventListener('beforeunload', function () {
        document.getElementById('example-container').appendChild(iframe);

        iframe.style.position = '';
        iframe.style.padding = '';
        iframe.style.margin = '';
        iframe.style.width = '';
        iframe.style.height = '';
        iframe.style.border = '';
    });
});