Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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 在文档之间移动整个html页面上下文_Javascript_Html_Dom_Iframe - Fatal编程技术网

Javascript 在文档之间移动整个html页面上下文

Javascript 在文档之间移动整个html页面上下文,javascript,html,dom,iframe,Javascript,Html,Dom,Iframe,有没有一种方法可以将整个dom javascript状态、文档状态以及从一个文档到另一个文档的所有内容移动 我的第一个想法是使用iframe,但显然,如果不重新加载iframe,就无法在dom中移动iframe 我的第二个想法是对window对象进行深度复制,但显然这很耗时,有很多陷阱,并且不能处理dom状态 有可能这样做吗?我基本上希望对一个文档进行沙箱处理,然后将其状态移动/复制到另一个文档 仅供参考,这是一个节点webkit应用程序。我想将dom从一个窗口复制到另一个窗口 例如,我可以做:

有没有一种方法可以将整个dom javascript状态、文档状态以及从一个文档到另一个文档的所有内容移动

我的第一个想法是使用iframe,但显然,如果不重新加载iframe,就无法在dom中移动iframe

我的第二个想法是对window对象进行深度复制,但显然这很耗时,有很多陷阱,并且不能处理dom状态

有可能这样做吗?我基本上希望对一个文档进行沙箱处理,然后将其状态移动/复制到另一个文档

仅供参考,这是一个节点webkit应用程序。我想将dom从一个窗口复制到另一个窗口

例如,我可以做:

window2.document=window1.document; window2.document.body.innerHtml window1.document.body//我不知道语法

不,HTTP是一种无状态协议,因此在HTML文档之间移动状态没有多大意义


我建议使用单页应用程序。让单个HTML文档处理状态。然后发出AJAX请求,根据需要部分更新数据。

您可以将整个页面作为json存储在cookie中。如果页面太大,可能需要使用多个cookie。然后在下一个文档中加载页面nad您需要的任何值。这里有一些我以前使用过的javascript。它将循环遍历表单中的每个元素,并将其保存为json格式的cookie,格式为controlId:controlValue

    function SaveFormInCookies(formId) {
    var saveToCookies = {};
    $('#' + formId + ' :input').each(function () {
        if ($(this).is(':visible')) { // Only save visible form items
            if (($(this).val().length > 0) && ($(this).is(':input[type="submit"]') == false)) {
                saveToCookies[$(this).attr('id')] = $(this).attr('value');
            }
        }
    });
    var elementsToSave = JSON.stringify(saveToCookies); // Convert object array of controls and values into a json string
    var splitForm = elementsToSave.match(/.{1,3000}/g); // Make sure each cookie only hold up 3000 characters. Leave plenty of overhead as cookie size varies depending on browser
    for (var i = 0; i < splitForm.length; i++) {
        setCookie("MGIncForm" + i, splitForm[i], 1); // Save as many cookies as needed
    }
}

/*
This function is resposible for actually saving the cookies
*/
function setCookie(cookieName, value, expireHours) {
    var exdate = new Date().addHours(expireHours);
    var cookieValue = escape(value) + ((expireHours == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = cookieName + "=" + cookieValue;
}

在下一页上,检查cookie是否存在并反序列化它

你能看看我的编辑吗?这是最后4行。我曾考虑过将整个状态存储在localStorage或类似的东西中,但我更希望能够复制所有内容,这样我就不必担心表单数据被部分填充之类的事情;我希望当我复制/移动文档时,它仍然会有滚动位置等内容。这就是为什么移动iframe是理想的,因为它是沙盒的,所有状态javascript和dom也是自包含的。可悲的是,我不认为序列化整个window对象对我正在尝试的工作有用。感谢您的回答。您可以将滚动位置和其他任何内容存储为变量,并将其移动到Cookie中的下一页?我的意思是,你必须确切地知道你设置了什么,想要保留什么,然后在另一页上再次设置值以匹配。对。我希望有一个更优雅的解决方案。我会试试看。刚刚找到另一篇关于同样的帖子——可能也会有帮助。有人链接的Lawnchair插件看起来很有前途!我我想你刚刚回到了这个问题:P