myVariable = "<%=myVar%>"
if ( myVariable == "Y" ) doSomething;
else doSoemthingElse;
我正在修改代码以便在高级模式下编译。使用JSP / ASP / PHP / etc修改Javascript以注入变量是相当普遍的。 我能想到的解决这个问题的方法包括使用:
全局变量
myVariable = window["myVariable"];
EVAL
myVariable = eval('"<%=myVar%>"');
使用预处理/后处理脚本替换
作为函数变量传递
function exposedFunction(myVariable){/* stuff */}
或传递对象并按名称访问属性
如果有一些方法可以将变量注释为未知变量,即使它被定义为字符串,或者欺骗编译器这样做,也会很棒。
也许更好的方法是为嵌入式Javascript创建一个处理所有这些东西的前/后处理脚本?
编辑: 搜索内联变量甚至更复杂的&lt; %%&gt;可能会很繁琐。嵌入在内联脚本中的片段和html标记中的onclick事件。
最佳推荐方法是什么?
我希望能够内联&lt;%= myVar%&gt;字符串,如果可能的话,输出变为
if("<%=myVar%>"=="Y")doSomething;else doSoemthingElse
但是如果不可能的话,是否建议创建一个pre / post-build工具,只使用全局变量,使用函数,或者只是将其视为情境?
谷歌自己似乎将内联变量注入其内联Javascript的某些地方。 也许他们有一个前/后构建工具?在选择方法时,我应该考虑哪些主要考虑因素?我只能想到投入时间/精力。 这只是一个尝试太难以优化的情况;我应该提取&lt; %%&gt;事情并把它们放在全局变量中?
答案 0 :(得分:0)
如果直接在字符串&lt;%...%&gt;中使用,则必须担心编译器是否会将它们视为常量:
“&LT;%X%&gt;” 中===“&lt;%Y%&gt;”
将在编译时进行评估。类似地,“if('&lt;%Foo%&gt;')......”等同于“if(true)...”,因此通常直接使用它们是不明智的。
预处理代码以便以编译安全的方式替换它们,这似乎是合理的:
“”+ eval('“&lt;%X%&gt;”')+“”
但是如果使用源地图则很棘手。