2012-06-06 3 views
1

Я создаю API для не-программистов для написания стороннего кода для виртуальной многопользовательской арены битвы. Синтаксис для использования глобалам было бы неплохо:Предоставление сторонним JavaScript доступа к глобальным переменным

function Step() { 
    if (sensor.wall) { 
     movement.brake(); 
     movement.turnLeft(); 
    } 
    if (sensor.enemy) { 
     movement.shoot() 
    } 
    if (movement.speed < 1) { 
     movement.accelerate(.1); 
    } 
} 

Globals в приведенном выше примере будет sensor и movement. Писателю-сценаристу не важно, откуда они, просто они доступны. (Нет, это не окончательный синтаксис. Просто прототипирование здесь.)

Скрипты будут выполняться как на клиенте (в браузере), так и на сервере (через Node или Spidermonkey).

Итак, как это сделать? Похоже, что мои варианты: (?, Но это плохо, верно)

  • Установите все Глобал лексический затем eval() сценарий
  • Установите все глобал в глобальном масштабе, а затем запустить скрипт нормально (но как насчет DOM глобалы, как window?)

Я мог бы обеспечить глобальный охват с помощью Google Caja. Мне также хотелось бы, чтобы это было исполнено, поскольку на одном и том же сервере будет выполняться множество функций Step().

+1

В вашем примере не совсем ясно, что должно быть «глобальным», а что нет. Также неясно, в каком контексте этот код должен запускаться на сервере? клиент? и то и другое? – Pointy

+0

Обновлено. Спасибо за указатели. –

ответ

0

Поскольку пользовательские сценарии принимаются в виде текста, и я не забочусь о уминаю доступ к document, window и т.д., (это частное приложение), eval() динга является лучшим вариантом.

function evaluateScript(movement, sensor, content) { 
    return eval(content); 
} 
Смежные вопросы