SiteWeaver6.8编辑器IE9-11白屏修复:UA解析与兼容头实战
简介针对动易 SiteWeaver6.8 后台编辑器在 IE9、IE10、IE11 下无法正常编辑的问题这份文档提供了完整的升级与修复方案。内容以手动修改方式为主线覆盖 Editor.asp、Admin_Article.asp、Admin_Index.asp 三个关键文件附具体代码替换与注释说明同时补充会员中心 User_Article.asp 的兼容性修复便于站长在处理后台和会员端编辑器时对照操作。资源为 1 个 doc 说明文件约 21KB文档结构清晰先讲覆盖备份再分步列出代码位置与新增语句并提醒修改后清除缓存排错思路比较完整。已有 934 人学习下载适合使用 SiteWeaver6.8 并受浏览器兼容问题困扰的站长、网站维护人员参考。1. SiteWeaver6.8后台编辑器在IE9-11下白屏问题不在编辑器本身维护SiteWeaver6.8这类老ASP站的人大概率都被后台编辑器在IE9、IE10、IE11下突然白屏坑过。编辑器工具栏加载不出来进不了源代码模式后台其他页面都正常唯独所有带编辑框的页面一律失效。反直觉的是问题根源不在编辑器本体而在编辑器初始化脚本对IE版本号的解析方式——IE9之后UA字符串变了老代码判断“这是不是IE”的逻辑直接断裂。这篇笔记把修复文件和原理一起讲清楚适合还在维护旧CMS的开发者、二次开发人员以及需要让老系统在新环境里继续跑的一线实施者。2. 为什么旧编辑器在IE9失效UA嗅探、事件模型与文档模式的三个断裂点2.1 BrowserInfo.MajorVer的正则陷阱从MSIE 8到MSIE 10/11打开Editor.asp前半段有一段浏览器环境解析脚本负责把当前浏览器的主版本号、次版本号解析进BrowserInfo对象后续编辑器初始化会拿着这个对象判断该启用哪些功能。原始写法是BrowserInfo.MajorVer navigator.appVersion.match(/MSIE (.)/)[1] ; BrowserInfo.MinorVer navigator.appVersion.match(/MSIE .\.(.)/)[1] ;这个正则在IE6/7/8时代没有问题它期待UA里出现“MSIE 7.0”“MSIE 8.0”这样的片段.匹配MSIE后面的一个数字作为主版本号。到了IE9、IE10UA字符串变成“Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)”“MSIE (.)”仍能匹配到数字但只匹配一位——IE9主版本是9是一位数到这里还没炸。真正出问题的是IE10和IE11IE11标准模式下UA里已经没有“MSIE”字样只剩“Trident/7.0”match()返回null[1]直接抛异常整个脚本中断编辑器初始化就停在了半路。// IE8 的 UA 片段 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1) // IE9 的 UA 片段 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) // IE11 标准模式的 UA 片段 Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0)提示IE9/10/11在不同文档模式下的UA并不相同。IE11在兼容性视图下会模拟IE8/9的UA“MSIE”又会出现这也是很多人“换个模式就能用”的原因。2.2 YUSERONCLICK的分支判断事件对象从哪来Editor.asp里还有一段绑定HTML编辑器控件事件响应的代码原始写法长这样并且在整个文件里出现了两处if (element.YUSERONCLICK) eval(element.YUSERONCLICK anonymous());这段代码的含义是如果DOM元素上有YUSERONCLICK属性就执行属性里存的函数名加上“anonymous()”。在IE8及更早版本里这种写法可以拿到一个全局匿名调用的上下文配合事件冒泡工作。但IE9开始事件模型变了直接执行“anonymous()”时事件对象event不再是可用状态编辑器里的点击、下拉菜单、插入图片这些交互全部失灵。改动后的写法if(navigator.appVersion.match(/MSIE (7|8|9|10|11|12)\./i)!null){ if (element.YUSERONCLICK) eval(element.YUSERONCLICK onclick(event)); }else{ if (element.YUSERONCLICK) eval(element.YUSERONCLICK anonymous()); }逻辑说明先用/MSIE (7|8|9|10|11|12)\./i判断当前UA是否带IE标识带的话走新分支把“onclick(event)”作为函数体执行event由调用上下文传递符合IE9-11的事件模型不带IE标识比如其他浏览器或IE11标准模式就走老的“anonymous()”路径。参数说明(7|8|9|10|11|12)覆盖IE7到IE12其中12是给未来版本留的余量正则末尾的\.匹配版本号后的小数点目的是排除“MSIE 1.x”这类无效片段。这个改动很小但要求两处同时改。YUSERONCLICK是编辑器控件暴露的私有接口文档从未公开开发者当年只是照着老代码复制粘贴所以官方迟迟没适配新版浏览器也可以理解。2.3 X-UA-Compatible与EmulateIE7用文档模式换回兼容现场除了脚本判断编辑器初始化还依赖页面的文档模式。IE9开始浏览器默认以标准模式渲染页面而SiteWeaver6.8后台页面是GB2312编码、HTML 4.01时代产物大量内联脚本和旧控件按IE6/7的渲染规则写死。要让编辑器控件顺利加载常见做法是通过meta标签把页面的文档模式强制切到IE7meta http-equivX-UA-Compatible contentIEEmulateIE7 /这个meta的含义是告诉IE内核用IE7的兼容模式解析当前页面包括CSS盒模型、脚本引擎、控件初始化逻辑。它放在charset声明之后、其他meta之前最有效。这个标签只影响IE内核Chrome和Firefox会忽略。提示后台的Admin_Article.asp和Admin_Index.asp是ASP服务端输出页面meta标签需要用Response.Write在服务端打印出来不是手写在HTML静态区。这就是手动修复时给ASP文件添加的是一行Response.Write而不是直接粘贴meta标签的原因。3. 覆盖安装三文件备份、替换与快速回滚3.1 文件清单与目录对应关系修复文件包里的内容比较精简核心就三个文件加一个目录结构Editor.asp放在网站根目录和后台入口同级Admin/Admin_Article.asp和Admin/Admin_Index.asp放在Admin目录下。覆盖前先对照目录常见做法是把整个包解压后按压缩包里的目录结构原样覆盖到网站根目录Windows下直接拖进去提示“替换”就选“全部”。需要确认文件名的对应关系。SiteWeaver6.8的不同补丁版本里Admin_Article.asp在不同模块下可能有变体比如后台启用多文章模型时可能叫Admin_Article_Product.asp、Admin_Article_News.asp之类。以浏览器实际调用的文件名为准在后台文章管理页右键查看源代码搜索editor或fckeditor看脚本引用的是哪个文件。文件路径作用修改内容Editor.asp编辑器前端脚本替换UA版本解析与YUSERONCLICK分支Admin/Admin_Article.asp后台文章编辑页新增X-UA-Compatible兼容头输出Admin/Admin_Index.asp后台首页新增X-UA-Compatible兼容头输出User/User_Article.asp会员中心文章录入页新增X-UA-Compatible静态meta前三项是处理后台第四项处理会员中心。如果站点只在后台做内容管理、会员中心不开放投稿第四项可以暂时不处理。3.2 备份与替换操作步骤覆盖前不要跳过备份。我一般会先做整站打包或者至少把Admin目录整体复制一份# 在服务器IIS站点的物理路径下执行Windows CMD cd D:\wwwroot\mysite mkdir D:\backup\sweaver_fix_20241009 xcopy Admin D:\backup\sweaver_fix_20241009\Admin /E /I /Y xcopy Editor.asp D:\backup\sweaver_fix_20241009\Editor.asp /Y参数说明/E复制子目录和空目录/I在目标不存在时自动建目录/Y覆盖同名文件不提示。如果服务器禁止命令行操作用FTP客户端下载这三个文件到本地也行但注意下载模式选“二进制”不要用“ASCII”模式避免换行符被转换导致ASP文件解析异常。备份目录名带日期以后排查时能快速定位。备份完成后把文件包里的Editor.asp、Admin文件夹原样覆盖过去。覆盖后第一件事不是马上去写文章而是重新登录后台进一次文章编辑页。若编辑器工具栏显示出来说明替换生效。如果还是白屏先别继续折腾回到备份目录把原文件还原按第4章的手动修改方式一步步来。3.3 覆盖后验证与回滚路径覆盖安装的实际风险在于文件包里的版本不一定和你线上运行的版本完全一致。SiteWeaver6.8发布多年有的站打过自定义补丁直接覆盖后后台可能出现功能差异。覆盖完除了验证编辑器还要顺手点一遍后台的栏目管理、附件管理、模板管理这几个高频入口确认脚本输出没有因为文件版本差异报缺函数或缺变量。验证清单按顺序过后台登录页是否正常文章编辑页编辑器工具栏是否完整渲染图片上传、插入表格、源代码模式三个按钮是否可用保存文章后列表展示是否正常任一环节异常回滚路径很简单把备份的三个文件原路径复制回去。但要注意如果覆盖包处理文件时把Admin目录里其他文件也带进去了就只能靠整站备份回滚。这也是为什么每次改动老系统之前先做整站打包而不是只备份个别文件——多花一分钟省掉一晚上的心理负担。3.4 覆盖包与手动修改的边界什么时候必须自己动手覆盖安装适合大多数场景前提是线上文件没经过深度定制。如果你在Editor.asp里加过自定义上传逻辑或Admin_Index.asp里改过后台布局直接覆盖会把定制内容冲掉。这时即使备份了也恢复不了定制逻辑只能改走手动修改路线——手动方式只动几行代码对现有配置的破坏面最小。判断标准很简单用对比工具Beyond Compare这类把线上的三个文件和修复包里的同名文件做一次二进制对比差异只在数十行以内说明是可覆盖的通用修复差异过大或者线上文件比修复包新就用手动方式。覆盖和手动修改的最终效果一致差异在操作粒度覆盖是全量替换手动是定点补丁。4. 手动修改Editor.asp、Admin与会员中心的精确落地4.1 Editor.asp第一处版本号解析代码的替换用记事本或代码编辑器打开根目录的Editor.asp搜索“BrowserInfo.MajorVer”定位脚本段。把旧两行注释掉或删除替换为新代码// 旧代码注释掉或删除 // BrowserInfo.MajorVer navigator.appVersion.match(/MSIE (.)/)[1] ; // BrowserInfo.MinorVer navigator.appVersion.match(/MSIE .\.(.)/)[1] ; // 新代码 var ua navigator.userAgent.toLowerCase(); BrowserInfo.MajorVer ua.match(/msie ([\d.])/)[1];逻辑说明第一行先把完整的userAgent转成小写存进变量避免后续多次取UA时大小写处理不一致第二行用/msie ([\d.])/匹配“msie 9.0”“msie 10.0”“msie 11.0”这样的片段[\d.]一次匹配多位版本号和小数点[1]取第一个捕获组作为主版本号。参数说明这段替换只接管了主版本号MinorVer次版本号的解析被略过。SiteWeaver编辑器的脚本里次版本号只在一两处做特性判断实测不赋值不影响编辑器加载。如果后续有其他脚本依赖MinorVer可以补一行BrowserInfo.MinorVer ua.match(/msie [\d.]\.([\d.])/)[1];但常规修复不需要。留意这段脚本放在script languagejavascript标签下是纯JS环境不要多加ASP标签。修改完用IE直接打开Editor.asp无法预览必须通过后台入口加载。4.2 Editor.asp第二处YUSERONCLICK的防御性分支搜索“YUSERONCLICK”定位编辑器控件的事件绑定点。原文强调这个代码在文件里出现两处都要改。把原代码if (element.YUSERONCLICK) eval(element.YUSERONCLICK anonymous());整体替换为if(navigator.appVersion.match(/MSIE (7|8|9|10|11|12)\./i)!null){ if (element.YUSERONCLICK) eval(element.YUSERONCLICK onclick(event)); }else{ if (element.YUSERONCLICK) eval(element.YUSERONCLICK anonymous()); }逻辑说明判断当前UA是否带“MSIE 7.”到“MSIE 12.”标识命中则走“onclick(event)”分支让事件对象显式传入函数体未命中走老逻辑。两处代码所在上下文不同但改动完全相同。执行完CtrlF搜索YUSERONCLICK确认剩余匹配为零才算改干净。常见误操作是改第一处时把第二处漏掉或者改完只验证了后台文章编辑没验证后台首页的编辑器入口。两处对应不同业务页面漏一处就会在某个入口继续白屏。4.3 Admin_Article.asp与Admin_Index.asp注入X-UA-Compatible这两个文件是ASP服务端页面修改方式和Editor.asp的纯JS环境不同。打开Admin/Admin_Article.asp找到Response.Write meta http-equivContent-Type contenttext/html; charsetgb2312 vbCrLf在这行下面新增一行Response.Write meta http-equivX-UA-Compatible contentIEEmulateIE7 vbCrLf逻辑说明这行ASP代码在服务端向页面输出meta标签强制IE内核以IE7兼容模式渲染当前页面。双引号写成是因为ASP字符串里双引号需要用两个双引号转义。Admin_Index.asp同样处理搜索同一行Response.Write在下面追加同样一行。两个文件独立忘改任何一个对应页面就继续白屏。4.4 User_Article.asp会员中心编辑器的同步修复会员中心的编辑器挂在User目录下对应User/User_Article.asp。它和后台页面不同meta是静态写在HTML里的。找到meta http-equivContent-Type contenttext/html; charsetgb2312 /在这行下面加一行meta http-equivX-UA-Compatible contentIEEmulateIE7 /注意User_Article.asp里的meta是直接写死的不需要Response.Write包装。加了这行后会员登录状态下进入文章发布页编辑器在IE10、IE11下就能正常加载。如果会员中心还涉及其他带编辑器的页面比如评论、留言管理用同样的方式在对应文件的charset meta下补一行即可。5. 避坑排查改完仍白屏的几个高频现场5.1 现象改完刷新后台编辑器还是空白原因浏览器缓存。IE对asp页面有时会缓存页面脚本旧版Editor.asp的JS已被浏览器存进内存关掉页面重开也不会重新拉取。很多情况下“修改不生效”不是改错了而是根本没加载到新文件。解决关闭所有IE窗口打开“Internet选项-常规-删除浏览历史记录”勾选临时文件和Cookie删除后重新打开后台。再做一次硬刷新按住Ctrl键点击刷新按钮或按CtrlF5。这条操作放在所有排查的第一步成本最低。5.2 现象后台文章编辑正常会员中心登录后还是白屏原因只改了后台的三个文件漏了User/User_Article.asp。编辑器在后台和会员中心是两套页面后台加载Admin目录下的脚本前台加载User目录下的脚本。后台的修复解决不了前台的问题。解决按第4.4节补上会员中心的meta同时确认会员中心引用的是同一个Editor.asp还是自己的编辑器脚本。如果会员中心用独立脚本参考4.1和4.2的方式把UA解析和YUSERONCLICK分支都改一遍。改完清缓存、重新登录会员中心验证。5.3 现象覆盖文件后后台登录页面布局乱了原因覆盖包里的Admin_Article.asp/Admin_Index.asp是修复版本但线上文件被改动过比如后台栏目结构、自定义工具栏配置都写在原文件里覆盖后这些配置丢失或与数据库不一致。解决立即回滚备份的三个文件改走手动修改路线。手动方式只添加几行代码对已有配置的破坏面可忽略。如果已经覆盖了一段时间、数据库里新增了内容回滚前先确认表结构没变。SiteWeaver的页面文件不存业务数据回滚文件不会丢数据只是界面恢复。5.4 现象用记事本改完ASP页面报错或顶部输出乱码原因记事本保存时把GB2312编码的ASP文件存成了UTF-8带BOMASP解释器读到BOM头会输出非法字符页面顶部多出一行“?”或空白行严重点的整个页面报500错误。解决记事本打开文件后通过“文件-另存为-编码”选择“ANSI”再覆盖原文件或者用支持编码选择的编辑器打开把编码设为“GB2312”再保存。用Windows 10/11自带记事本改老ASP文件时默认保存是UTF-8必须手动切ANSI。改完看文件大小正常文件比原文件大几十字节就有BOM嫌疑。5.5 现象IE下正常了Edge浏览器还是不能编辑原因Edge新版默认走Chromium内核不读X-UA-Compatible标签。SiteWeaver6.8的编辑器控件本就是为IE设计Chromium下无法通过简单meta修复完整功能。解决把Edge切换到IE模式。地址栏进入Edge设置在“默认浏览器”里找到“Internet Explorer兼容性”选择“允许在IE模式下重新加载网站”对后台地址手动开启IE模式。这个方案复用本文的修复成果不用额外改代码。如果站点长期要维护建议直接让编辑人员固定用IE模式访问后台把这个入口存成桌面快捷方式。6. 验证与进阶让旧编辑器在更多页面下稳定工作6.1 用F12开发者工具验证文档模式修复完成后打开IE开发者工具F12切到“仿真”选项卡查看“文档模式”字段。如果meta生效文档模式显示为“7默认”如果显示“Edge”或“11”说明meta没生效回到第4章检查meta是否落在charset之后。再验证UA字符串IE11标准模式下UA没有MSIE只有Trident/7.0。这时Editor.asp里的新正则匹配不到“msie”也没关系YUSERONCLICK分支走的是else的“anonymous()”文档模式是IE7编辑器也能正常工作。两条修复路径互相兜底不会因为一条失效导致全部瘫痪。6.2 进阶给更多管理页面补上兼容头后台如果还有其他带编辑框的页面例如自定义表单、投票管理、专题维护这些页面不在覆盖包范围内。打开对应ASP文件搜索charsetgb2312的meta输出行参照第4.3节在下面补一行Response.Write的X-UA-Compatible。站点如果启用了https注意meta标签里的内容不会影响SSL握手但IE模式下访问https页面时确认证书没有过期提示。IE兼容模式对证书错误处理比现代浏览器严格会直接拦截页面。我的习惯是每次修完站点把改动过的文件在本地保留一份备份目录命名为“_fixed_IE9_11”里面放原始文件、修改后文件、变更说明三样。从那以后每次接手旧CMS维护我先做这一步把涉及的文件备份好再动手改代码。多留一手出问题时就多一条路希望帮到你。本文还有配套的精品资源点击获取