通过 PHP 的 header('Content-Disposition: attachment...' 下载文件后,将 document.readyState 的状态更改为 "complete"
changing state of document.readyState to "complete" after downloading file via PHP's header('Content-Disposition: attachment...'
我的问题是:通过 PHP 的 header('Content-Disposition: attachment
... 技术下载文件后,发起下载的网页的 document.readyState
值为 interactive
.
我希望这是 complete
,因为下载已完成。
我是不是遗漏了什么,或者这是预期的行为?
如果是后者,那么有什么方法可以将document.readyState
重置为complete
吗?
(这是使用 Internet Explorer,如果有区别...)
背景:
我有一些 JavaScript 功能,我只想在页面完成加载时激活,所以我使用
if( document.readyState != "complete" ) return;
他们开始实现这个目标。这适用于页面加载,因为 document.readyState
在逐步加载时是 interactive
,并且仅在页面加载完成后才为 complete
。
在页面的后面,我展示了一个 link,它将用户发送到下面的 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 );
现在,按下此 link 会导致 document.readyState
先 loading
然后 interactive
,但状态保持在那里,永远不会移动到 complete
,从而禁用早期的 JavaScript 功能...
我不明白为什么会这样,希望能在任何方向上提供任何帮助。
第一次 页面的 readyState
为 complete
,您知道它已完全加载并且您的脚本可以 运行。当用户单击不会离开页面的 link 时(例如仅执行文件下载的页面),您可以忽略结果 readyState
。因此,无需检查所有脚本中的 readyState
,您可以检查页面是否 ever 在 complete
readyState
.
将 readyState
设置为 interactive
的基本原理可能是,从技术上讲,不同的页面已加载,但从未呈现,也没有进入历史记录。但我只是猜测。正如您在 fiddle 中看到的那样,行为似乎不一致。
我的问题是:通过 PHP 的 header('Content-Disposition: attachment
... 技术下载文件后,发起下载的网页的 document.readyState
值为 interactive
.
我希望这是 complete
,因为下载已完成。
我是不是遗漏了什么,或者这是预期的行为?
如果是后者,那么有什么方法可以将document.readyState
重置为complete
吗?
(这是使用 Internet Explorer,如果有区别...)
背景:
我有一些 JavaScript 功能,我只想在页面完成加载时激活,所以我使用
if( document.readyState != "complete" ) return;
他们开始实现这个目标。这适用于页面加载,因为 document.readyState
在逐步加载时是 interactive
,并且仅在页面加载完成后才为 complete
。
在页面的后面,我展示了一个 link,它将用户发送到下面的 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 );
现在,按下此 link 会导致 document.readyState
先 loading
然后 interactive
,但状态保持在那里,永远不会移动到 complete
,从而禁用早期的 JavaScript 功能...
我不明白为什么会这样,希望能在任何方向上提供任何帮助。
第一次 页面的 readyState
为 complete
,您知道它已完全加载并且您的脚本可以 运行。当用户单击不会离开页面的 link 时(例如仅执行文件下载的页面),您可以忽略结果 readyState
。因此,无需检查所有脚本中的 readyState
,您可以检查页面是否 ever 在 complete
readyState
.
将 readyState
设置为 interactive
的基本原理可能是,从技术上讲,不同的页面已加载,但从未呈现,也没有进入历史记录。但我只是猜测。正如您在 fiddle 中看到的那样,行为似乎不一致。