Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Переадресация .html -> .php на JS
 
 автор: Eugene77   (17.10.2009 в 20:31)   письмо автору
 
 

Здравствуйте!
Подcкажите как сделать на JS переадресацию
из файла с расширением .html на файл с тем же именем,
но с расширением .php.

Пример: index.html -> index.php

  Ответить  
 
 автор: АЯ   (17.10.2009 в 21:31)   письмо автору
 
   для: Eugene77   (17.10.2009 в 20:31)
 

<script>
//для случая замены файла с ЛЮБЫМ именем (и с ОБЯЗАТЕЛЬНЫМ наличием ЛЮБОГО расширения) на такое же имя, но с расширением PHP

var s = document.location;
s.href = s.href.substring (0, s.lastIndexOf ('.')) + '.php';
</script>

  Ответить  
 
 автор: Eugene77   (18.10.2009 в 05:23)   письмо автору
 
   для: АЯ   (17.10.2009 в 21:31)
 

Как просто и красиво!
Спасибо!

  Ответить  
 
 автор: Eugene77   (18.10.2009 в 05:49)   письмо автору
 
   для: АЯ   (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'

  Ответить  
 
 автор: АЯ   (18.10.2009 в 07:19)   письмо автору
 
   для: 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>

  Ответить  
 
 автор: Eugene77   (18.10.2009 в 08:10)   письмо автору
 
   для: АЯ   (18.10.2009 в 07:19)
 

Нет, так тоже не работает ни в IE ни в OPERA 9.63
Алерт выводит адрес вполне нормальный

  Ответить  
 
 автор: АЯ   (18.10.2009 в 08:23)   письмо автору
 
   для: Eugene77   (18.10.2009 в 08:10)
 

А почему у меня работает?

Можете сохранить файл test2.html, ткнув в ссылку на него правой кнопкой мыши, чтобы посмотреть HTML-код c тем самым скриптом БЕЗ ЕДИНОГО ИЗМЕНЕНИЯ.
А можете ткнуть по ссылке левой кнопкой - тогда будете наблюдать переадресацию в реале (посмотрев на адресную строку браузера, где увидите test2.php) - http://codecenter.awardspace.com/test2.html

  Ответить  
 
 автор: Eugene77   (18.10.2009 в 10:05)   письмо автору
 
   для: АЯ   (18.10.2009 в 08:23)
 

Да, ссылка работает.
Но для меня такой вариант не подходит.
Надо как-то его усовершенствовать.
Дело в том, что мне перед переадресацией надо чтобы отработал подгружаемый JS.
Поэтому я пробую сделать редайрект по onLoad, но так почему-то не работает.

  Ответить  
 
 автор: АЯ   (18.10.2009 в 11:11)   письмо автору
 
   для: 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 ()"

  Ответить  
 
 автор: Eugene77   (18.10.2009 в 12:07)   письмо автору
 
   для: АЯ   (18.10.2009 в 11:11)
 

Спасибо!
Сделал пока по второму варианту (Так по крайней мере работает).
Не уверен только, что скрипт из подключенного файла успеет отработать до перенаправления.
(Он ставит куки, которые должен получить PHP файл)

Непонятно как убедиться в надёжности такой схемы...

  Ответить  
 
 автор: АЯ   (18.10.2009 в 14:32)   письмо автору
 
   для: Eugene77   (18.10.2009 в 12:07)
 

>"Непонятно как убедиться в надёжности такой схемы"

Поставить куки в HTML-файле, а прочитать их - в PHP.
Проблемы не вижу.
Совсем не вижу.

  Ответить  
 
 автор: Eugene77   (19.10.2009 в 10:34)   письмо автору
 
   для: АЯ   (18.10.2009 в 14:32)
 

А не может быть так, что один раз сработает, а другой раз - нет?

  Ответить  
 
 автор: АЯ   (19.10.2009 в 10:49)   письмо автору
 
   для: Eugene77   (19.10.2009 в 10:34)
 

Ну это же не ромашка "любит-не любит".
Если у пользователя разрешены куки, то проблем не будет.

  Ответить  
 
 автор: Eugene77   (19.10.2009 в 19:44)   письмо автору
 
   для: АЯ   (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> 

  Ответить  
 
 автор: АЯ   (19.10.2009 в 22:24)   письмо автору
 
   для: Eugene77   (19.10.2009 в 19:44)
 

Время постановки кук - это как "миг по сравнению с вечностью", если сравнивать его со временем, необходимым браузеру для закрытия одного документа и посылки HTTP-запроса к новому файлу.

При любом размере записываемых кук (а возможный максимум - это 64 кБ) любой компьютер (даже с самым медленно-древним винчестером) ВСЕГДА успеет их записать до перехода к другому URL в окне.

  Ответить  
 
 автор: Eugene77   (20.10.2009 в 20:40)   письмо автору
 
   для: АЯ   (19.10.2009 в 22:24)
 

>Время постановки кук - это как "миг по сравнению с вечностью", если сравнивать его со временем, необходимым браузеру для закрытия одного документа и посылки HTTP-запроса к новому файлу.
Это у меня сомнений не вызывает.
>
>При любом размере записываемых кук (а возможный максимум - это 64 кБ) любой компьютер (даже с самым медленно-древним винчестером) ВСЕГДА успеет их записать до перехода к другому URL в окне.

Это выглядит верно если подгружаемый скрипт только лишь записывает куки.
А что если он долго выполняется?
Обращается к другим URL, а лишь потом записывает свои куки?
Да и сам он какое-то время загружается...
Никаких тут накладок не может произойти?

ВСЕГДА успеет их записать до перехода к другому URL в окне

Возможно, переход (загрузка новой страницы) длится долго, но запрос к серверу формируется быстро. Не сформируется ли этот запрос прежде, чем будет поставлена кука?

  Ответить  
 
 автор: АЯ   (20.10.2009 в 21:09)   письмо автору
 
   для: Eugene77   (20.10.2009 в 20:40)
 

Javascript выполняется браузером последовательно, оператор за оператором, строчка за строчкой.
И делать это он будет такое время, которое это ему необходимо.
Если только нет искусственно созданного временного разрыва.

Если вы обращаетесь к посторонним URL, то вы были просто обязаны "завязать" свои функции таким образом, что разрыв во времени появился. Тогда да - тогда переадресацию необходимо вешать на событие окончания работы самой последней функции.

Вам легко это будет сделать.
Вы можете поставить куки в самом конце работы вашего "сложного скрипта".
А потом СРАЗУ ЖЕ эти куки прочитать.
Если прочтённое из кук совпадёт с тем, что вы и хотели поставить, то вот тогда делайте переадресацию.

Правда, я не знаю, что вам посоветовать для случая, если "не совпадет"? :-)

Вы вообще можете в конце каждого важного этапа работы скрипта добавлять по одному символу в какую-то изначально пустую переменную.
Например:
1) вызвали URL - прописали букву Д
2) "вытащили" что-то из этого URL - добавили У
3) подготовили данные для кук - дополнительно букву Р
4) поставили куки - добавьте А
...
ну и так далее.

