Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

НГ/Вопросы по ӂаваскрипту́

Автор І. G., декабря 27, 2013, 11:51

0 Пользователи и 1 гость просматривают эту тему.

І. G.

Цитата: Тайльнемер от декабря 27, 2013, 11:23
Я полный ламер в сабже, а тут на форуме некоторые разбираются.
Буду тут задавать глупые вопросы.

Начну с начала, с загрузки скрипта. Сейчас у меня так:
У пользователей «ЛФ-фич» локально располагается юзер-скрипт следующего содержания:

// ==UserScript==
// @name       LfFeatures
// @namespace  lingvoforum
// @version    1.0.4
// @include    http://lingvoforum.net*
// ==/UserScript==

if(document.domain == "lingvoforum.net") // по идее, всегда true, но на всякий случай...
{
  var head = document.getElementsByTagName("head")[0];
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://teilnehmer.somee.com/LfFeatures/Content/LfFeaturesUserScript.js";
  head.appendChild(script);
}


При загрузке страницы ЛФ он срабатывает (момент времени №1), и начинает грузиться  LfFeaturesUserScript.js  с  //teilnehmer.somee.com, который состоит из jQuery и собственно скрипта.
LfFeaturesUserScript.js  начинает исполняться (момент времени №2), и там идёт $(function() { ... });
Как я понимаю, тело этого function'а исполняется по событию DOMContentLoaded (момент времени №3).
Момент №3 наступает на сотни миллисекунд позднее момента №2.

Насколько это корректно вообще?
Например, может ли случиться так, что в момент №1 head'а ещё нет в DOM'е, и скрипт вылетит?

В моменты времени 1 и 2 (т. е. до DOMContentLoaded) что уже гарантированно есть в DOM'е, а чего, возможно, нет? Какие действия можно выполнять в моменты 1 и 2?
Тайльнемер, скрипты GreaseMonkey (и совместимые) выполняются только после DOMContentLoaded страницы.

Опера поддерживает (или поддерживала, я не разбирался с вебкитооперой) несовместимые с GM скрипты (у них ЕМНИП расширение не .user.js, а .js) — вот в них надо волноваться о DOMContentLoaded:
Цитата: http://www.opera.com/docs/userjs/examples/#greasemonkey
Greasemonkey scripts

Opera is capable of running many Greasemonkey scripts. These are JavaScripts designed to work with the Greasemonkey enhancement for the Mozilla browser family. To tell Opera that a script file uses Greasemonkey notation, the name of the file containing the script must end with .user.js (all other .js files are assumed to be normal User JavaScripts). Scripts that use Greasemonkey notation are handled slightly differently (in order to be compatible with existing scripts):


  • They are not permitted to use window.opera.addEventListener and associated methods, or magic functions and variables.
  • They are executed when the page completes loading, after creating the DOM for the page, but before running any onload handlers that have been defined [выделение моё — І. G.].

Because of this different handling, Greasemonkey scripts are often not able to fix problems or errors until after they have already occurred. As a result, such scripts are generally best suited to adding enhancements, and not fixing problematic scripts.
...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

І. G.

Цитата: Тайльнемер от декабря 27, 2013, 11:23
При загрузке страницы ЛФ он срабатывает (момент времени №1), и начинает грузиться  LfFeaturesUserScript.js  с  //teilnehmer.somee.com, который состоит из jQuery и собственно скрипта.
LfFeaturesUserScript.js  начинает исполняться (момент времени №2), и там идёт $(function() { ... });
Как я понимаю, тело этого function'а исполняется по событию DOMContentLoaded (момент времени №3).
Момент №3 наступает на сотни миллисекунд позднее момента №2.
На самом деле последовательность такая:

  • DOMContentLoaded
  • Срабатывает скрипт, прописывает себя в head
  • Начинает выполняться прописанный в head скрипт
  • $(function() { ... }); — JQuery видит, что DOMContentLoaded уже наступил, и потому выполняет этот код сразу же
  • ???????
  • PROFIT!
...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

