2010-08-08 47 views
2

我想的HTML代碼塊分配給一個js可變如何的HTML代碼塊分配給一個JavaScript變量(以調用JavaScript調用)

的HTML代碼是

<script>alert('test');</script> 

我想這樣做

var script = "<script>alert('test');</script>"; 

document.getElementById('test').innerHTML = script; 

,但它不工作

如果我代替標籤(或其它任何標籤)的F或標籤,那麼它的作品。

var script = "<span>alert('test');</span>"; 

我試圖

var script = "<script>alert('test');</script>"; 
eval(script); 

eval ("<span>alert('test');</span>"); 

,但他們都有語法錯誤。

它可能與有腳本標記做腳本標記

<script> <script> </script> </script> 

裏面有沒有辦法來解決這個問題?

TIA

回答

2

不能使用注入一個.innerHTML元素<script>並期望它來評價。您必須必須使用evaldocument.write或將<script>注入到DOM中的「正常」方式。使用動態腳本,建議使用eval

請記住,eval評估純粹的JavaScript並沒有使用HTML解釋器。 (PHP的默認行爲,其中eval就像插入?>$string<?php到文檔對比這一點。)

還記得,當它接近</script>一個腳本終止。將</script>插入JavaScript無論如何都是奇怪的(除非您使用的方法有document.write,這有很多問題,應該避免在大小不是極端問題的情況下)。

下面是使用eval的例子:

var script = 'alert("test");'; 
eval(script); 

如果要注入的腳本與其他元素的DOM,需要注入後到<script>元件中提取並執行(內部或外部)腳本。像jQuery和Prototype這樣的框架自動執行此操作,這是爲什麼推薦使用vanilla JavaScript的原因之一。

+0

謝謝strager。這似乎適用於我的目的。 – jamex 2010-08-09 00:45:44

2

用純DOM方法做到這一點我相信如下。

var script = document.createElement("script"); 
script.type = "text/javascript"; 
script.innerHTML = "alert('foo!')"; 
document.body.appendChild(script); 

適用於我™。

+0

在IE中不起作用。= [http://jsbin.com/ivigi4 – strager 2010-08-08 10:58:19

+0

謝謝肯特,我會測試一下。 – jamex 2010-08-09 00:46:33

+0

我想這是因爲IE有一個破損的DOM? – 2010-08-09 14:34:58

相關問題