2012-06-06 26 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); 
    } 
} 

全局將sensormovement。腳本作者不關心他們來自哪裏,只是他們可以訪問。 (不,這不是最後的語法,只是在這裏進行原型設計。)

腳本將在客戶端(瀏覽器)和服務器(通過Node或Spidermonkey)上運行。

那麼,該怎麼做?這似乎是我的選擇是:(?不過這是很糟糕,右)詞法然後eval()

  • 將所有的全局腳本
  • 將所有全局在全球範圍內,然後正常運行腳本(但什麼DOM全局​​變量,如window?)

我大概可以使用Google Caja來確保全局範圍。我也希望這是高性能的,因爲很多Step()函數將在同一臺服務器上每秒運行一次。

+1

在你的例子中,什麼應該是「全局」,什麼不是。目前還不清楚此代碼運行在什麼環境 - 服務器?客戶?都? – Pointy

+0

已更新。感謝指針。 –

回答

0

由於用戶腳本是作爲文本接收的,我不關心如何訪問documentwindow等(這是一個私有應用程序),因此ing是最好的選擇。

function evaluateScript(movement, sensor, content) { 
    return eval(content); 
}