【发布时间】:2014-01-01 09:59:38
【问题描述】:
我的问题的简短版本是“我在 Internet Explorer 8 中遇到错误 - 我如何更改我的代码以完成我的任务而不会遇到该错误?”
长版本:我有一个网站,其中一些动态生成的页面在顶部有一个“保存此页面”链接。单击该链接将使用 javascript 的 window.open() 在较小的弹出窗口中启动页面内容的基本版本(去除页眉和页脚等)。弹出的页面有 menubar=1,因此用户可以使用 File > Save As... 并保存页面。 (这是一种非常笨拙的实现保存方式,但我找不到任何更好的解决方案,具有足够广泛的浏览器兼容性。)
这在我测试过的每个版本的 Chrome 或 Firefox 以及 IE9、IE10 以及兼容模式为 7 或 8 的任何一个浏览器中都可以正常工作。但实际拥有 IE8 的用户会看到这种行为:
- 在普通、漂亮的网页上,点击“保存此页面”链接
- 在基本弹出窗口中,转到文件 > 另存为...
- 在“保存”对话框中,选择一个位置并单击“保存”
- 观察保存进度条上升到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 & 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 & 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;"> </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 版本。
-
我注意到两件事:您缺少开头的
<html>标记,并且我在您的标记中没有看到“保存此页面”的链接,也没有任何应该执行此操作的 javascript,对吗? -
究竟为什么它是 Internet Explorer
-
彼得——很有趣。我以前没有见过 wkhtmltopdf,但它看起来非常接近我最初希望做的事情。我将不得不玩弄它。 rene -- 1. 是的,现在固定;确实,这个想法是用户必须使用浏览器的文件 > 另存为来保存。 Anshuman -- 我不确定我是否理解你的评论......
标签: c# javascript html asp.net internet-explorer