Firefox 的诡异的 iframe 缓存问题

firefox 会缓存 iframe 的内容。但是诡异的是对用动态页面输出的 js 生成的包含静态内容的 iframe 却可能会缓存不该缓存的东西。

test.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title> test </title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
  test.php
</body>
</html>

test.php

<?php
session_start();
if (!isset($_SESSION['test'])) {
    $_SESSION['test']=true;
}

if ($_SESSION['test']) {
    echo 'document.write(\'http://test2.htm\');';
} else {
    echo 'document.write(\'<iframe name="test"></iframe>\');';
}
$_SESSION['test'] = !$_SESSION['test'];

test2.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
  <script type="text/javascript">
    alert('a~~~~');
    parent.location.href=parent.location.href;
  </script>
</body>
</html>

比如上面那个例子,访问过一次 test.html 后,再刷新一下,比较一下 firefox 和其他浏览器的差异。

解决办法是,在 js 输出 iframe 后,加一个 iframe.src = iframe.src; ,或者其他的可以刷新内容的东西。