javascript 中动态输出 javascrip 脚本在IE7以下版本中注意等标记符号
2008-09-04 09:06
363 查看
开发一个系统的过程中可能会碰到需要在浏览器端动态输出 javascript脚本的情况,前几天遇到一个怪事. 代码在IE7环境下 一切正常,一遇到IE6的浏览器就出错.找了很久才找到问题的根本原因,是动态输出的脚本中 包含有 "</script> "的脚本内容在IE6中被当成了 脚本结束的标记.
代码如下:
Code
for (var i = 0; i < E8MenuConfig.Items.length; i++)
{
if (E8MenuConfig.Items[i][1] == MenuId)
{
MenuUrl = E8MenuConfig.Items[i][3];
if(blnHasAdd == false)
{
strTemp += "<script>var blnSubShow = false;";
strTemp += "function HidPopup(){if(blnSubShow==false){if(parent.blnSubShow!=null) parent.blnSubShow=false;if(" + parentTreeNode + ".E8MenuConfig.WindowsList[" + deep + "]!=null)" + parentTreeNode + ".E8MenuConfig.WindowsList[" + deep + "].hide();}}";
strTemp += "</script>";
strTemp += "<body leftmargin=\"0\" topmargin=\"0\" scroll=\"no\" style=\"border:solid menu 0pxpx;\" onmouseover=\"clearTimeout(parent.popt);if(parent.blnSubShow!=null) parent.blnSubShow=true;\" onmouseout=\"parent.popt=setTimeout('HidPopup()',10);\" >\n";
strTemp += "<table width=\"100%\" height=\"100%\" style=\"border-collapse:collapse;\">\n";
}
blnHasAdd = true;
LineCount++;
if (E8MenuConfig.Items[i][2].length > MaxCharCount) MaxCharCount = E8MenuConfig.Items[i][2].length;
if (E8MenuConfig.Items[i][5]) //有下级菜单
{
strTemp += "<tr><td bgcolor=\"#C2D2E5\" style=\"border-top:#cccccc 1px solid;border-bottom:#666666 1px solid;border-left:#cccccc 1px solid;border-right:#666666 1px solid;mouse:hand; font-size:12px; color:#000000;text-align:left;vertical-align:center;CURSOR:hand\" onmouseover=\"this.bgColor='#dfdfdf';" + parentTreeNode + ".E8MenuConfig.ShowSubMenu('" + E8MenuConfig.Items[i][0] + "',this,''," + (deep+1) +"," + topL + ");\" onmouseout=\"this.blnSubShow=false;this.bgColor='#C2D2E5';\" height=\"20\" onclick=\"" + parentTreeNode + ".E8MenuConfig.GoToUrl('" + MenuUrl + "');\">" + E8MenuConfig.Items[i][2] + ">></td></tr>";
MaxCharCount += 2; //多了 两个 >符号
}
else
{
strTemp += "<tr><td bgcolor=\"#C2D2E5\" style=\"border-top:#cccccc 1px solid;border-bottom:#666666 1px solid;border-left:#cccccc 1px solid;border-right:#666666 1px solid;mouse:hand; font-size:12px; color:#000000;text-align:left;vertical-align:center;CURSOR:hand\" onmouseover=\"this.bgColor='#dfdfdf';\" onmouseout=\"this.blnSubShow=false;this.bgColor='#C2D2E5';\" height=\"20\" onclick=\"" + parentTreeNode + ".E8MenuConfig.GoToUrl('" + MenuUrl + "');\">" + E8MenuConfig.Items[i][2] + "</td></tr>";
}
}
}
if(blnHasAdd == true)
{
strTemp += "</table>\n";
strTemp += "</body>\n";
}
oPopup.document.body.innerHTML="";
if (strTemp.length > 0)
oPopup.document.write(strTemp);
由于此代码是在 浏览器端动态输出的,因此 在IE7以下版本中, 把这句代码 : strTemp += "</script>"; 中当作了脚本结束标记,产生错误.
解决方法为 ,把此代码 改为 strTemp += "</ " + "script>"; 即可
以后遇到动态输出脚本, 遇到标记语言,最好分开写.
代码如下:
Code
for (var i = 0; i < E8MenuConfig.Items.length; i++)
{
if (E8MenuConfig.Items[i][1] == MenuId)
{
MenuUrl = E8MenuConfig.Items[i][3];
if(blnHasAdd == false)
{
strTemp += "<script>var blnSubShow = false;";
strTemp += "function HidPopup(){if(blnSubShow==false){if(parent.blnSubShow!=null) parent.blnSubShow=false;if(" + parentTreeNode + ".E8MenuConfig.WindowsList[" + deep + "]!=null)" + parentTreeNode + ".E8MenuConfig.WindowsList[" + deep + "].hide();}}";
strTemp += "</script>";
strTemp += "<body leftmargin=\"0\" topmargin=\"0\" scroll=\"no\" style=\"border:solid menu 0pxpx;\" onmouseover=\"clearTimeout(parent.popt);if(parent.blnSubShow!=null) parent.blnSubShow=true;\" onmouseout=\"parent.popt=setTimeout('HidPopup()',10);\" >\n";
strTemp += "<table width=\"100%\" height=\"100%\" style=\"border-collapse:collapse;\">\n";
}
blnHasAdd = true;
LineCount++;
if (E8MenuConfig.Items[i][2].length > MaxCharCount) MaxCharCount = E8MenuConfig.Items[i][2].length;
if (E8MenuConfig.Items[i][5]) //有下级菜单
{
strTemp += "<tr><td bgcolor=\"#C2D2E5\" style=\"border-top:#cccccc 1px solid;border-bottom:#666666 1px solid;border-left:#cccccc 1px solid;border-right:#666666 1px solid;mouse:hand; font-size:12px; color:#000000;text-align:left;vertical-align:center;CURSOR:hand\" onmouseover=\"this.bgColor='#dfdfdf';" + parentTreeNode + ".E8MenuConfig.ShowSubMenu('" + E8MenuConfig.Items[i][0] + "',this,''," + (deep+1) +"," + topL + ");\" onmouseout=\"this.blnSubShow=false;this.bgColor='#C2D2E5';\" height=\"20\" onclick=\"" + parentTreeNode + ".E8MenuConfig.GoToUrl('" + MenuUrl + "');\">" + E8MenuConfig.Items[i][2] + ">></td></tr>";
MaxCharCount += 2; //多了 两个 >符号
}
else
{
strTemp += "<tr><td bgcolor=\"#C2D2E5\" style=\"border-top:#cccccc 1px solid;border-bottom:#666666 1px solid;border-left:#cccccc 1px solid;border-right:#666666 1px solid;mouse:hand; font-size:12px; color:#000000;text-align:left;vertical-align:center;CURSOR:hand\" onmouseover=\"this.bgColor='#dfdfdf';\" onmouseout=\"this.blnSubShow=false;this.bgColor='#C2D2E5';\" height=\"20\" onclick=\"" + parentTreeNode + ".E8MenuConfig.GoToUrl('" + MenuUrl + "');\">" + E8MenuConfig.Items[i][2] + "</td></tr>";
}
}
}
if(blnHasAdd == true)
{
strTemp += "</table>\n";
strTemp += "</body>\n";
}
oPopup.document.body.innerHTML="";
if (strTemp.length > 0)
oPopup.document.write(strTemp);
由于此代码是在 浏览器端动态输出的,因此 在IE7以下版本中, 把这句代码 : strTemp += "</script>"; 中当作了脚本结束标记,产生错误.
解决方法为 ,把此代码 改为 strTemp += "</ " + "script>"; 即可
以后遇到动态输出脚本, 遇到标记语言,最好分开写.
相关文章推荐
- 一个使用动态Javascript脚本绑定的注意事项
- 动态输出javascript脚本[ClientScriptManager类]
- 动态输出javascript脚本[ClientScriptManager类]
- 动态输出javascript脚本[转]
- 用 JSP 标记文件动态生成 JavaScript 代码
- 用javascript动态加载javascript脚本/css样式表
- 如何使用 Chrome 浏览器调试动态加载的 Javascript 脚本
- JavaScript乱弹之(五)使用脚本创建动态内容
- ie6 javascript:void(0)、IE7 input透明、IE8 jquery动态加载css
- tcpcopy分布式压力测试,效果堪比真实压力,远胜ab(注意采用的工具是tcpcopy 0.5以下的版本)
- ASP.NET CS文件中输出JavaScript脚本的3种方法以及区别
- 如何使用后台代码在head标记中动态生成javascript?
- Java学习之动态编译-动态脚本引擎-脚本引擎执行javascript代码
- 动态加载css样式表和javascript脚本
- ASP.NET CS文件中输出JavaScript脚本的3种方法以及区别
- HPU1389--梦想从A+B开始(输出,注意特殊符号的输出)
- javascript动态添加单元格的脚本代码
- javascriptinterface与java交互在android4.2以下版本的解决方案
- 解决IE7以下版本不支持无A状态伪类的几种方法
- 页面内容随滚动条滚动动态载入JavaScript脚本。