2013-08-15 3 views
4

Ce que j'essaie de faire est d'envelopper un site Web complet dans un iframe sans casser n'importe quel style ou javascript.Déplacer le document entier dans un iframe

Voici ce que j'ai essayé:

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')); 

Voir http://jsfiddle.net/gUJWU/3/

Cela fonctionne bien dans Chrome.

Firefox semble avaler toute la page. Internet Explorer (voir http://jsfiddle.net/gUJWU/3/show/) crée le iframe, n'y déplace aucun objet.

Cette approche a-t-elle une chance de fonctionner avec plusieurs navigateurs?

+0

Pourquoi est-ce nécessaire/utile? Peut-être y a-t-il une meilleure façon de réaliser ce que vous voulez. – MightyPork

+0

J'essaie de créer une sorte de boorkmarklet qui peut être exécuté sur n'importe quel site pour prendre un contrôle facile sur la position et la taille du site – sroes

+0

Que diriez-vous juste de modifier CSS du ''? Devrait faire l'affaire aussi, dans une certaine mesure. – MightyPork

Répondre

6

Dans IE, le document n'est pas inférée et créé automatiquement, vous devez créer réellement avant d'y accéder:

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/

Cela semble fonctionner dans IE8/9, et Firefox et Chrome récents, au moins.

La façon dont j'ai compris le problème est par console.log ging $frame.contents().find('head').length, qui était 0 dans IE.

+1

Awesomeness! Cela a également fait l'affaire pour Firefox. Merci! – sroes

Questions connexes