2013-12-13 54 views
3

我的問題的簡短版本是「我在Internet Explorer 8中遇到錯誤 - 如何更改我的代碼以完成我的任務而不會出現該錯誤?」「這個網頁無法保存」錯誤在Internet Explorer 8中

長版本:我有一個網站,其中一些動態生成的頁面在頂部有一個「保存此頁面」鏈接。點擊鏈接將使用javascript的window.open()在較小的彈出窗口中啓動頁面內容的簡單版本(剝去頁眉和頁腳等)。彈出的頁面菜單欄= 1,以便用戶可以使用文件>另存爲...並保存頁面。 (這是一個相當笨拙的方式來實現保存,但我找不到任何更好的解決方案,具有足夠寬的瀏覽器兼容性。)

這適用於我測試過的每個版本的Chrome或Firefox,並且在IE9中, IE10,並且或者在兼容模式下這些瀏覽器7或8,但用戶究竟是誰擁有IE8的看到這種現象:

  1. 在正常的,漂亮的風格的網頁,點擊「保存此頁」鏈接
  2. 在裸機彈出框中,轉到文件>另存爲...
  3. 在保存對話框中,選擇一個位置並單擊保存
  4. 觀察保存進度條到達50%以上的地方,然後消失,以錯誤信息取代,其標題爲「錯誤保存網頁」,其全文爲「此網頁無法保存。 「

保存爲「網頁,完整」或「網頁存檔,單個文件」時會發生此情況。 在使用「網頁,僅HTML」時會保存,但我不希望我們的用戶會熟悉更改該選項。

我已經谷歌搜索,並看到了一些建議的原因,爲什麼一個給定的頁面將無法保存在IE8中。沒有適用於這種情況。

  • 一個元素缺少其href屬性 - 我簡化頁面沒有HREF元素。
  • 一個包含的跨域CSS文件被阻止 - 我的簡化頁面具有淺色內聯樣式,但沒有CSS文件。
  • 有一些JavaScript代碼IE不喜歡 - 我的簡化頁面沒有JavaScript。
  • 該頁面的標題太長 - 我的標題小於40個字符。
  • 該頁面是在Excel中創建的 - 它不是在Excel中創建的,或者其他任何可能會添加專有或異常標記的東西。

我們的網站是由美國各地的客戶使用的,所以我對瀏覽器版本,計算機設置等沒有太多的控制權。在我的代碼中是否存在會導致此問題的東西,這可以通過修復我的代碼來解決,而不需要從用戶的角度找出解決方法?

修改增加:對不起,我應該已經意識到一些建議的答案會涉及到PHP,這是一個C#/ ASP.NET網站。)

編輯2:正在保存的頁面是動態生成的,所以不能通過wget等任何創造性的方式直接從服務器請求。現在,一些AJAX魔術恰好產生了一串HTML特別是一個表,每一行對應於特定產品列表上的一個產品,這些產品可能已經被用戶過濾了)然後用window.open和document.write啓動一個彈出窗口,用來填充彈出窗口的頭部內容+生成的表格+標準的HTML標籤,如打開/關閉頭部和主體,這個document.write'd彈出窗口就是需要保存的東西。我在document.write調用中創建的各種字符串都是由可打印的字符組成的幾個小例外:

  • \ n(這是隻添加到源很好地格式化爲這裏的 人)
  • 任何非打印字符,可能是個別產品的標題/價格/ SKU的,從數據庫中抽取(我'不知道如何檢查,但這大概不是在許多不同的產品標題中,我無法找到在IE8中正確打印的單個列表)

除非document.write本身正在做某件事狡猾,我想不出書面內容可能成爲問題的一種方式。不要說沒有辦法,我想不出來。)

從這些麻煩的網頁之一的完整源代碼(現在有更多開放的HTML標記)跟隨...文件>另存爲失敗此時我在IE8中測試。

