3

我将在编辑中发布我的代码...我无法提交包含代码的问题。

我维护一个聊天程序,该程序在我被分配到它时已经构建。我的工作一开始只是为它设置主题以使其与我们网站的其他部分相匹配。现在管理层要求我提供额外的功能。一个这样的功能是客户可以选择将聊天日志的副本保存到他们的计算机上。

整个聊天对话存储在一个名为 chatHistoryHTML 的 javascript 变量中,并且一个循环通过向 chatHistoryHTML 变量添加新的文本行并将其显示在“历史”div 中,使页面上的聊天会话每 5 秒更新一次。看。

现在,我了解如何打开一个新窗口以显示聊天历史记录,而不显示徽标、背景或文本输入框。但是,我无法使用我的方法将 PHP 命令传递到该新页面。

理想情况下,我想要一个解决方案,允许用户单击一个按钮并显示一个保存对话框,该对话框只保存聊天对话,而不打开新窗口。我现在正在打开一个新窗口,因为我试图避免保存页面上的所有其他内容。

我愿意接受建议。我懂一点 Javascript 和 PHP,但对 AJAX 一无所知

4

3 回答 3

10

所有在客户端,你可以尝试:

var content, MIME_TYPE, theBlob, a;

// What will actually be put into the file
content = "THE FILE CONTENT";

// The file type
MIME_TYPE = "text/plain";
// Basically, the file itself
theBlob = new Blob([content], {type: MIME_TYPE});

// The anchor element
a = document.createElement("a");
// Set the name of the file that will be downloaded
a.download = "Chat_History.txt";
// Set the contents to be downloaded
a.href = window.URL.createObjectURL(theBlob);
// Anchor's text
a.textContent = "Download";

// What's displayed as the URL of the anchor (when hovered, copied, etc.)
a.dataset.downloadurl = [MIME_TYPE, a.download, a.href].join(":");

// Add the anchor to the page
document.body.appendChild(a);

演示:http: //jsfiddle.net/oqskpydg/

这确实使用了并非在所有浏览器中都可用的功能,但它是一个可靠的选择。


参考:

于 2013-04-24T17:08:34.863 回答
1

您可以使用比 Ian 的解决方案更广泛支持的Data URI 方案,并且它不依赖于服务器端:

<a href="data:application/octet-stream;base64,PHVsPjxsaT50aGlzPGxpPmlzPGxpPmE8bGk+Y2hhdCBsb2c8L3VsPgo=">Download chat log</a>

您可以使用window.btoaandwindow.atob进行 base64 处理。

演示。显示框架源以查看源而不是 PasteHTML 的包装。

于 2013-04-24T17:20:40.087 回答
-1

主要选项:

  • 将聊天日志转储到新窗口并调用print()(隔离日志并使其可打印,否则用户也会抓取页面上的所有 UI 元素),或者
  • 使用 AJAX 并将其发送到服务器,然后服务器将其中继到电子邮件回给用户。

JavaScript 无法将文件本地保存到客户端。但是,您有一个次要选择:

  • 将其迁移到 Silverlight/Flash 以具有附加功能/特性。
于 2013-04-24T16:51:33.510 回答