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