Я пытаюсь создать страницу, которая при обновлении будет случайным образом загружать URL-адрес из списка URL-адресов. Лучший способ сделать это, который я нашел до сих пор, — это заставить PHP случайным образом брать строку из файла, а затем загружать ее в iframe. Это также позволяет мне иметь кнопку закрытия на верхней панели, которая позволяет открывать любую страницу, загруженную в iframe.
Проблема, с которой я сталкиваюсь, заключается в том, что в firefox после пары перезагрузок iframe просто начинает возвращаться к кешу и не загружает ничего нового. Я предполагаю, что это проблема с кешем, потому что нажатие Ctrl + F5 заставит iframe загрузить новую страницу.
Я попытался добавить кучу метатегов антикеша, а также кусок javascript, который я нашел на эта статья.
Пока ничего не получилось. Кто-нибудь знает хороший обходной путь или видит что-то не так в моем коде (я очень новичок).
Спасибо за любую помощь!
Вот код:
</html>
<head>
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<meta http-equiv="expires" content="FRI, 13 APR 1999 01:00:00 GMT">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
function Ionload()
{
$(parent.document).find("iframe").each(function() {
// apply the logic only to the current iframe only
if(this.contentDocument == window.document) {
// if the href of the iframe is not same as
// the value of src attribute then reload it
if(this.src != location.href) {
this.src = this.src;
}
}
});
}
</script>
<?php
class MyClass
{
function GetLine()
{
global $line;
srand ((double)microtime()*1000000);
$f_contents = file ("urlz");
$line = $f_contents[array_rand ($f_contents)];
}
function PrintVar()
{
global $line;
print $line;
}
}
MyClass::GetLine();
?>
<style type="text/css" media="all">
html, body {
height: 100%
}
body {
margin: 0;
overflow: hidden;
}
#topbar {
height: 50px;
width: 100%;
border-bottom: 3px solid #666
}
#page {
height: 100%;
width: 100%;
border-width: 0
}
</style>
</head>
<body>
<div id="topbar">
<a href=<?php MyClass::PrintVar();?> target="_top">close</a>
</div>
</body>
<iframe id="page" name="page" onload="Ionload()" src=<?php MyClass::PrintVar();?> frameborder="0" noresize="noresize"></iframe>
</html>
Обновлять:
С некоторой помощью GGG я исправил это. Вот изменение функции:
function GetLine()
{
global $newline;
srand ((double)microtime()*1000000);
$f_contents = file ("urlz");
$line = $f_contents[array_rand ($f_contents)];
$newline = $line . "?foo=" . rand();
}
Я выбрал случайное число вместо последовательности, так как не знал, как перенести последовательность от одной перезагрузки к другой, но это работает.
Я также заметил, что проблема все еще существует, если Firefox обновляется менее чем через две секунды после загрузки страницы, но я могу с этим смириться.
.
(точка) для конкатенации строк в PHP. 28.02.2012