2013-12-10 34 views
2
myVariable = "<%=myVar%>" 
if (myVariable == "Y") doSomething; 
else doSoemthingElse; 

我正在修改代碼以在高級模式下編譯。使用JSP/ASP/PHP /等修改Javascript來注入變量是相當普遍的。 我能想到的處理這種情況的方法包括使用:關閉編譯器高級和服務器端注入Javascript

全局變量

myVariable = window["myVariable"]; 

EVAL

myVariable = eval('"<%=myVar%>"'); 

代替使用預/後處理腳本,

傳球一樣函數變量

function exposedFunction(myVariable){/* stuff */} 

或傳遞一個對象,並通過名稱

訪問屬性這將會是巨大的,如果有某種方式來標註變量作爲未知變量,即使它被定義爲一個字符串,或欺騙編譯成這麼想。

也許更好的方法是創建一個處理所有這些事情的嵌入式JavaScript的前/後處理腳本?

編輯: 它可能是單調乏味的搜索內聯變量,甚至更復雜<%>片段嵌入在內嵌腳本和HTML標籤中的onclick事件。

什麼是最好的推薦方法?
我希望能夠內聯<%= myVar的%>字符串,如果可能,從而使輸出變爲

if("<%=myVar%>"=="Y")doSomething;else doSoemthingElse 

但如果不可能,那會是建議創建一個預/後期製作工具,只是使用全局變量,使用函數,或只是將其視爲情境?

谷歌自己似乎注入內聯變量到他們的內聯JavaScript的一些地方。 也許他們有一個pre/post-build工具?

在選擇方法時,我應該考慮哪些主要考慮事項?我只能想到時間/精力投資。 這只是一個嘗試太難以優化的案例;我應該只提取< %%>的東西,並把它們放在全局變量?

+0

這裏似乎沒有直接的問題。另外,你遇到的問題並不明顯 - 你提供了幾種可能的技術的例子,但沒有提到他們爲什麼不適合你。 – jordancpaul

+0

我更新了一個編輯 – user120242

+0

注意:我會選擇一個自動化的預處理/後處理工具,它可以實現大部分所需的工作。它將有效地消除時間/努力投資。 – user120242

回答

0

如果直接在一個字符串<%...%>中使用,您不用擔心編譯器是否會考慮他們的常量:

「<%X%>」 ===「<%Y% >「

將在編譯時進行評估。類似地,「if('<%Foo%'')...」等價於「if(true)...」,所以通常直接使用替換是不明智的。

前處理的代碼,以使他們取代在對於編譯安全的方式所取代,似乎是合理的:

「」 +的eval(「‘<%X%>’」)+‘’

但是,如果你使用源地圖是非常棘手的。