2009-05-24 6 views
1

J'ai un peu de code Javascript qui crée une version "facile à sauver" d'une page Web.L'enregistrement d'une fenêtre enfant enregistre la fenêtre parent à la place (Javascript)

child = window.open("","child");
child.document.write(htmlPage);

« htmlPage » est le code html de base de la page avec toutes les références javascript souscrits, un autre ensemble de références images d'en-tête, etc.

Tout affiche parfaitement dans la fenêtre pop-up, avec pas de javascript en cours d'exécution. Lorsque je clique sur "Fichier-> Enregistrer sous", le fichier enregistré est la fenêtre parente, avec tout son javascript, et sans trace de la fenêtre enfant. Est-ce que quelqu'un sait comment résoudre ce problème? Je veux enregistrer uniquement la fenêtre enfant.

Merci, -Kraryal

Répondre

2

Lorsque vous enregistrez la page, il enregistre le contenu de l'URL d'origine (par exemple, comme si vous avez téléchargé une nouvelle copie)

Si vous voulez une version « nettoyée », vous Je vais devoir générer cette version sur le serveur et ouvrir le popup avec cette URL comme premier paramètre.

0

Hélas, il semble havre de paix I Pas assez de réputation pour ajouter des commentaires à ma question, alors je vais ajouter ceci ici.

Ce javascript est déployé pour Internet Explorer et Safari. L'application d'hébergement n'a pas toujours accès au système de fichiers local.

Les utilisateurs peuvent baliser la page avec laquelle ils travaillent, puis l'enregistrer pour l'imprimer ou l'envoyer par courrier électronique plus tard. Nous leur disons de l'enregistrer sous la forme d'une archive à un seul fichier afin qu'il puisse s'agir de courrier. La boîte de dialogue de sauvegarde peut le faire, et l'utilisateur peut placer le fichier dans un endroit où il a accès, c'est pourquoi nous l'avons utilisé.

Il semble que la manière la plus simple serait d'écrire le nouveau code html depuis le javascript vers le répertoire local, mais nous ne pouvons pas toujours le faire. D'autres idées? Merci du coup de main jusqu'à présent.

+0

fyi - vous devriez pouvoir éditer votre propre question ... – garrow

+0

Thanks garrow. Mon navigateur était juste stupide ce jour-là. – kraryal

5

J'avais une situation similaire (mais je n'étais pas prêt à abandonner complètement). Je suis en train de construire une version d'une page Web qui soit facile à sauvegarder en utilisant Javascript que je veux que l'utilisateur télécharge en tant que fichier texte (valeurs séparées par des virgules, dans mon cas). Je pense que data: URIs peuvent aider ici.

//construct the csvOutput in Javascript first 
var popup = window.open("data:application/octet-stream," + encodeURIComponent(csvOutput), "child"); 
//no need to document.write() anything in the child window 

Dans Firefox, cela ne se déclenche pas une fenêtre même, juste demande à l'utilisateur si elles veulent enregistrer le fichier, et il enregistre dans un fichier .part. Pas exactement idéal, mais au moins, il enregistre le fichier sans faire apparaître une fenêtre inutile.

Sinon, nous pouvons utiliser le text/plain type MIME:

//construct the csvOutput in Javascript first 
var popup = window.open("data:text/plain;charset=utf-8," + encodeURIComponent(csvOutput), "child"); 

Dans Firefox, cela ne pop ouvrir une nouvelle fenêtre, mais il est enregistré par défaut sous forme de texte ASCII, sans aucun des cochonneries de la fenêtre parent ou tout retour à la ligne. C'est probablement ce que je vais utiliser.

Il semblerait que cela ne fonctionne pas dans IE.IE 8 est la seule version qui prend en charge data: URI, et il a un series of restrictions sur où il peut être utilisé. Pour IE, vous pouvez regarder execCommand. Grâce à ce tek-tip thread et Wikipedia article on the data URI scheme.

+0

Cela ne fera pas ce que je veux, mais c'est quand même une bonne trouvaille. (Je veux enregistrer un tas d'images et html en tant que fichier d'archive unique.) ExecCommand semble également très utile. – kraryal

Questions connexes