2014-03-05 63 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'在这里是一个更安全的选择。 –

相关问题