谷歌浏览器无法打印我的JavaScript和AJAX生成的内容

3
我是一名Web应用程序的开发人员。
Chrome可以正确显示我的JavaScript和AJAX生成的网页,但是当我尝试使用其本地打印功能打印它们时,我得到了一个空白页面。
其他浏览器上的打印工作正常。
我已经尝试使用Chrome打印服务器端生成的页面,并且它们可以正常打印。
我的网页应用程序中的网页有什么问题?我认为问题在于这些页面是由JavaScript和AJAX动态生成的。我之所以这样说,是因为我刚刚发现,即使使用Chrome保存这些页面也无法正确显示(所有动态HTML都不显示)。
我使用的是Google Chrome 13.0.782.112。如何调试和解决此问题?有没有解决方法?有人能够在Google Chrome中打印动态生成的内容吗?
这个问题让我疯狂!
附言:我的一些用户报告在Safari上出现了同样的问题:-(
更新:升级到Chrome 14.0.835.202,但问题仍然存在...

你能否请贴出一些代码让我们查看? - jhchnc
我刚刚做了一个测试fiddle,它对我来说工作正常。你是在使用不同的代码或者其他什么呢? - Some Guy
3个回答

2

我曾经遇到过完全相同的问题,尽管不是在Chrome上(虽然我没有实际测试过Chrome)。在某些浏览器上(我无法立即记起哪些 - 但可能是IE或FF),通过JavaScript添加到DOM中的任何内容都不会被打印。实际打印的是最初向浏览器提供的原始文档。

我成功地使用了以下JavaScript函数解决了这个问题:

function docw()
{
    var doct = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"  
    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
    document.write(doct + document.getElementsByTagName('html')[0].innerHTML);
}

当JavaScript页面操作完成时,会调用此函数。它实际上读取整个DOM,然后使用document.write将整个文档重新写入自身。这现在使得我的特定项目在IE和FireFox上都可以打印,尽管我相当确定其中一个一开始就可以工作,而另一个则不行(无法记住从内存中选择哪一个,并且目前无法测试该项目)。我不知道这是否能解决Chrome中的问题,但值得一试。 编辑非常抱歉,但我是个完全的新手。我刚刚重新阅读了我的旧评论,发现这个解决方案与打印毫无关系;它实际上是为了修复仅保存原始服务文档的问题。然而,话虽如此,我仍然想知道是否值得一试。

你是最棒的,特雷弗! 太棒了!我有多开心啊! 请大家投票支持这个答案:我的问题非常模糊,我也没有展示任何代码,但他的片段完全正确! - Dan
1
哈,偶尔冒险尝试一下也是值得的!很高兴它有所帮助! - Trevor

2

这对我解决了一个相关问题 - 如何查看/保存动态生成的HTML本身。 我想出了以下书签。

javascript:(function(){document.write('<pre>'+(document.getElementsByTagName('html')[0].innerHTML.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'))+'</pre>')})()

我运行这段代码并选择全部复制,然后(在Linux中)使用“xclip -out”将大量剪贴板数据导向文件。


2
特雷弗的回答对我非常有效 - 使用jquery,我只需执行以下操作
$("html").html $("html").html()

完美地工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接