2009-06-02 74 views

回答

53

eval function將評估傳遞給它的字符串。

但是使用eval can be dangerous,所以慎用。

編輯: annakata好點 - 不僅是eval危險,它是。這是因爲要評估的代碼必須在現場解析,因此需要一些計算資源。

+24

超級危險的和緩慢的 - 你應該粗體,斜體,下劃線和H1是 – annakata 2009-06-02 13:00:25

+4

我懷疑這是比任何頁面時,必須被解析以及上加載JavaScript其他地方慢。如果速度較慢,那是因爲它在不同的範圍內完成,這可能會強制爲該範圍創建資源。 – cgp 2009-06-02 13:16:53

+2

如果你說`eval()`是危險的。有其他選擇嗎? – 2012-05-22 15:36:43

15

使用eval()。

W3 Schools tour of eval。網站有一些有用的eval例子。 The Mozilla documentation covers this in detail.

您可能需要get a lot of warnings以安全地使用它。 不允許用戶將任何東西注入eval(),因爲這是一個巨大的安全問題。

您還想知道eval()有不同的scope

+10

http://www.w3fools.com/。對於eval,W3C甚至沒有什麼可說的。如果你想鏈接到官方的東西,目標http://ecma-international.org/ecma-262/5.1/#sec-15.1.2.1 – Bergi 2013-08-05 15:34:12

1

eval應該這樣做。

eval(s); 
2
eval(s); 

但這可能是危險的,如果你是從用戶獲取數據,但我想,如果他們崩潰自己的瀏覽器那是他們的問題。

0
eval(s); 

請記住,該eval是非常強大和相當不安全。你最好確信你正在執行的腳本是安全的,並且是用戶不可變的。

4

使用eval如下。應謹慎使用Eval,關於「eval is evil」的簡單搜索應引起一些注意。

function ExecuteJavascriptString() 
{ 
    var s = "alert('hello')"; 
    eval(s); 
} 
8

試試這個:

var script = "<script type=\"text/javascript\"> content </script>"; 
    //using jquery next 
    $('body').append(script);//incorporates and executes inmediatelly 

個人而言,我沒有測試它,但似乎工作。

88

您可以使用函數執行它。例如:

var theInstructions = "alert('Hello World'); var x = 100"; 

var F=new Function (theInstructions); 

return(F()); 
1

如果要執行特定的命令(即字符串)一個 具體時間 後 - CMD =你的代碼 - 間隔=延時運行

function ExecStr(cmd, InterVal) { 
    try { 
     setTimeout(function() { 
      var F = new Function(cmd); 
      return (F()); 
     }, InterVal); 
    } catch (e) { } 
} 
//sample 
ExecStr("alert(20)",500); 
1

不知道這是欺騙或不:

window.say = function(a) { alert(a); }; 

var a = "say('hello')"; 

var p = /^([^(]*)\('([^']*)'\).*$/;     // ["say('hello')","say","hello"] 

var fn = window[p.exec(a)[1]];      // get function reference by name 

if(typeof(fn) === "function") 
    fn.apply(null, [p.exec(a)[2]]);     // call it with params 
3

經過這許多複雜和模糊的腳本:

var js = "alert('Hello, World!');" // put your JS code here 
var oScript = document.createElement("script"); 
var oScriptText = document.createTextNode(js); 
oScript.appendChild(oScriptText); 
document.body.appendChild(oScript); 
3

像什麼@Hossein Hajizadeh alerady說了一下,但更詳細:

還有就是eval()替代。

函數setTimeout()被設計爲在毫秒的時間間隔後執行某些操作,並且要執行的代碼恰好被格式化爲字符串。

它的工作是這樣的:

ExecuteJavascriptString(); //Just for running it 
 

 
function ExecuteJavascriptString() 
 
{ 
 
    var s = "alert('hello')"; 
 
    setTimeout(s, 1); 
 
}

1意味着它會等待1毫秒執行字符串之前。

它可能不是最正確的方法,但它的工作原理。

0

新功能和apply()協同工作,也

var a=new Function('alert(1);') 
a.apply(null) 
0

我回答類似的問題,並得到了另一種思路如何在不使用eval()實現這一目標:

const source = "alert('test')"; 
const el = document.createElement("script"); 
el.src = URL.createObjectURL(new Blob([source], { type: 'text/javascript' })); 
document.head.appendChild(el); 

基本上在上面的代碼你創建包含腳本的Blob,以創建Object URL(在瀏覽器內存中表示File或Blob對象)。由於<script>標記上有src屬性,因此腳本將以與從任何其他URL加載相同的方式執行。

0
function executeScript(source) { 
    var script = document.createElement("script"); 
    script.onload = script.onerror = function(){ this.remove(); }; 
    script.src = "data:text/plain;base64," + btoa(source); 
    document.body.appendChild(script); 
} 

executeScript("alert('Hello, World!');"); 
相關問題