<!DOCTYPE html><html> 
<head> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
<title> 
       Board &amp; Volunteer Product List 
      </title> 
</head> 
<body> 
<p style='font-size: small;'>This page was generated from http://localhost/Training-And-Events/Board-And-Volunteer-Training/Board---Volunteer-Product-List/ on 12-13-2013.</p> 
<h2> 
       Board &amp; Volunteer Product List 
      </h2> 
<p style='font-size: small;'>Filtered by: Equipment. </p> 

<table style="width: 100%; border: 0; padding: 0;"> 

<tr> 
    <td style='width: 80%;'><b><u>Title</u></b></td> 
    <td style='width: 10%;'><b><u>SKU</u></b></td> 
    <td style='width: 0%;'></td> 
    <td style='width: 10%;'><b><u><span style='text-align: right;'>Price</span></u></b></td> 
</tr> 
<tr><td colspan=4 style="border-bottom: 1px solid #dddddd; line-height: 3px;">&nbsp;</td></tr> 
<tr> 
    <td style='width: 80%;'>Passageways</td> 
    <td style='width: 10%;'></td> 
    <td style='width: 0%;'></td> 
    <td style='width: 10%;'></td> 
</tr> 
</table> 
</body> 
</html> 
+0

不幸的是,我不知道你的問題的答案,但也許下面是有趣的你。如果您有可能在服務器上安裝軟件,請嘗試https://code.google.com/p/wkhtmltopdf,以便爲用戶提供您的網頁的PDF版本。 –

+2

我注意到兩件事:你錯過了開頭''標籤,我沒有在你的標記中看到一個'保存這個頁面'的鏈接,也沒有任何應該這樣做的JavaScript,這是否正確? – rene

+0

究竟爲什麼它是互聯網瀏覽器 –

回答

0

你應該做的應該是創建一個php輸出腳本。當用戶點擊你的「保存此頁面」鏈接時,它會自動吐出一個由用戶保存的pdf或html文件。通過這種方式,所有客戶必須做的是保存點擊該鏈接的頁面。所有的工作都將在服務器端完成,所以它不會依賴於瀏覽器。

http://www.mpdf1.com/mpdf/

+0

我忽略了指定涉及比HTML/js多得多的解決方案需要C#/ ASP.NET,而不是PHP。對於那個很抱歉。我原來的帖子現在已經被編輯了。 – jrowland

+0

對不起,兄弟那高於我的薪酬等級。這是因爲我拒絕使用微軟產品。純粹的原則。 – DcHerrera

0

像劉若英指出的那樣,它不是合法的HTML,但它不是錯誤的原因。

起初,我測試了它與最新的Win7 & IE8,沒有錯誤。然後我啓動了舊的WinXP & IE8。它也可以工作。我做了究竟:

  1. 複製&粘貼樣品orginal.html
  2. 打開它在IE8。
  3. 文件 - >另存爲(沒有錯誤)
  4. 打開保存的文件(沒有錯誤)

你能重現錯誤呀?或者我錯過了什麼?

我認爲標記不會導致錯誤。它必須是其他的東西:也許實際文件包含一些打破它的非打印字符。或者它與彈出窗口有關。

+0

如果我保存頁面HTML,請在IE8中打開保存的文件,然後重新保存,我看不到錯誤。支持標記與我的問題無關的理論。這並不令我感到意外,但指出一個明顯的解決方案也沒有多大意義。 – jrowland

+0

@jrowland經過測試,我想告訴你atm你沒有提供足夠的信息來重現錯誤。不幸的是,SO不讓我評論,只是「回答」。你可以通過使用wget/telnet(或其他)保存頁面的原始副本,並且它仍然會導致錯誤? –

+0

我不認爲我可以這樣做,因爲該頁面是JavaScript window.open + document.write的結果。我在原始帖子中添加了一個編輯#2,其中包含或不包含更多有用的詳細信息。 – jrowland