2016-09-01 17 views
0

我目前正在處理一個項目,該項目需要我以用戶鍵入的javascript形式運行字符串。如何在頁面上運行鍵入js

我試着添加一個空的<script>標籤的html和將字符串(含新類型(加載頁面後,用戶)的JavaScript)這個腳本標籤,但這不起作用。 (因爲腳本標籤內的代碼將在頁面加載後立即運行)。

所以我嘗試了不同的方法。我裹着像這樣的函數內的JS字符串:
function runCode() { userString }
這就是我現在追加到空腳本標籤字符串的樣子:
var code = "function runCode() { "+ userString +" }"

然而這仍然無法正常工作。代碼(userString)在腳本標籤顯示了根據Chrome瀏覽器開發工具,但試圖運行功能將造成以下錯誤:
Uncaught ReferenceError: runCode is not defined

是否有人知道這是如何工作?我做這件事的正確方法是什麼?

一些背景資料:

我工作的項目是使用JS繪製一個在線工具。這裏的目標是使用two.js庫並將其鏈接到修改的textarea。 (codemirror)單擊該按鈕將輸入代碼並使用它來修改屏幕另一半上的two.js畫布。

由於您不必自己設置所有的html,css和js文件,因此您可以將注意力集中在代碼上,這樣可以更容易地使用庫進行繪製。

Note:您可以通過任何有效的js鍵入textarea中的js,那麼警報或甚至jQuery線等簡單的東西都可以正常工作。

+0

執行用戶提供的腳本的方式是'eval(code)'。請注意,這將執行用戶提供的腳本。 –

+0

只需在服務器上使用字符串但echo'「函數runCode(){」+ userString +「}」'在腳本標記中使用'function runCode(){userString}'。 – jcubic

+0

還有一種方法可以用'new Function'來做到這一點。你可以用'eval' [here](http://stackoverflow.com/questions/4599857/are-eval-and-new-function-the-same-thing)找到不同之處 –

回答

4

使用eval()函數。然而請注意,這是一個巨大的安全漏洞。

+0

謝謝,我不知道該函數存在。我會盡快接受你的答案,網站讓我... –

0

您必須使用eval()。從onclick事件中提取用戶輸入並將其傳遞到eval中,如下所示:

eval(userString) 
+0

此外,性能的影響是非常大的。 – erols