Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Проблема с синтаксисом JS


Автор: EasyTask 26.7.2010, 15:56
Столкнулся со следующей проблемой. При чтении книги "PHP5 Практика создания веб-сайтов", в главе "Передача данных из JavaScript в PHP" наткнулся на следующий код:

Код

<script Language="JavaScript">
var height=0;
var width=0;
colorDepth = screen.colorDepth;

if (self.screen)
{
    width = screen.width;
    height = screen.height;
}
else if (self.java)
{
    var jToolKit = java.awt.Toolkit.getDefaultToolkit();
    var scsize = jToolKit.getScreenSize();
    width = scrsize.width;
    height = scrsize.height;
}

if (width > 0 && height > 0)
{
    window.location.href = "http://localhost/view.php?
                            width="+width+
                            "&height="+height+
                            "&color="+colorDepth;
}
else
exit();
</Script>


Перепечатав его со 100%-ной точностью я обнаружил что он не работоспособен. Методом проб и ошибок я попробовал разобрать его на куски и найти то, что мешает его выполнению. В итоге пришел к такому варианту:

Код

<script Language="JavaScript">
var height=0;
var width=0;
colorDepth = screen.colorDepth;

if (self.screen)
{
    width = screen.width;
    height = screen.height;
}

else if (self.java)
{
    var jToolKit = java.awt.Toolkit.getDefaultToolkit();
    var scsize = jToolKit.getScreenSize();
    width = scrsize.width;
    height = scrsize.height;
}

if (width > 0 && height > 0)
{
window.location.href = "http://localhost/view.php?width="+width+"&height="+height+"&color="+colorDepth;
}
else
exit();

</Script>

Все заработало как и должно (изменил лишь написание параметров widndow.location.href)

В связи с этим кодом у меня появилось несколько вопросов:

1\ Почему в виде window.location.href = "http://localhost/view.php?width=" + width; (пробел перед "+") код не хотел работать? Особенности JS?

2\ Большую часть кода я понимаю, но что значит это?
Код

else if (self.java)
{
    var jToolKit = java.awt.Toolkit.getDefaultToolkit();
    var scsize = jToolKit.getScreenSize();
    width = scrsize.width;
    height = scrsize.height;
}

Вроде как значение переменных мы определяем несколькими строками выше. Что значит "если мы не получим значение переменной из screen" и что происходит в этом случае? (что означает код приведенный выше)

Заранее спасибо за ответы! 

Автор: bars80080 26.7.2010, 19:55
Цитата(EasyTask @  26.7.2010,  15:56 Найти цитируемый пост)
1\ Почему в виде window.location.href = "http://localhost/view.php?width=" + width; (пробел перед "+") код не хотел работать? Особенности JS?

не знаю, почему ты винишь пробел, но перевод строки там разрывает код. в js это критично


Цитата(EasyTask @  26.7.2010,  15:56 Найти цитируемый пост)
2\ Большую часть кода я понимаю, но что значит это?

это java-хрень, направленная видимо на использование некоторого java-плагина, если он конечно установлен в браузере (или некоторой javascript-библиотеки). к чистому javascript он не имеет никакого отношения

Автор: EasyTask 26.7.2010, 21:26
Большое спасибо за ответ!

Цитата

не знаю, почему ты винишь пробел, но перевод строки там разрывает код. в js это критично

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

"http://localhost/view.php?width=" + width;

Но работает так:

"http://localhost/view.php?width="+width;

т.е я сначала я удивился, что наличие пробелов вокруг плюса между строкой и переменной критично. Сейчас проверил еще раз - работают оба варианта.

Цитата

это java-хрень, направленная видимо на использование некоторого java-плагина, если он конечно установлен в браузере (или некоторой javascript-библиотеки). к чистому javascript он не имеет никакого отношения 

То есть использование этого блока кода - не обязательно и не несет какой то важной смысловой нагрузки? (Код работоспособен и без этих строк)

Автор: bars80080 26.7.2010, 22:04
Цитата(EasyTask @  26.7.2010,  21:26 Найти цитируемый пост)
То есть использование этого блока кода - не обязательно и не несет какой то важной смысловой нагрузки?

да, потому что self.screen (а точнее window.screen) одно из наиболее кроссбраузерных свойств javascript. поддерживается везде, если javascript вообще поддерживается

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)