|
|
|
| Здравствуйте!
Подcкажите как сделать на JS переадресацию
из файла с расширением .html на файл с тем же именем,
но с расширением .php.
Пример: index.html -> index.php | |
|
|
|
|
|
|
|
для: Eugene77
(17.10.2009 в 20:31)
| |
<script>
//для случая замены файла с ЛЮБЫМ именем (и с ОБЯЗАТЕЛЬНЫМ наличием ЛЮБОГО расширения) на такое же имя, но с расширением PHP
var s = document.location;
s.href = s.href.substring (0, s.lastIndexOf ('.')) + '.php';
</script>
|
| |
|
|
|
|
|
|
|
для: АЯ
(17.10.2009 в 21:31)
| | Как просто и красиво!
Спасибо! | |
|
|
|
|
|
|
|
для: АЯ
(17.10.2009 в 21:31)
| | Почему-то не работает.
Вот весь файл:
<html>
<head>
<script type="text/javascript">
function rep(s) {
alert(s.href);
s.href =
s.href.substring (0,
s.lastIndexOf ('.')) +
'.php';
}
</script>
</head>
<body onload="rep(document.location)">
</body>
</html>
|
А вот текст ошибки:
JavaScript - http://localhost/index.html
Event thread: load
Error:
name: TypeError
message: Statement on line 4: Type mismatch (usually non-object value supplied where object required)
Backtrace:
Line 4 of inline#1 script in http://localhost/index.html: In function rep
s.href =
Line 1 of function script
rep(document.location)
...
stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
|
| |
|
|
|
|
|
|
|
для: Eugene77
(18.10.2009 в 05:49)
| | onload'a тега <BODY> здесь дожидаться не стоит.
Попробуйте так, у меня работает:
<html>
<head>
<script>
var s = document.location.href;
document.location.href = s.substring (0, s.lastIndexOf ('.')) + '.php';
</script>
</head>
<body>
</body>
</html>
|
--------------------------
А вообще - интересно:
<script>
var obj = document.location; // это - ОБЪЕКТ
var prop = document.location.href; // это - СВОЙСТВО объекта
alert (prop + ' = ' + typeof (prop));
//алерт должен выводить СТРОКОВОЕ значение свойства. И без вопросов ВЫВОДИТ.
alert (obj + ' = ' + typeof (obj));
//должен выводить [object] = object, но почему-то выводит СТРОКОВОЕ значение
//Кто-нибудь может объяснить - ПОЧЕМУ???
//Для примера: объект document выводится ПРАВИЛЬНО
alert (document + ' = ' + typeof (document));
//Что не так с объектом location?
</script>
|
| |
|
|
|
|
|
|
|
для: АЯ
(18.10.2009 в 07:19)
| | Нет, так тоже не работает ни в IE ни в OPERA 9.63
Алерт выводит адрес вполне нормальный | |
|
|
|
|
|
|
|
для: Eugene77
(18.10.2009 в 08:10)
| | А почему у меня работает?
Можете сохранить файл test2.html, ткнув в ссылку на него правой кнопкой мыши, чтобы посмотреть HTML-код c тем самым скриптом БЕЗ ЕДИНОГО ИЗМЕНЕНИЯ.
А можете ткнуть по ссылке левой кнопкой - тогда будете наблюдать переадресацию в реале (посмотрев на адресную строку браузера, где увидите test2.php) - http://codecenter.awardspace.com/test2.html | |
|
|
|
|
|
|
|
для: АЯ
(18.10.2009 в 08:23)
| | Да, ссылка работает.
Но для меня такой вариант не подходит.
Надо как-то его усовершенствовать.
Дело в том, что мне перед переадресацией надо чтобы отработал подгружаемый JS.
Поэтому я пробую сделать редайрект по onLoad, но так почему-то не работает. | |
|
|
|
|
|
|
|
для: Eugene77
(18.10.2009 в 10:05)
| | Варианты.
Первый:
<script>
//Здесь вы можете написать одну, две,.. десять, двадцать,.. сто, двести,.. тысячу, две тысячи...
//строчек исполняемого JS-кода
var s = document.location.href;
document.location.href = s.substring (0, s.lastIndexOf ('.')) + '.php';
</script>
|
Второй:
<!-- Здесь вы можете подключить один, два,.. десять, двадцать,.. сто, двести,.. тысячу, две тысячи...
исполняемых JS-файлов <script src="URL"></script> -->
<script>
var s = document.location.href;
document.location.href = s.substring (0, s.lastIndexOf ('.')) + '.php';
</script>
|
Наконец, третий вариант, через onload, тоже спокойно работает.
Специально для вас сделал - http://codecenter.awardspace.com/test2a.html.
В демонстрационных целях поставил таймаут в 3 секунды.
В своём файле замените onload="setTimeout (rep, 3000)" на onload="rep ()" | |
|
|
|
|
|
|
|
для: АЯ
(18.10.2009 в 11:11)
| | Спасибо!
Сделал пока по второму варианту (Так по крайней мере работает).
Не уверен только, что скрипт из подключенного файла успеет отработать до перенаправления.
(Он ставит куки, которые должен получить PHP файл)
Непонятно как убедиться в надёжности такой схемы... | |
|
|
|
|
|
|
|
для: Eugene77
(18.10.2009 в 12:07)
| | >"Непонятно как убедиться в надёжности такой схемы"
Поставить куки в HTML-файле, а прочитать их - в PHP.
Проблемы не вижу.
Совсем не вижу. | |
|
|
|
|
|
|
|
для: АЯ
(18.10.2009 в 14:32)
| | А не может быть так, что один раз сработает, а другой раз - нет? | |
|
|
|
|
|
|
|
для: Eugene77
(19.10.2009 в 10:34)
| | Ну это же не ромашка "любит-не любит".
Если у пользователя разрешены куки, то проблем не будет. | |
|
|
|
|
|
|
|
для: АЯ
(19.10.2009 в 10:49)
| | Ну, поделитесь со мной своей уверенностью. Объясните почему вы считаете что вот это:
<!-- Здесь вы можете подключить один, два,.. десять, двадцать,.. сто, двести,.. тысячу, две тысячи...
исполняемых JS-файлов <script src="URL"></script> -->
|
Успеет закончить ставить все куки до того, как начнёт выполняться вот это:
<script>
var s = document.location.href;
document.location.href = s.substring (0, s.lastIndexOf ('.')) + '.php';
</script>
|
| |
|
|
|
|
|
|
|
для: Eugene77
(19.10.2009 в 19:44)
| | Время постановки кук - это как "миг по сравнению с вечностью", если сравнивать его со временем, необходимым браузеру для закрытия одного документа и посылки HTTP-запроса к новому файлу.
При любом размере записываемых кук (а возможный максимум - это 64 кБ) любой компьютер (даже с самым медленно-древним винчестером) ВСЕГДА успеет их записать до перехода к другому URL в окне. | |
|
|
|
|
|
|
|
для: АЯ
(19.10.2009 в 22:24)
| | >Время постановки кук - это как "миг по сравнению с вечностью", если сравнивать его со временем, необходимым браузеру для закрытия одного документа и посылки HTTP-запроса к новому файлу.
Это у меня сомнений не вызывает.
>
>При любом размере записываемых кук (а возможный максимум - это 64 кБ) любой компьютер (даже с самым медленно-древним винчестером) ВСЕГДА успеет их записать до перехода к другому URL в окне.
Это выглядит верно если подгружаемый скрипт только лишь записывает куки.
А что если он долго выполняется?
Обращается к другим URL, а лишь потом записывает свои куки?
Да и сам он какое-то время загружается...
Никаких тут накладок не может произойти?
ВСЕГДА успеет их записать до перехода к другому URL в окне
Возможно, переход (загрузка новой страницы) длится долго, но запрос к серверу формируется быстро. Не сформируется ли этот запрос прежде, чем будет поставлена кука? | |
|
|
|
|
|
|
|
для: Eugene77
(20.10.2009 в 20:40)
| | Javascript выполняется браузером последовательно, оператор за оператором, строчка за строчкой.
И делать это он будет такое время, которое это ему необходимо.
Если только нет искусственно созданного временного разрыва.
Если вы обращаетесь к посторонним URL, то вы были просто обязаны "завязать" свои функции таким образом, что разрыв во времени появился. Тогда да - тогда переадресацию необходимо вешать на событие окончания работы самой последней функции.
Вам легко это будет сделать.
Вы можете поставить куки в самом конце работы вашего "сложного скрипта".
А потом СРАЗУ ЖЕ эти куки прочитать.
Если прочтённое из кук совпадёт с тем, что вы и хотели поставить, то вот тогда делайте переадресацию.
Правда, я не знаю, что вам посоветовать для случая, если "не совпадет"? :-)
Вы вообще можете в конце каждого важного этапа работы скрипта добавлять по одному символу в какую-то изначально пустую переменную.
Например:
1) вызвали URL - прописали букву Д
2) "вытащили" что-то из этого URL - добавили У
3) подготовили данные для кук - дополнительно букву Р
4) поставили куки - добавьте А
...
ну и так далее.
Если в итоге получившееся совпадет с тем, что я о некоторых думаю, то, значит, - у вас всё в порядке. :-) | |
|
|
|
|
|
|
|
для: АЯ
(20.10.2009 в 21:09)
| | >Javascript выполняется браузером последовательно, оператор за оператором, строчка за строчкой.
>И делать это он будет такое время, которое это ему необходимо.
>Если только нет искусственно созданного временного разрыва.
Вы можете перечислить причины, которые могут приводить к возникновению такого временного разрыва?
Вы уверены, что знаете полный список этих причин? | |
|
|
|
|
|
|
|
для: Eugene77
(22.10.2009 в 17:30)
| | >"Вы можете перечислить причины, которые могут приводить к возникновению такого временного разрыва?"
Например, использование окошка alert - покуда клиент не закроет окошко, программа остановит выполнение кода.
Или, например, использование метода setTimeout ().
Или, например, вызов загрузки внешнего файла в src встроенного ифрейма с навеской на этот ифрейм обработчика события onload.
Или, например, посылка вызова по технологии AJAX с последующим ожиданием возврата респонса.
И тому подобное...
>"Вы уверены, что знаете полный список этих причин?"
А зачем мне знать ПОЛНЫЙ список?
Вполне достаточным будет проанализировать лишь те скриптовые решения, кои применены в коде и которые, как следует из механизма их работы, могут породить временные разрывы. | |
|
|
|
|
|
|
|
для: АЯ
(22.10.2009 в 19:26)
| | Спасибо! | |
|
|
|