【问题标题】:"This webpage could not be saved" error in Internet Explorer 8Internet Explorer 8 中的“无法保存此网页”错误
【发布时间】:2014-01-01 09:59:38
【问题描述】:

我的问题的简短版本是“我在 Internet Explorer 8 中遇到错误 - 我如何更改我的代码以完成我的任务而不会遇到该错误?”

长版本:我有一个网站,其中一些动态生成的页面在顶部有一个“保存此页面”链接。单击该链接将使用 javascript 的 window.open() 在较小的弹出窗口中启动页面内容的基本版本(去除页眉和页脚等)。弹出的页面有 menubar=1,因此用户可以使用 File > Save As... 并保存页面。 (这是一种非常笨拙的实现保存方式,但我找不到任何更好的解决方案,具有足够广泛的浏览器兼容性。)

这在我测试过的每个版本的 Chrome 或 Firefox 以及 IE9、IE10 以及兼容模式为 7 或 8 的任何一个浏览器中都可以正常工作。但实际拥有 IE8 的用户会看到这种行为:

  1. 在普通、漂亮的网页上,点击“保存此页面”链接
  2. 在基本弹出窗口中,转到文件 > 另存为...
  3. 在“保存”对话框中,选择一个位置并单击“保存”
  4. 观察保存进度条上升到50%以上,然后消失,取而代之的是一条错误信息,标题为“错误保存网页”,全文为“无法保存此网页。 "

当另存为“网页,完整”或“Web 存档,单个文件”时会发生这种情况。使用“网页,仅 HTML”时页面确实保存,但我不希望我们的用户熟悉更改该选项。

我在 Google 上四处搜索,并看到了一些建议的原因,说明给定页面无法在 IE8 中保存。本案均不适用。

  • a 元素缺少其 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 弹出窗口是需要保存的。我构建的各种字符串都粘贴在 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>

【问题讨论】:

  • 不幸的是,我不知道您的问题的答案,但也许以下内容对您来说很有趣。如果您有可能在您的服务器上安装软件,请尝试code.google.com/p/wkhtmltopdf,这样您就可以为用户提供您页面的 PDF 版本。
  • 我注意到两件事:您缺少开头的 &lt;html&gt; 标记,并且我在您的标记中没有看到“保存此页面”的链接,也没有任何应该执行此操作的 javascript,对吗?
  • 究竟为什么它是 Internet Explorer
  • 彼得——很有趣。我以前没有见过 wkhtmltopdf,但它看起来非常接近我最初希望做的事情。我将不得不玩弄它。 rene -- 1. 是的,现在固定;确实,这个想法是用户必须使用浏览器的文件 > 另存为来保存。 Anshuman -- 我不确定我是否理解你的评论......

标签: c# javascript html asp.net internet-explorer


【解决方案1】:

就像 rene 指出的那样,它不是有效的 HTML,但它不是错误的原因。

一开始,我用最新的Win7 & IE8 测试过,没有错误。然后我启动了旧的 WinXP 和 IE8。它也有效。我到底做了什么:

  1. 将您的示例复制并粘贴到 orginal.html
  2. 在 IE8 中打开。
  3. 文件->另存为(无错误)
  4. 打开保存的文件(无错误)

你能以这种方式重现错误吗?还是我错过了什么?

我认为标记不会导致错误。它必须是别的东西:也许实际文件包含一些破坏它的非打印字符。或者它与弹出窗口有关。

【讨论】:

  • 如果我保存页面 HTML,在 IE8 中打开保存的文件,然后重新保存,我看不到错误。支持标记与我的问题无关的理论。这并不让我感到惊讶,但指出一个明显的解决方案也无济于事。
  • @jrowland 经过测试,我想告诉 atm 你没有提供足够的信息来重现错误。不幸的是,SO不允许我发表评论,仅“回答”。您可以使用 wget/telnet(或其他方式)保存页面的原始副本吗?它仍然会导致错误吗?
  • 我不认为我可以这样做,因为该页面是 javascript window.open + document.write 的结果。我在原始帖子中添加了一个编辑#2,其中包含可能更有用的细节。
【解决方案2】:

您可能应该做的是创建一个 php 输出脚本。当该人单击您的“保存此页面”链接时,它将自动吐出一个 pdf 或 html 文件以供用户保存。这样,您的所有客户都必须保存单击该链接的页面。所有工作都将在服务器端完成,因此不会依赖于浏览器。

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

【讨论】:

  • 我忽略了说明涉及 HTML/js 以外的解决方案需要 C#/ASP.NET,而不是 PHP。对于那个很抱歉。我原来的帖子现在已经用那个小细节进行了编辑。
  • 对不起兄弟,这超出了我的工资等级。那是因为我拒绝使用微软的产品。纯属原则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
相关资源
最近更新 更多