保存子窗口改为保存父窗口(Javascript)

时间:2009-05-24 23:49:49

标签: javascript internet-explorer file save window.open

我有一些Javascript代码可以创建一个“保存友好”版本的网页。

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

“htmlPage”是页面的基本html,其中包含所有javascript引用,不同的标题图像引用集等。

一切都在弹出窗口中完美显示,没有运行javascript。 当我点击“File-> Save As”时,保存的文件是父窗口及其所有javascript,并且没有子窗口的痕迹。有谁知道如何解决这个问题?我只想保存子窗口。

谢谢, -Kraryal

4 个答案:

答案 0 :(得分:5)

我有类似的情况(但不愿意完全放弃)。我正在使用Javascript构建一个保存友好版本的网页,我希望用户下载为文本文件(在我的例子中以逗号分隔的值)。我认为data: URI可以在这里提供帮助。

//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

在Firefox中,这甚至不会弹出一个窗口,只是询问用户是否要保存文件,并将其保存为.part文件。不完全理想,但至少它保存文件而不会弹出不必要的窗口。

或者,我们可以使用text / plain MIME类型:

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

在Firefox中,这会弹出一个新窗口,但是它默认保存为ASCII文本,没有任何父窗口或任何换行。这可能是我将要使用的。

看起来这在IE中不起作用。 IE 8是唯一支持data: URI的版本,它可以使用series of restrictions。对于IE,您可以查看execCommand

感谢此tek-tip threadWikipedia article on the data URI scheme

答案 1 :(得分:2)

当您保存页面时,它将保存原始网址内容(例如,就像您下载了新的副本一样)

如果你想要一个“清理”版本,你需要在服务器上生成该版本,并打开带有该URL作为第一个参数的弹出窗口。

答案 2 :(得分:1)

仅适用于Windows / IE版本,请参阅此处:http://p2p.wrox.com/javascript-how/3193-how-do-you-save-html-page-your-local-hd.html

我知道,非常糟糕,但以防万一这样的内容网就像IE一样......

答案 3 :(得分:0)

唉,似乎我没有足够的声誉为我的问题添加评论,所以我会在这里添加。

这个javascript是为Internet Explorer和Safari部署的。托管应用程序并不总是可以访问本地文件系统。

用户可以标记他们正在使用的页面,然后将其保存以供以后打印或通过电子邮件发送。我们告诉他们将其保存为单个文件存档,因此它实际上可以是邮件。保存对话框可以执行此操作,用户可以将文件放在他们有权访问的位置,这就是我们使用它的原因。

似乎简单的方法是将新的html从javascript写入本地目录,但我们不能总是这样做。还有其他想法吗?感谢您的帮助。