2014-03-05 95 views
0

我有一些JavaScript,從而產生其他JavaScript代碼,並把它放在一個字符串:如何在SRC屬性中使用動態生成的JavaScript?

var my_string = "alert('Hello World!');"; 

(這是我怎麼實際上得到包含JS代碼串毛oversimplicication,但不用說,通過一個過長的過程來描述,我結束了一個 - 這是我不能改變的東西)。

我想要做的是找出一種方法來使用該字符串中包含的Javascript我要寫入文檔頭的新SCRIPT標籤的SRC屬性。由於我無法解釋的原因,我無法將其內聯編寫。

我嘗試使用HTML5本地存儲要做到這一點,像這樣:

// Store 
localStorage.setItem('hello', my_string); 

// Access 
var s = document.createElement('script'); 
s.setAttribute("type","text/javascript"); 
s.setAttribute("src", "javascript:localStorage.getItem('hello')"); 
document.head.appendChild(s); 

但很顯然,它只是不這樣的。出於同樣的原因,不能使用IDBObjectStore。

我也研究過使用HTML5 FileSystem API,它可以完成我需要解決的問題,但這隻適用於Chrome。我需要我的代碼在Firefox中工作。

有什麼辦法可以達到這個目的嗎?

+0

雖然我寫了一個答案已經,我不當然如果我完全理解這個問題。爲什麼你認爲你需要一個'腳本'標籤? –

回答

1

src屬性必須引用加載並評估爲JavaScript的文件。如果你要評估一個字符串,如JavaScript,只要使用eval

eval("localStorage.getItem('hello')"); 

當然,你只能這樣做,如果輸入的是值得信賴的。否則,這是一個很大的安全漏洞。


如果你真的想用一個腳本標籤,你必須設置代碼元素的含量

var s = document.createElement('script'); 
s.text = "localStorage.getItem('hello')"; 
document.head.appendChild(s); 
+0

謝謝。在這種情況下.text和.innerHTML是否有區別?或者它本質上是做同樣的事情? – Joey

+0

我真的不確定。正常情況下,當你使用'.innerHTML'時,HTML解析器應該啓動,如果你的源代碼包含有效的HTML,這可能會導致問題。所以這就是爲什麼我認爲'.text'在這裏是一個更安全的選擇。 –

相關問題