Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Веб-программирование > JavaScript / HTML

JavaScript / HTML Создание динамической разметки страниц

Ответ
 
Опции темы
Старый 30.05.2014, 18:13   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,095
Написано 675 полезных сообщений
(для 1,678 пользователей)
Выполнение кода JavaScript в безопасном окружении

Хочу выполнять в контексте страницы непроверенный JavaScript код, который должен реализовывать только логику в рамках некоего предоставленного API. То есть у кода не должно быть доступа к глобальному объекту (window), код не должен уметь выкидывать алерты, вызывать eval и т. п. Это вообще возможно хотя бы в последних браузерах, на крайняк в последнем хроме? Запилил вот такой тест: http://jsfiddle.net/7Ewx5/ вроде бы всё безопасно, но JavaScript - такой язык, что там неявно что-то может ссылаться на window, а я об этом даже не подозреваю.

P.S. Скорость работы, оптимизации памяти и прочее мне не важны, главное добиться безопасного окружения.
(Offline)
 
Ответить с цитированием
Старый 30.05.2014, 20:22   #2
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Выполнение кода JavaScript в безопасном окружении

Web Workers тебе в помощь - изолированный поток, и всё что тебе нужно (никакого доступа ко всяким window и т.п.).
Поддерживаемые бруозеры.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (30.05.2014)
Старый 30.05.2014, 20:31   #3
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,095
Написано 675 полезных сообщений
(для 1,678 пользователей)
Ответ: Выполнение кода JavaScript в безопасном окружении

Блин, читал же про них, совсем забыл. Я ещё частично в девяностых живу, не успеваю за новыми технологиями. =)
(Offline)
 
Ответить с цитированием
Старый 30.05.2014, 21:03   #4
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,095
Написано 675 полезных сообщений
(для 1,678 пользователей)
Ответ: Выполнение кода JavaScript в безопасном окружении

Впрочем внутри воркера мне всё равно придётся делать те же костыльные финты, чтобы закрыть доступ к функциям вроде setTimeout.
(Offline)
 
Ответить с цитированием
Старый 31.05.2014, 06:05   #5
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Выполнение кода JavaScript в безопасном окружении

Сообщение от Phantom Посмотреть сообщение
Впрочем внутри воркера мне всё равно придётся делать те же костыльные финты, чтобы закрыть доступ к функциям вроде setTimeout.
А почему ты не хочешь позволить использовать setTimeout?
(Offline)
 
Ответить с цитированием
Старый 31.05.2014, 12:46   #6
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,095
Написано 675 полезных сообщений
(для 1,678 пользователей)
Ответ: Выполнение кода JavaScript в безопасном окружении

Потому что планируется в этой песочнице выполнять полностью синхронный код. Хотя сам принцип действия воркеров асинхронен как я понял. Ещё непонятно, почему контексты воркера и функции запущенной через setTimeout отличаются:
onmessage=function(e){
        
        
console.log(this); // [object DedicatedWorkerGlobalScope]
        
for(var key in this){
            
console.log(key);
        }
        
        
setTimeout(function(){
            
console.log(this); // [object global]
            
for(var key in this){
                
console.log(key);
            }
        },
0);
        
    } 
Причём оба контекста, судя по их итерации, подобно window содержат список глобальных функций (setTimeout и прочие). Получается, воркер и порождённый им таймаут выполняются в двух различных глобальных контекстах?

Кстати, а как в node.js с воркерами? Я хотел бы код, совместимый с node.js в идеале.
(Offline)
 
Ответить с цитированием
Старый 31.05.2014, 16:02   #7
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Выполнение кода JavaScript в безопасном окружении

У тебя в onmessage, callback будет вызываться в контексте объекта на котором onmessage триггерит. А setTimeout глобально естественно.

Но этот глобальный контекст, локален самому воркеру.

Для node есть конечно, гугл выдаёт кучу результатов (не заставляй других гуглить): https://github.com/pgriess/node-webworker
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (31.05.2014)
Старый 31.05.2014, 22:47   #8
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,095
Написано 675 полезных сообщений
(для 1,678 пользователей)
Ответ: Выполнение кода JavaScript в безопасном окружении

Меня сбило с толку то, что я объявляю событие onmessage прямо внутри воркера в глобальной переменной. Я ожидал, что оно будет иметь глобальный контекст воркера (это ведь его событие), а там какой-то DedicatedWorkerGlobalScope. Как по мне, странно.

А есть какая-то переменная, ссылающаяся на this воркера? Или придётся сделать global=this; ? Не то, чтобы есть такая необходимость, просто хочется знать. В гугле не нашёл.
(Offline)
 
Ответить с цитированием
Старый 01.06.2014, 06:10   #9
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Выполнение кода JavaScript в безопасном окружении

Зачем тебе глобальный хэндл от воркера? И вообще зачем тебе глобальный контекст? Имхо, ты сам себя путаешь.

Web Worker выполняется как отдельный файл и общение с ним происходит путём сообщений. В том файле делай что хочешь.

Ссылаться на переменные в контекстах выше - никто не запрещает. Забей на глобальный контекст, это же JS, тут видимость контекстов "наследуется".
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (01.06.2014)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 20:33.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com