I. G.

...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

Alexandra A

Да я уже проверила знание мутаций после определённого артикля в ирландском.

Уже всё понятно...
taximagulus segouax caius iulius kent 25 august 55 before the common era
marcus tullius quintus tullius arpinum 6 may 51 before the common era

І. G.

...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

Тайльнемер

Спасибо.
Цитата: І. G. от декабря 27, 2013, 11:55
На самом деле последовательность такая:
DOMContentLoadedСрабатывает
скрипт, прописывает себя в head
Начинает выполняться прописанный в head скрипт
$(function() { ... }); — JQuery видит, что DOMContentLoaded уже наступил, и потому выполняет этот код сразу же
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?

І. G.

Цитата: Тайльнемер от декабря 27, 2013, 13:14
Цитата: І. G. от декабря 27, 2013, 11:55
На самом деле последовательность такая:
DOMContentLoadedСрабатывает
скрипт, прописывает себя в head
Начинает выполняться прописанный в head скрипт
$(function() { ... }); — JQuery видит, что DOMContentLoaded уже наступил, и потому выполняет этот код сразу же
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
А вот даже не знаю.

Возможно ли, что это время тратится на загрузку jQuery?
...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

І. G.

Offtop
Цитата: Тайльнемер от декабря 27, 2013, 13:19
Благодаря І. G., тема теперь в двух темах:
НГ/Вопросы по ӂаваскрипту́
Вообще, вот на таких ответах в разных местах когда-то и основывалась идея агрегатора. Т.е. каждый отвечает на тему там, где ему удобно (правда, предполагалось, что не в разделах одного форума, а в своих блогах; — но можно и так, как сейчас), а агрегатор потом собирает такие ответы на одной странице.

Правда, у меня так и не дошли руки.
...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

Тайльнемер

Цитата: І. G. от декабря 27, 2013, 13:47
Цитата: Тайльнемер от декабря 27, 2013, 13:14
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
А вот даже не знаю.
Возможно ли, что это время тратится на загрузку jQuery?
Нет. До $(function() { ... }) jQuery уже работает.

В общем, я не стал вникать и убрал $(function() { ... }).
Работать не перестало.
Стало ли быстрей — я чё-то не понял.

I. G.

Ну можно я буду интересоваться более близкими моему сердцу вещами?
...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

Тайльнемер

Чистым си? Ассемблером?
Или на чём там кодют суровые уральские мужики?

I. G.

...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

І. G.

Цитата: Тайльнемер от декабря 27, 2013, 13:14
Но тогда непонятно, почему это «сразу же» занимает 300—400 мс?
Я по-прежнему интересуюсь топором, но мне сказали, что это фича: http://bugs.jquery.com/ticket/6781 (если на странице есть другие не-jQuery скрипты, то jQuery пытается убедиться, что они уже загрузились, и только потом запускает обработчики события ready).

Цитата: Тайльнемер от декабря 28, 2013, 10:44
Чистым си?
Кстати, Деме его любит.
...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

Tайльнемер

Цитата: I. G. от декабря 28, 2013, 10:42
Ну можно я буду интересоваться более близкими моему сердцу вещами?
Да, конечно. Обещаю, что маска-I. G. больше про программирование ни слова. :dayatakoy:

Тайльнемер


Tайльнемер

Цитата: Тайльнемер от декабря 31, 2013, 13:21
Насчёт τ у меня был такой вариант:


«Тау Кита»
:=

Правда, Лингвофорум почему-то её сделал не очень красивой.

Рython

Џаваскрипт ненужен.

del languages['JavaScript']

Превосходная работа, self.

Цитата: Tайльнемер от декабря 31, 2013, 13:32
Правда, Лингвофорум почему-то её сделал не очень красивой.
Ты же знаешь, что у него вместо PNG.rescale не по нят но что.

І. G.

Я бы прокомментировала мир без JavaScript'а, но я не интересуюсь программированием. :(
...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

Sneguro4ko

Все будут заказаны. :)

Быстрый ответ

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр