2012-05-07 135 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