【问题标题】:changing state of document.readyState to "complete" after downloading file via PHP's header('Content-Disposition: attachment...'通过 PHP 的标头下载文件后,将 document.readyState 的状态更改为“完成”('Content-Disposition: attachment...'
【发布时间】:2015-03-20 03:29:07
【问题描述】:

我的问题是:通过 PHP 的 header('Content-Disposition: attachment... 技术下载文件后,发起下载的网页的 document.readyState 值为 interactive

我希望这是complete,因为下载已完成。

我是否遗漏了什么,或者这是预期的行为?

如果是后者,那么有没有办法将document.readyState 重置回complete

(这是使用 Internet Explorer,如果它有所不同的话......)


背景:

我有一些 JavaScript 函数,我希望仅在页面完成加载时才激活,所以我使用了

if( document.readyState != "complete" ) return;

在他们开始实现这个目标的时候。这适用于页面加载,因为document.readyState 在逐步加载时为interactive,并且仅在页面加载完成时为complete

在页面后面,我提供了一个链接,该链接将用户发送到以下 PHP 代码以允许下载加载的数据:

header( 'Content-Type: text/csv; charset=Shift-JIS' );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
$output = fopen( 'php://output', 'w' );
//write to file output... 
fclose( $output );

现在,按下此链接会使document.readyState 先成为loading,然后是interactive,但状态会一直停留在那里,永远不会移动到complete,从而禁用早期的JavaScript 函数...


我不知道为什么会这样,并且希望在任何方向上提供任何帮助。

【问题讨论】:

  • 您的页面第一次readyStatecomplete,您知道它已完全加载并且您的脚本可以运行。当用户单击不会离开页面的链接时(例如只执行文件下载的页面),您可以忽略生成的 readyState。因此,您可以检查页面是否曾经complete readyState 中,而不是检查所有脚本中的readyState。 (将readyState 设置为interactive 背后的基本原理可能是,从技术上讲,已经加载了一个不同的页面,但从未渲染过,也没有进入历史记录。)
  • @bzlm :一旦页面完成加载(从window.onload 调用,我认为这相当于检查页面已到达completereadyState),并使用该标志来确定其他脚本的可用性。这似乎有效 - 感谢您的帮助,如果您愿意,请提供答案,以便我接受它
  • @bzlm :但至于为什么readyState 保持interactive 背后的基本原理,我仍然不确定......测试其他类似的链接“加载”不同的页面而不实际移动保持@ 987654350@ as complete...试试这里jsfiddle.net/mw6r013b

标签: javascript php html internet-explorer readystate


【解决方案1】:

第一次您的页面有readyStatecomplete,您知道它已完全加载并且您的脚本可以运行。当用户单击不会离开页面的链接时(例如只执行文件下载的页面),您可以忽略生成的readyState。因此,您可以检查页面是否曾经complete readyState 中,而不是检查所有脚本中的readyState

readyState 设置为interactive 背后的基本原理可能是,从技术上讲,一个不同的页面已经加载,但从未呈现,也没有进入历史。但我只是猜测。正如您在 fiddle 中看到的那样,这种行为似乎不一致。

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2022-01-20
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    相关资源
    最近更新 更多