Выполнение кода JavaScript в безопасном окружении
Хочу выполнять в контексте страницы непроверенный JavaScript код, который должен реализовывать только логику в рамках некоего предоставленного API. То есть у кода не должно быть доступа к глобальному объекту (window), код не должен уметь выкидывать алерты, вызывать eval и т. п. Это вообще возможно хотя бы в последних браузерах, на крайняк в последнем хроме? Запилил вот такой тест: http://jsfiddle.net/7Ewx5/ вроде бы всё безопасно, но JavaScript - такой язык, что там неявно что-то может ссылаться на window, а я об этом даже не подозреваю.
P.S. Скорость работы, оптимизации памяти и прочее мне не важны, главное добиться безопасного окружения. |
Ответ: Выполнение кода JavaScript в безопасном окружении
Web Workers тебе в помощь - изолированный поток, и всё что тебе нужно (никакого доступа ко всяким window и т.п.).
Поддерживаемые бруозеры. |
Ответ: Выполнение кода JavaScript в безопасном окружении
Блин, читал же про них, совсем забыл. Я ещё частично в девяностых живу, не успеваю за новыми технологиями. =)
|
Ответ: Выполнение кода JavaScript в безопасном окружении
Впрочем внутри воркера мне всё равно придётся делать те же костыльные финты, чтобы закрыть доступ к функциям вроде setTimeout.
|
Ответ: Выполнение кода JavaScript в безопасном окружении
Цитата:
|
Ответ: Выполнение кода JavaScript в безопасном окружении
Потому что планируется в этой песочнице выполнять полностью синхронный код. Хотя сам принцип действия воркеров асинхронен как я понял. Ещё непонятно, почему контексты воркера и функции запущенной через setTimeout отличаются:
PHP код:
Кстати, а как в node.js с воркерами? Я хотел бы код, совместимый с node.js в идеале. |
Ответ: Выполнение кода JavaScript в безопасном окружении
У тебя в onmessage, callback будет вызываться в контексте объекта на котором onmessage триггерит. А setTimeout глобально естественно.
Но этот глобальный контекст, локален самому воркеру. Для node есть конечно, гугл выдаёт кучу результатов (не заставляй других гуглить): https://github.com/pgriess/node-webworker |
Ответ: Выполнение кода JavaScript в безопасном окружении
Меня сбило с толку то, что я объявляю событие onmessage прямо внутри воркера в глобальной переменной. Я ожидал, что оно будет иметь глобальный контекст воркера (это ведь его событие), а там какой-то DedicatedWorkerGlobalScope. Как по мне, странно.
А есть какая-то переменная, ссылающаяся на this воркера? Или придётся сделать global=this; ? Не то, чтобы есть такая необходимость, просто хочется знать. В гугле не нашёл. |
Ответ: Выполнение кода JavaScript в безопасном окружении
Зачем тебе глобальный хэндл от воркера? И вообще зачем тебе глобальный контекст? Имхо, ты сам себя путаешь.
Web Worker выполняется как отдельный файл и общение с ним происходит путём сообщений. В том файле делай что хочешь. Ссылаться на переменные в контекстах выше - никто не запрещает. Забей на глобальный контекст, это же JS, тут видимость контекстов "наследуется". |
Часовой пояс GMT +4, время: 14:59. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot