我要做的是在iframe
中包装一个完整的网站,而不会破坏任何样式或javascript。
这是我尝试过的:
var $frame = $('<iframe />').css({
position: 'fixed',
top: 0,
left: 0,
width: '100%',
height: '100%'
}).appendTo('body');
$('head').children().appendTo($frame.contents().find('head'));
$('body').children().not($frame).appendTo($frame.contents().find('body'));
请参阅http://jsfiddle.net/gUJWU/3/
这在Chrome中运行良好。
Firefox似乎吞下了整个页面。
Internet Explorer(请参阅http://jsfiddle.net/gUJWU/3/show/)确实会创建iframe
,但不会移动任何内容。
这种方法是否有可能跨浏览器工作?
答案 0 :(得分:6)
在IE中,文档不会被推断并自动创建,因此您需要在访问它之前实际创建它:
var $frame = $('<iframe />').css({
position: 'fixed',
top: 0,
left: 0,
width: '100%',
height: '100%'
}).appendTo('body');
var doc = $frame[0].contentDocument || $frame[0].contentWindow.document;
doc.open();
doc.write("<!DOCTYPE html><html><head><title></title></head><body></body></html>");
doc.close();
$('head').children().appendTo($frame.contents().find('head'));
$('body').children().not($frame).appendTo($frame.contents().find('body'));
DEMO: http://jsfiddle.net/XAMTc/show/
这似乎适用于IE8 / 9,以及最近的Firefox和Chrome。
我找出问题的方法是console.log
ging $frame.contents().find('head').length
,在IE中为0。