2009-05-24 137 views
1

我有一些Javascript代碼可以創建網頁的「保存友好」版本。保存子窗口會保存父窗口(Javascript)

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

「htmlPage」是的頁面與取出來,一組標題圖片引用不同等

一切都完美地顯示在彈出窗口中,所有的JavaScript引用基本HTML沒有JavaScript運行。 當我點擊「文件 - >另存爲」時,保存的文件是父窗口及其所有的javascript,並且沒有任何子窗口的痕跡。有誰知道如何解決這個問題?我只想保存子窗口。

感謝, -Kraryal

回答

2

當您保存網頁時,保存原來的URL內容(例如,就像如果你下載了一個新的副本)

如果你想要一個「潔淨」的版本,你需要在服務器上生成該版本,並打開帶有該URL的彈出窗口作爲第一個參數。

0

唉,看來我的避風港沒有足夠的信譽來爲我的問題添加評論,所以我會在這裏添加。

此javascript部署用於Internet Explorer和Safari。宿主應用程序不總是有權訪問本地文件系統。

用戶可以標記他們正在使用的頁面,然後保存它以便以後打印或發送電子郵件。我們告訴他們將其保存爲單個文件存檔,以便它實際上可以是郵件。保存對話框可以做到這一點,用戶可以將文件放在他們有權訪問的地方,這就是我們使用它的原因。

看來,簡單的方法是將JavaScript中的新html寫入本地目錄,但我們不能總是這樣做。任何其他想法?感謝你目前的幫助。

+0

fyi - 你應該可以編輯你自己的問題... – garrow 2009-05-25 02:52:35

+0

謝謝你。那天我的瀏覽器正在愚蠢。 – kraryal 2009-06-22 01:08:21

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中,這甚至不彈出一個窗口,只是詢問用戶是否要保存文件,並將其保存爲一個文件。第二部分。不完全理想,但至少它保存文件而不會彈出一個不必要的窗口。

或者,我們可以使用純文本/ 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