Если в итоге получившееся совпадет с тем, что я о некоторых думаю, то, значит, - у вас всё в порядке. :-)

  Ответить  
 
 автор: Eugene77   (22.10.2009 в 17:30)   письмо автору
 
   для: АЯ   (20.10.2009 в 21:09)
 

>Javascript выполняется браузером последовательно, оператор за оператором, строчка за строчкой.
>И делать это он будет такое время, которое это ему необходимо.
>Если только нет искусственно созданного временного разрыва.


Вы можете перечислить причины, которые могут приводить к возникновению такого временного разрыва?
Вы уверены, что знаете полный список этих причин?

  Ответить  
 
 автор: АЯ   (22.10.2009 в 19:26)   письмо автору
 
   для: Eugene77   (22.10.2009 в 17:30)
 

>"Вы можете перечислить причины, которые могут приводить к возникновению такого временного разрыва?"

Например, использование окошка alert - покуда клиент не закроет окошко, программа остановит выполнение кода.
Или, например, использование метода setTimeout ().
Или, например, вызов загрузки внешнего файла в src встроенного ифрейма с навеской на этот ифрейм обработчика события onload.
Или, например, посылка вызова по технологии AJAX с последующим ожиданием возврата респонса.
И тому подобное...


>"Вы уверены, что знаете полный список этих причин?"

А зачем мне знать ПОЛНЫЙ список?
Вполне достаточным будет проанализировать лишь те скриптовые решения, кои применены в коде и которые, как следует из механизма их работы, могут породить временные разрывы.

  Ответить  
 
 автор: Eugene77   (24.10.2009 в 07:11)   письмо автору
 
   для: АЯ   (22.10.2009 в 19:26)
 

Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования