Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№116-01-2013 19:18:04

Почемучкин
Участник
 
Группа: Members
Зарегистрирован: 22-05-2011
Сообщений: 70
UA: Firefox 15.0

Какие отличия нормального JavaScript от встроенного в Mozilla?

Попробовал сделать простое расширение и столкнулся с тем, что есть несколько разных "стандартов": XUL, bootstrap.js, какие-то странные API и SDK, типа Addon Builder, которые только всё усложняют и делают через зад, имхо.

Попытался сделать простой плагин в этом Add-on Builder-е (хотя он и добавляет полмегабайта мусора): оказалось, что такая стандартная функция JavaScript, как alert, отсутствует! Тогда это уже не совсем JavaScript, imho.
Также заметил, что вместо var используется let.
А какие ещё отличия есть и где почитать последовательное описание языка и библиотек, а не отрывочные статейки?

Столкнулся также с тем, что большинство статей (если их сайты еще не умерли), рассказывают об устаревших API, а как мы знаем, версии Firefox меняются очень быстро и старые расширения и API быстро теряют совместимость с самыми современными версиями. Это все усложняет, так как старые руководства можно сказать протухают на глазах.

Отсутствует

 

№217-01-2013 03:53:48

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 19.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

"Смешались в кучу кони, люди"...
что есть несколько разных "стандартов"
Стандарт есть только один - ECMAScript.

XUL
XUL не имеет к JS никакого отношения, это XML-подобный язык разметки интерфейса. Он может взаимодействовать с JS, но им не является.

bootstrap.js
Вспомогательный файл для джетпаков, не более. Ни API, ни платформой не является.

какие-то странные API и SDK, типа Addon Builder
Построитель и упаковщик всё тех же джетпаков, так же не является ни API, ни платформой. Jetpack - это да, отдельная технология со своим API и SDK.

полмегабайта мусора
С чего вы решили, что это мусор? Попробуйте ради эксперимента удалить этот мусор, и проверить, будет ли расширение работать.

что такая стандартная функция JavaScript, как alert, отсутствует!
Ничего подобного. Это функция объекта window, который в веб-страницах является контекстом выполнения, и ссылка на него подставляется в выполнение alert автоматически. А в контексте расширений этого объекта (DOMWindow) нет; в оконных скриптах есть ChromeWindow, но у него нет такого метода. Но это всё уже нюансы API.

вместо var используется let
Это появилось в версии JS 1.7: https://developer.mozilla.org/en-US/doc … ements/let. Если вам некритичен контроль за variable scope, можете по-прежнему использовать var.

Столкнулся также с тем, что большинство статей (если их сайты еще не умерли), рассказывают об устаревших API
Учите английский и читайте первоисточник.

Отсутствует

 

№317-01-2013 09:36:25

Почемучкин
Участник
 
Группа: Members
Зарегистрирован: 22-05-2011
Сообщений: 70
UA: Firefox 15.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

> XUL не имеет к JS...
Вот так открытие... ;) Но это все-таки одна из технологий (стратегий) для написания плагинов.

>> полмегабайта мусора
> С чего вы решили, что это мусор? Попробуйте ради эксперимента удалить этот мусор, и проверить, будет ли расширение работать.

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

>> вместо var используется let
> Это появилось в версии JS 1.7

Хм, интересно. Только в Firefox 15 почему-то не работает (на вебстраницах), хотя заявлено, что "JavaScript 1.7 support was introduced in Firefox 2." Почему же тогда не работает?

>> Столкнулся также с тем, что большинство статей (если их сайты еще не умерли), рассказывают об устаревших API
> Учите английский и читайте первоисточник (developer.mozilla.org).

И английские статьи тоже устаревают, и в большинстве относятся к старым версиям, в том числе статьи с developer.mozilla.org. А такие краеугольные сайты, как XUL Planet, на который есть ссылки даже в документации и коде на Mozilla.org, уже даже умерли...
Что касается developer.mozilla.org, то справочники типа MDN не относятся к последовательным изложением и "читать" их не получится - они для этого не предназначены - они справочники и имеют непоследовательную структуру.

Собственно, я так и думаю, что скорее всего нужное мне закопано на developer.mozilla.org, хотя возможно есть сторонние учебники (какие?)  Учебники в данном случае лучше, так как слишком все запутано. Я хочу нормально разобраться, а не просто по шаблону из другого расширения лепить.

> что такая стандартная функция JavaScript, как alert, отсутствует!
>> Ничего подобного. Это функция объекта window, который в веб-страницах является контекстом выполнения, и ссылка на него подставляется в выполнение alert автоматически. А в контексте расширений этого объекта (DOMWindow) нет; в оконных скриптах есть ChromeWindow, но у него нет такого метода. Но это всё уже нюансы API.

Но в учебниках по JavaScript если это и упоминается, то вскользь. А здесь, при разработке "внутри" firefox, такие детали становятся очень важными. Поэтому я и обратился за помощью.
Очень много таких ньюансов, незнакомый API, собственно вообще "все по-другому" в отличие от вебстраниц. И здесь нужен именно учебник, а не просто справочник.

Посоветуйте учебник по используемым в мозилле JS и другим технологиям. Но с последовательным изложением, желательно начиная с основ.
Не посылайте меня просто на сайт. Я там был. Там черт ногу сломит. Нужны рекомендации конкретных хороших учебных пособий.

Отредактировано Почемучкин (17-01-2013 09:57:58)

Отсутствует

 

№417-01-2013 09:55:57

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 17.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

Почемучкин
Вот с того и решил, что там полмегабайта неиспользующегося кода.
Так вы всё же попробуйте его удалить.

Только в Firefox 15 почему-то не работает (на вебстраницах), хотя заявлено, что "JavaScript 1.7 support was introduced in Firefox 2." Почему же тогда не работает?
Имея дело с фактом в постановке "не работает" можно ответить только "потому что" или "УМВР". Как не работает? Есть сообщения об ошибках? Если да - какие? Что в консоли? И, наконец, код, который "не работает", покажите.

И английские статьи тоже устаревают, и в большинстве относятся к старым версиям, в том числе статьи с developer.mozilla.org.
Приведите пример, чтобы не быть голословным. Я вот такие примеры касательно MDN привести могу - но эти примеры касаются очень узких направлений разработки, типа разработки бинарных XPCOM. Мэйнстримовые направления (JS, XUL, CSS) там поддерживаются в актуальном состоянии.

Посоветуйте учебник по используемому в mozilla JS и другим технологиям. Но с последовательным изложением, желательно начиная с основ.
JavaScript Guide - JavaScript | MDN
JavaScript Reference - JavaScript | MDN
A re-introduction to JavaScript (JS Tutorial) - JavaScript | MDN
XUL Tutorial - XUL | MDN
Firefox addons developer guide | MDN
Code snippets | MDN

Отсутствует

 

№517-01-2013 10:07:36

Почемучкин
Участник
 
Группа: Members
Зарегистрирован: 22-05-2011
Сообщений: 70
UA: Firefox 15.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

hydrolizer
> Так вы всё же попробуйте его удалить.
У меня нет достаточной квалификации, но я видел, что в некоторых расширениях большая часть файлов джетпака выброшена.

>> Только в Firefox 15 почему-то не работает (на вебстраницах), хотя заявлено, что "JavaScript 1.7 support was introduced in Firefox 2." Почему же тогда не работает?
> Имея дело с фактом в постановке "не работает" можно ответить только "потому что" или "УМВР". Как не работает? Есть сообщения об ошибках? Если да - какие? Что в консоли? И, наконец, код, который "не работает", покажите.

Букмарклет (вставьте в адресную строку и запустите):

скрытый текст

Выделить код

Код:

javascript:let myvar=9; alert(myvar); void 0;

Выдает ошибку: Error: SyntaxError: missing ; before statement; Line: 1, Column: 4
То есть требует ; после let

Выделить код

Код:

javascript:let (myvar=9) { alert(myvar); }void 0;

Error: SyntaxError: missing ; before statement
Line: 1, Column: 14 Source Code:
let (myvar=9) { alert(myvar); }void 0;

Выделить код

Код:

javascript:let (myvar=9);  alert(myvar); void 0;

Error: ReferenceError: let is not defined
Source File: javascript:let%20(myvar=9);%20%20alert(myvar);%20void%200;
Line: 1


> Приведите пример
Извините, но я не думал что мне это понадобится. Зато я запомнил, что не только в статьях с mozilla.org, но даже в коде джетпака есть ссылки на неработающие сайты и страницы.


hydrolizer
Спасибо за ссылки, но посмотрев их, я понял, что мне больше нужно про использование API mozilla в JavaScript.
Чтобы небыло сюрпризов как с отсутствующим alert и чем его заменить или с let, которое не работает в обычном javascript, но работает внутри firefox.

Отредактировано Почемучкин (17-01-2013 12:12:09)

Отсутствует

 

№617-01-2013 12:31:06

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 17.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

Букмарклет
Ээ? Это такой способ осваивать JS для написания расширений? Я попробовал в Scratchpad - всё прекрасно работает.

я не думал что мне это понадобится
Зато я запомнил
Видимо, пригодится информация о том, что где не написано и/или устарело?

мне больше нужно про использование API mozilla в JavaScript
О. Велкам: https://developer.mozilla.org/en-US/doc … ence_group.
Если что - учебника по использованию перечисленного нет. Обычно просто люди сталкиваются с вполне определенными проблемами, по существу этих проблем задаются вполне определенными вопросами (ну, или задают эти вопросы другим), находят ответы, и таким образом пополняют свои знания.

Отсутствует

 

№717-01-2013 13:50:19

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 18.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

Я попробовал в Scratchpad - всё прекрасно работает.

А если попробовать на html-странице, то получим ошибку: (при использовании "use strict";) - SyntaxError: let is a reserved identifier.
Нужно явно указывать <script type="application/javascript;version=1.7"></script> см. https://developer.mozilla.org/en-US/doc … Script/1.7

Отредактировано Lex1 (17-01-2013 14:05:15)

Отсутствует

 

№817-01-2013 14:17:50

Почемучкин
Участник
 
Группа: Members
Зарегистрирован: 22-05-2011
Сообщений: 70
UA: Firefox 15.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

hydrolizer
Ваша версия FF: 17
Lex1
Ваша: FF 18

Я говорил о том, что в FF15 на обычной не-strict вебстранице "ReferenceError: let is not defined"
Понятнее? Эти ошибки, выданные в консоли ошибок Firefox, а не выдуманные, я привел выше. То есть получается, что Firefox 15 не понимает ключевого слова "let", по крайней мере на вебстраницах.

hydrolizer
Букмарклеты - удобный и простой способ запускать javascript в контексте вебстраницы. Что в них не устраивает?

За ссылку на XPCOM API спасибо.

Отредактировано Почемучкин (17-01-2013 14:23:20)

Отсутствует

 

№917-01-2013 14:30:30

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 18.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

Я говорил

А вам ответили, что для работы let на странице нужно явно указывать версию js, т.к. иначе может сломаться существующий код.

Выделить код

Код:

<script type="application/javascript;version=1.7">
let myvar=9; alert(myvar);
</script>

The features that require the use of the new keywords "yield" and "let" require you to specify version 1.7 because existing code might use those keywords as variable or function names. The features that do not introduce new keywords (destructuring assignment and array comprehensions) can be used without specifying the JavaScript version.

Добавлено 17-01-2013 14:33:45
С "use strict"; просто выдаётся более внятное сообщение об ошибке.

Отредактировано Lex1 (17-01-2013 14:33:45)

Отсутствует

 

№1017-01-2013 14:48:49

Почемучкин
Участник
 
Группа: Members
Зарегистрирован: 22-05-2011
Сообщений: 70
UA: Firefox 15.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

> А вам ответили, что для работы let на странице нужно явно указывать версию js, т.к. иначе может сломаться существующий код.

Хорошо, кое-что разъясняется - если встроить эту конструкцию с версией в страницу, в FF15 тоже работает.
Но по-умолчанию оно не работает.

А как указать версию скрипта не создавая вебстраницу, а в текущей? Букмарклетом, в консоли, в Scratchpad'е, в Greasemonkey - хоть как-то?

> С "use strict"; просто выдаётся более внятное сообщение об ошибке.

Со strict страницами букмарклеты кажется вообще не работают.

Отредактировано Почемучкин (17-01-2013 14:57:17)

Отсутствует

 

№1117-01-2013 14:58:44

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 18.0

Re: Какие отличия нормального JavaScript от встроенного в Mozilla?

Где говорили?

http://forum.mozilla-russia.org/viewtop … 84#p597284 Подробности по ссылке.

А как указать версию скрипта не создавая вебстраницу, а в текущей?

Если очень хочется:

Выделить код

Код:

javascript: (function () {
var script = document.createElement('script');
script.type = 'text/javascript;version=1.8';
script.appendChild(document.createTextNode("let myvar=9; alert(myvar);"));
document.body.appendChild(script);
})();

Со strict страницами букмарклеты кажется вообще не работают.

Строгий режим страниц и скриптов, это две разные  вещи. Работоспособность скорее связана с https://bugzilla.mozilla.org/show_bug.cgi?id=680302#c28

Добавлено 17-01-2013 15:19:39

в Greasemonkey

Оно и так работает.

Отредактировано Lex1 (17-01-2013 15:19:39)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]