Баг в действии JS

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
Приветствую всех.
Не знаю устранено это в текущей версии zennoposter или нет, работаю с 5.10.6 , но в действии "свой JavaScript код" приведенный ниже JS не работает.

Код:
return ((a) => {document.querySelectorAll('.md-cell>a.ng-binding').forEach((item) => {a.push(item.href)});return JSON.stringify(a)})([]);
А вот такой вариант работает

Код:
  var items, a = [];
  items = document.querySelectorAll('.md-cell>a.ng-binding');
  for (var i = 0, l = items.length ; i < l ; ++i) {
    a.push(items.item(i).href);
  }
  return JSON.stringify(a);
хотя казалось бы почему, ведь оба скрипта написаны верно и без проблем работают в обозревателе?

Насколько я понял действие свой JS код ломается если встречает замыкания или анонимные функции.
 

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
Что ни кто не встречался с таким ? Может кто-то из представителей разработчиков что-то прокомментирует?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 332
Благодарностей
5 873
Баллы
113
У нас не обрабатывается функция .forEach . Подумаем, что можно сделать с этим.
 

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
Ошибки нет просто не возвращается никаких значений, хотя ожидается json строка в переменной, назначенной для сохранения результата. Для проверки можно в приведенных мною скриптах заменить цсс селектор на 'a' и проверить на любой странице. результатом должен быть сериализованный массив со всеми ссылками на странице. Первый вариант отработает без ошибок, но результата в переменной не будет, второй вариант вернет ожидаемое значение.
 

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
И еще технический вопрос, нужно ли оборачивать JS код функцией чтобы защитить пространство имен на странице сайта например так

(() => {
var items, a = [];
items = document.querySelectorAll('.md-cell>a.ng-binding');
for (var i = 0, l = items.length ; i < l ; ++i) {
a.push(items.item(i).href);
}
return JSON.stringify(a);
})();

или JS уже выполняется в обёртке ?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 332
Благодарностей
5 873
Баллы
113
И еще технический вопрос, нужно ли оборачивать JS код функцией чтобы защитить пространство имен на странице сайта например так

(() => {
var items, a = [];
items = document.querySelectorAll('.md-cell>a.ng-binding');
for (var i = 0, l = items.length ; i < l ; ++i) {
a.push(items.item(i).href);
}
return JSON.stringify(a);
})();

или JS уже выполняется в обёртке ?
Да, страница может увидеть код, который выполняется. Так что если хочется спрятать код, надо анонимные функции делать

Ошибки нет просто не возвращается никаких значений, хотя ожидается json строка в переменной, назначенной для сохранения результата. Для проверки можно в приведенных мною скриптах заменить цсс селектор на 'a' и проверить на любой странице. результатом должен быть сериализованный массив со всеми ссылками на странице. Первый вариант отработает без ошибок, но результата в переменной не будет, второй вариант вернет ожидаемое значение.
Ошибка теперь будет выдаваться. В 5.12.2.0 внесли логирование таких ошибок.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)