Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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 jQuery:如何使用.load用另一个HTML替换整个DOM_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript jQuery:如何使用.load用另一个HTML替换整个DOM

Javascript jQuery:如何使用.load用另一个HTML替换整个DOM,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,我有个问题。 我们正在做一个俘虏入口 访问任何网站,例如www.php.net 然后在Chrome的控制台中,使用以下命令: $("html").load( "https://www.ccc.co.il/Suspend.aspx" ); 您会注意到,DOM已被替换,但不是它应有的样子: 加载网页的包装器元素(例如标题、正文)丢失 这当然会导致页面出现问题 如何替换整个初始DOM? 请不要建议我使用链接或普通重定向。 这些是限制,我需要替换整个DOM树 谢谢 这基本上是浏览器的一个特性 以下是j

我有个问题。 我们正在做一个俘虏入口

访问任何网站,例如www.php.net 然后在Chrome的控制台中,使用以下命令:

$("html").load( "https://www.ccc.co.il/Suspend.aspx" );
您会注意到,DOM已被替换,但不是它应有的样子: 加载网页的包装器元素(例如标题、正文)丢失

这当然会导致页面出现问题

如何替换整个初始DOM? 请不要建议我使用链接或普通重定向。 这些是限制,我需要替换整个DOM树


谢谢

这基本上是浏览器的一个特性

以下是jQuery文档中的一个片段:

jQuery使用浏览器的.innerHTML属性来解析检索到的文档并将其插入当前文档。在此过程中,浏览器通常会过滤文档中的元素,如
元素。因此,.load()检索到的元素可能与浏览器直接检索到的文档不完全相同

虽然我不推荐你的建议,但我会尝试回答你的问题:

使用服务器端语言(例如PHP),以解析的json格式返回文档:

{
    "head": [head string],
    "body": [body string]
}
然后您的JavaScript可以单独替换每个元素。
您需要从
.load()
切换到更具可配置性的模式,例如
.ajax()
在这种情况下,我认为您必须使用iframe,因为我不认为您可以用另一个DOM替换整个DOM

$('body').html("<iframe height=100% width=100% frameBorder=0 src='https://www.ccc.co.il/Suspend.aspx'></iframe>");
$('body').html(“”);

我在这里使用一个常规的AJAX函数,因为它不应该删除任何内容


抱歉,这4个
html
s连成一行:P

One通常替换
body
元素的内容。这是一个有趣的问题。。。我不能直接给你答案,但如果你陈述你想要实现的目标,也许我可以建议一种解决方法。如果你写了有效的标记,比如在页面的头部没有noscript标记或锚定,会发生什么?@zozo:好吧,防火墙在captive portal上提供静态、简短的HTML代码。如果请求的URL/IP不在允许的规则中,则会提供该HTML。然后在HTML中,我有.load调用,从公司网站注入一个完整的DOM页面,而不重定向客户端,这将改变浏览器中的URL。我知道其他ISP也能做到这一点,所以我也希望这样做——保留客户想要的URL,以防在修复ISP问题的原因时,有许多参数他不想丢失。是的,这是无效的,你有一个noscript标签和一个锚定在头部部分,但删除它们可能不会有多大帮助,因为用ajax替换整个DOM通常不是一个好办法,而且会有问题,正如下面的答案中所述。hmmm,好的想法是使用。load,对加载的网页进行最小的更改,或者使用jquery/javascript进行进一步的处理。谢谢你的建议,我要么这样做,要么使用iframe(无论什么更快),如果周日其他人回来时没有更好的答案,我们可以再次更改防火墙和服务器上的代码。谢谢你!它运行良好,除了HTTPS网站。。如果你试图对HTTPS网站这样做,浏览器会发出各种警告(更不用说chrome对谷歌网站的内置“保护”)。事实上,在替换head部分后执行任何脚本,请停止:),我必须在替换的head中编写另一个脚本,为了确定浏览器停止执行javascript的位置,感谢@scimonester的想法,我现在只手动尝试了一下(即使在本页这里)-如果我在控制台中输入此命令,我仍然会出现来自Sitehood脚本的错误“Uncaught TypeError:Cannot call method'appendChild'of undefined”,正在尝试选择新DOM中不存在的“head”元素。。。如果它不能从控制台工作,我怀疑它在防火墙中也不能工作。我怀疑在这种情况下,在JSFIDLE框架中测试不是可靠的测试方法:)
$.get("https://www.ccc.co.il/Suspend.aspx", function(html){$("html").html(html)});