2012-05-07 102 views
0

是否有可能,如果一个人有这样的JavaScript变量:JavaScript变量HTML页面“脚本标签”

var myVariable = "alert('BAM! It works!');" 

将其发送到具有在脚本标签,换句话说,一个HTML页面,看起来是这样的: <script id="theScriptTag"></script>

,并通过“发送”我的意思是要像这样的JavaScript文件:

getElementById("theScriptTag").innerHTML = myVariable; 

也许现在人们通常不这样做。如果还有另一种方法可以将HTML变量添加到HTML页面,请不要犹豫。我很难解释为什么我想这样做,只有我需要这样做。

在此先感谢!

编辑...

从所有我可以看到这个评论是一些严重的不良做法。让我给你在这里的概述和'更大的图片'...在同一个HTML页面上有一个表格和一个div。在用户填写完表单并提交之后,它立即到达服务器,并根据用户选择的变量生成“自定义JavaScript”。然后,这个自定义JavaScript将返回到客户端并执行。当它执行时创建/填充一个div元素,然后包含谷歌图表表格(因此需要获得生成的服务器端)。需要执行的JS是这样的:

var sendAttemptsChartTableData, sendAttemptsChartTable; 
google.load('visualization', '1', {packages:['table']}) 
google.setOnLoadCallback(drawTable); 
function drawTable() { 
sendAttemptsChartTableData = new google.visualization.DataTable(); 
sendAttemptsChartTableData.addColumn('string','smsGuid') 
sendAttemptsChartTableData.addColumn('string','attemptNo') 
sendAttemptsChartTableData.addColumn('string','response') 
sendAttemptsChartTableData.addColumn('string','error') 
sendAttemptsChartTableData.addRows(1) 
sendAttemptsChartTableData.setCell(0,0,'092A49AA-E2EF-46D3-A83E-0932B17B649A') 
sendAttemptsChartTableData.setCell(0,1,'1') 
sendAttemptsChartTableData.setCell(0,2,'<aatsms><submitresult action="enqueued"  key="2066317199" result="1" number="0833756610"/><submitresult action="enqueued" key="2066317200" result="1" number="0833756610"/><submitresult action="enqueued" key="2066317201" result="1" number="0833756610"/><submitresult action="enqueued" key="2066317202" result="1" number="0833756610"/></aatsms>') 
sendAttemptsChartTableData.setCell(0,3,'') 
sendAttemptsChartTable = new google.visualization.Table(document.getElementById('sendAttemptsTable')); 
var view = new google.visualization.DataView(sendAttemptsChartTableData); 
sendAttemptsChartTable.draw(view, {showRowNumber: true, allowHtml:false}); 
google.visualization.events.addListener(sendAttemptsChartTable, 'select', smsSearchHandler); 
} 
+0

为什么不只是创建所需的变量? – KBN

+3

这看起来很讨厌。相信我,你不想这样做。退一步,重新思考你想要做的事情。 “评估JS通常是一个糟糕的主意。 – Christoph

+0

绝对不是正确的解决方案。这是从'eval()'非常狭隘地删除。如果你能澄清你想要完成的事情,那么可能有一个非常简单的方法。 – bkconrad

回答

3

根据您的编辑,我了解您的表单sumbission会生成自定义脚本。类似JSONP的解决方案会起作用吗?基本上,您可以在当前文档中创建一个脚本标记,将其源指向处理表单并返回代码的服务器端脚本。

一个基本的例子:

function getScript(){ 
    /**process form, generate params**/ 
    var nwScript = document.createElement('script'); 
    nwScript.src = '/myscriptsrc/somescript.php?'+[generated parameters]; 
    document.body.appendChild(nwScript); 
} 
1

如果你的目标是执行字符串中包含的JavaScript代码,你可以使用以下命令:

var myVariable = "alert('BAM! It works!');"; 
eval(myVariable); 
+0

感谢提示奥利弗,这是非常正是我想要做的..看看编辑看到我究竟是什么想要完成。 – Tiwaz89

1

你所想这样做基本上是这样的:

var myVariable = "alert('BAM! It works!');"; 
eval(myVariable); 

eval需要你提供的字符串和“评估”的内容 - 它执行你的字符串中提供的JavaScript的东西。通常你想用用户的输入来做到这一点。

但是,这被认为是不好的习惯,因为:

  1. 它是缓慢
  2. 它是不安全的

通常你可以走另一条路,这样你就不需要使用eval 。在大多数情况下,这是更清洁,更快,更安全。

也许你可以告诉,你试图达到什么目标,然后我们可以找到更好的解决方案。

+0

嘿@Christoph,请查看我的编辑... – Tiwaz89

+0

@DeanGrobler嘿Dean,看看KooiInc的Answer,这应该是一个很好的解决方案。我会做类似的事情,所以我不会编辑我的答案,只是指出他的解决方案。 – Christoph