Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получить глобальный объект, не зная имени? (https://javascript.ru/forum/misc/58664-kak-poluchit-globalnyjj-obekt-ne-znaya-imeni.html)

FINoM 03.10.2015 17:18

Как получить глобальный объект, не зная имени?
 
Сабж. Раньше можно было сделать так:

var global = (function() {return this;})();


Но strict mode не позволяет больше так делать. Как теперь получить window, global или другой глобальный объект, не зная его имени?

nerv_ 03.10.2015 17:34

как вариант

'use strict';

var global = (function() {return this;})();
var global2 = new Function('return this')();

console.log(global);
console.log(global2);

FINoM 03.10.2015 17:39

nerv_, спасиб.

join 04.10.2015 06:20

Есть ссылки на глобальный объект: self, top, parent;

example:
var global3 = (function() {return self;} ());

FINoM 04.10.2015 13:23

Цитата:

Сообщение от join
Есть ссылки на глобальный объект: self, top, parent;

Они могут быть переопределены.

Octane 04.10.2015 19:50

Цитата:

Сообщение от nerv_
var global2 = new Function('return this')();
Цитата:

Сообщение от FINoM
nerv_, спасиб.


А так CSP не позволяет делать :(

FINoM 04.10.2015 20:00

Цитата:

Сообщение от Octane
А так CSP не позволяет делать

Можно подробнее?

Octane 04.10.2015 20:06

http://content-security-policy.com/
Пока в заголовке Content-Security-Policy не укажешь значение unsafe-eval, new Function будет блокироваться и выбрасывать исключение:
Цитата:

Uncaught EvalError: Refused to evaluate a string as JavaScript because \'unsafe-eval\' is not an allowed source of script in the following Content Security Policy directive: "script-src \'self\'"

FINoM 04.10.2015 20:27

Octane, фигово. Тогда мой вопрос всё еще актуален.

Octane 04.10.2015 20:37

https://github.com/zloirock/core-js/.../%24.global.js


Часовой пояс GMT +3, время: 23:12.