Php 如何在客户端PC上将Javascript变量另存为文件

Php 如何在客户端PC上将Javascript变量另存为文件,php,javascript,ajax,file-io,Php,Javascript,Ajax,File Io,我将在编辑中发布我的代码。。。我在提交包含代码的问题时遇到问题 我维护一个聊天程序,该程序在我被分配到该程序时就已经构建好了。我的工作一开始只是做主题,让它与我们网站的其他部分相匹配。现在,管理层要求增加一些超出我能力范围的功能。其中一个功能是,客户可以选择将聊天日志的副本保存到他们的计算机上 整个聊天会话存储在一个名为chatHistoryHTML的javascript变量中,一个循环通过向chatHistoryHTML变量添加新的文本行并将其显示在“history”div中以供客户查看,从而

我将在编辑中发布我的代码。。。我在提交包含代码的问题时遇到问题

我维护一个聊天程序,该程序在我被分配到该程序时就已经构建好了。我的工作一开始只是做主题,让它与我们网站的其他部分相匹配。现在,管理层要求增加一些超出我能力范围的功能。其中一个功能是,客户可以选择将聊天日志的副本保存到他们的计算机上

整个聊天会话存储在一个名为chatHistoryHTML的javascript变量中,一个循环通过向chatHistoryHTML变量添加新的文本行并将其显示在“history”div中以供客户查看,从而使页面上的聊天会话每5秒更新一次

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

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

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

  • 将聊天日志转储到一个新窗口并调用
    print()
    (隔离日志并使其可打印,否则用户也会抓取页面上的所有UI元素),或者

  • 使用AJAX并将其发送到服务器,然后服务器将其转发给用户的电子邮件
JavaScript无法将文件本地保存到客户端。但是,您有一个次要选项:

  • 将其迁移到Silverlight/Flash以获得附加功能/特性

在客户端,您可以尝试:

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);
演示:

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


参考文献:

  • Blob
    constructor-
  • Blob
    浏览器兼容性-
  • 下载
    属性/属性-
  • 下载
    属性/属性浏览器兼容性-
  • URL.createObjectURL
    -
  • 数据集
    属性-
  • 数据集
    属性浏览器兼容性-
您可以使用,它比Ian的解决方案得到更广泛的支持,并且不依赖于服务器端:

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

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


。显示帧源以查看源代码而不是粘贴HTML的包装。

这样您就知道如何保存文件了?你只想显示一个确认框?我知道如何告诉用户手动保存文件。。。我不知道如何使用PHP或Javascript来保存文件(我怀疑Javascript是否可以,但我确信PHP可以)。虽然我不懂AJAX,但如果有人能为我提供代码,我愿意使用它。(如果这需要AJAX)php绝对可以做到……但我很抱歉,我不知道如何:/“使用AJAX并将其发送到服务器,然后服务器将其转发到电子邮件中返回给用户。”-不需要这样做。服务器可以重定向或响应mime类型,强制浏览器下载。@VivinPaliath:我的理解是没有任何东西在保存服务器端(OP提到了一个本地JS变量)。但是,如果它保存在服务器端,那么您是对的;您可以添加类似于
的内容,也许问我问题的更好方式是:“如何在服务器端保存Javascript变量?”一旦我越过了这个障碍,我想我可以自己处理其余的。@KennyJohnson通过AJAX将内容发布到服务器。@KennyJohnson您可以启动。@Ian:该文件在我的机器上没有扩展名。如果要指定文件名,请单击鼠标右键并另存为。为向后兼容性付出的代价很小。这是62.22%对70.25%的市场渗透率。也可以将blob附加到现有元素。使用
document.getElementById