我有一个使用两个框架的页面,顶部框架显示用户名,底部框架显示该用户的网站。但是,在底部框架显示网站之前,它会执行一些后端数据库工作。
主html的相关代码(注意:每次刷新时传递的变量都会改变):
<!DOCTYPE html>
<html lang="en">
<head>
<META HTTP-EQUIV="Refresh" CONTENT="30">
</head>
<frameset rows="20%, 80%">
<frame src="search-results.php?user=<?php echo $row['user'];?>" name="content1">
<frame src="a3track.php?user=<?php echo $row['user'];?>&url=<?php echo $row['url'];?>" name="content2">
</frameset>
</html>
顶部框架页面的相关代码(search-results.php):
<?php
$user=$_GET['user'];
echo '<html><head></head><body>' . $user . '</body></html>';
?>
底部框架页面的相关代码(a3track.php):
<?php
$user=$_GET['user'];
$url=$_GET['url'];
// do some database work here
//Then redirect to client's website
$redirect_to = "http://" . $url;
echo '<script>
<!--
window.location = "'.$redirect_to.'"
-->
</script>';
?>
应该发生的是客户的网站在底部框架中显示30秒,但在完成数据库工作后,框架仍为空白。
如果我在一个独立的窗口中单独运行页面a3track.php它可以正常工作,在完成数据库工作后正确显示重定向的网站,但在框架内部时不会这样做。
我猜测需要在a3track.php的脚本部分更改某些内容,但我不知道在搜索答案时我已经仔细阅读过的网站和网页的内容中找不到任何线索。
答案 0 :(得分:1)
很难调试已弃用的功能(很长一段时间)。使用框架不再是一个好主意,它可以工作,但你可以非常肯定它不会再工作了,每个浏览器可以完全不同地处理它。 如果你想坚持你的计划,你可以尝试php-redirect
header('Location: http://www.example.com');
但我不能保证这会起作用,这只是猜测。
我建议将所有内容都切换到现代系统。您可以构建一个包含iframe的页面,您可以在其中加载客户端网站。因此,您可以在页面上完成所有数据库操作,当它完成后,页面会显示加载的iframe,并指向客户端网站。我非常确定这会消除您遇到的一些问题。