如何執行一些字符串JavaScript?執行存儲爲字符串的JavaScript代碼
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
如何執行一些字符串JavaScript?執行存儲爲字符串的JavaScript代碼
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
eval
function將評估傳遞給它的字符串。
但是使用eval
can be dangerous,所以慎用。
編輯: annakata好點 - 不僅是eval
危險,它是慢。這是因爲要評估的代碼必須在現場解析,因此需要一些計算資源。
使用eval()。
W3 Schools tour of eval。網站有一些有用的eval例子。 The Mozilla documentation covers this in detail.
您可能需要get a lot of warnings以安全地使用它。 不允許用戶將任何東西注入eval(),因爲這是一個巨大的安全問題。
您還想知道eval()有不同的scope。
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
eval應該這樣做。
eval(s);
eval(s);
但這可能是危險的,如果你是從用戶獲取數據,但我想,如果他們崩潰自己的瀏覽器那是他們的問題。
eval(s);
請記住,該eval是非常強大和相當不安全。你最好確信你正在執行的腳本是安全的,並且是用戶不可變的。
使用eval如下。應謹慎使用Eval,關於「eval is evil」的簡單搜索應引起一些注意。
function ExecuteJavascriptString()
{
var s = "alert('hello')";
eval(s);
}
試試這個:
var script = "<script type=\"text/javascript\"> content </script>";
//using jquery next
$('body').append(script);//incorporates and executes inmediatelly
個人而言,我沒有測試它,但似乎工作。
您可以使用函數執行它。例如:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
如果要執行特定的命令(即字符串)一個 具體時間 後 - CMD =你的代碼 - 間隔=延時運行
function ExecStr(cmd, InterVal) {
try {
setTimeout(function() {
var F = new Function(cmd);
return (F());
}, InterVal);
} catch (e) { }
}
//sample
ExecStr("alert(20)",500);
不知道這是欺騙或不:
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
經過這許多複雜和模糊的腳本:
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);
像什麼@Hossein Hajizadeh alerady說了一下,但更詳細:
還有就是eval()
替代。
函數setTimeout()
被設計爲在毫秒的時間間隔後執行某些操作,並且要執行的代碼恰好被格式化爲字符串。
它的工作是這樣的:
ExecuteJavascriptString(); //Just for running it
function ExecuteJavascriptString()
{
var s = "alert('hello')";
setTimeout(s, 1);
}
1
意味着它會等待1毫秒執行字符串之前。
它可能不是最正確的方法,但它的工作原理。
新功能和apply()協同工作,也
var a=new Function('alert(1);')
a.apply(null)
我回答類似的問題,並得到了另一種思路如何在不使用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加載相同的方式執行。
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!');");
超級危險的和緩慢的 - 你應該粗體,斜體,下劃線和H1是 – annakata 2009-06-02 13:00:25
我懷疑這是比任何頁面時,必須被解析以及上加載JavaScript其他地方慢。如果速度較慢,那是因爲它在不同的範圍內完成,這可能會強制爲該範圍創建資源。 – cgp 2009-06-02 13:16:53
如果你說`eval()`是危險的。有其他選擇嗎? – 2012-05-22 15:36:43