找回密码
 立即注册

QQ登录

只需一步,快速开始

[已处理] IE8兼容问题

ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-17 11:50:00
11#
如此经验分享,必须赞一个
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-12-17 13:51:00
12#
回复 11楼dof的帖子

请问9楼给出的问题,解决了吗?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-17 17:46:00
13#
回复 12楼study1990的帖子

应该是在Spread还没有加载完成时访问了Spread对象,可以判断readyState来控制代码流程:
  1. <script language="javascript" type="text/javascript">
  2.     $(document).ready(function () {
  3.         //设定编辑框焦点
  4.         var ss = FpSpread("ReportTemplate");
  5.         if (document.all) {
  6.             var browser = navigator.appName;
  7.             var b_version = navigator.appVersion;
  8.             var version = b_version.split(";");
  9.             var trim_Version = version[1].replace(/[ ]/g, ""); //MSIE8.0; MSIE9.0
  10.             if (browser == "Microsoft Internet Explorer" &amp;&amp; trim_Version.substr(4) >= 9) {

  11.                 if (ss.SetActiveCell)
  12.                     ss.SetActiveCell(0, 0);
  13.                 if (ss.SetSelectedRange)
  14.                     ss.SetSelectedRange(0, 0, 1, 1);
  15.             }
  16.             else if (browser == "Microsoft Internet Explorer" &amp;&amp; trim_Version.substr(4) <= 8) {
  17.                 SetAC();
  18.                 //                if (ss.SetActiveCell() != null &amp;&amp; ss.SetActiveCell() != undefined)
  19.                 //                    ss.SetActiveCell(0, 0);
  20.                 //                if (ss.SetSelectedRange() != null &amp;&amp; ss.SetSelectedRange() != undefined)
  21.                 //                    ss.SetSelectedRange(0, 0, 1, 1);
  22.                 //                ss.Update();
  23.             }
  24.         }
  25.         else {
  26.             ss.SetActiveCell(0, 0);
  27.             ss.SetSelectedRange(0, 0, 1, 1);
  28.         }
  29.     });

  30.     function SetAC() {
  31.         var spread = FpSpread("ReportTemplate");
  32.         if (spread.readyState == "loading") {
  33.             setTimeout(SetAC, 500);
  34.         } else {
  35.             if (spread.SetActiveCell() != null &amp;&amp; spread.SetActiveCell() != undefined)
  36.                 spread.SetActiveCell(0, 0);
  37.             if (spread.SetSelectedRange() != null &amp;&amp; sspreads.SetSelectedRange() != undefined)
  38.                 spread.SetSelectedRange(0, 0, 1, 1);
  39.             spread.Update();
  40.         }
  41.     }
  42. </script>
复制代码
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-12-18 10:35:00
14#
回复 13楼dof的帖子

测试时仍提示那个错误,不过关闭错误提示后活动单元格可以设置成功
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-18 20:41:00
15#
回复 14楼study1990的帖子

我在 Win7 + IE9 中测试了附件的代码,并没有出现错误提示,你看附件代码在你的环境中是否可以正常运行,还是在你的实际项目中会出问题:


MvcApplication1.zip (284.24 KB, 下载次数: 395)
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-12-20 10:00:00
16#
回复 15楼dof的帖子

IE9模式下活动单元格没有设置成功,该怎么修改
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-20 10:29:00
17#
回复 16楼study1990的帖子

我看你JS代码中会先判断一下 if (ss.SetActiveCell),然后设置ss.SetActiveCell(0, 0);,其实直接设置活动单元格就可以了,不知先 if 一下有什么特殊的含义吗。
  1. <script language="javascript" type="text/javascript">
  2.     $(document).ready(function () {
  3.         //设定编辑框焦点
  4.         var ss = FpSpread("ReportTemplate");
  5.         if (document.all) {
  6.             var browser = navigator.appName;
  7.             var b_version = navigator.appVersion;
  8.             var version = b_version.split(";");
  9.             var trim_Version = version[1].replace(/[ ]/g, ""); //MSIE8.0; MSIE9.0
  10.             if (browser == "Microsoft Internet Explorer" &amp;&amp; trim_Version.substr(4) >= 9) {
  11.                 ss.SetActiveCell(0, 0);
  12.                 ss.SetSelectedRange(0, 0, 1, 1);
  13.             }
  14.             else if (browser == "Microsoft Internet Explorer" &amp;&amp; trim_Version.substr(4) <= 8) {
  15.                 SetAC();
  16.             }
  17.         }
  18.         else {
  19.             ss.SetActiveCell(0, 0);
  20.             ss.SetSelectedRange(0, 0, 1, 1);
  21.         }
  22.     });

  23.     function SetAC() {
  24.         var spread = FpSpread("ReportTemplate");
  25.         if (spread.readyState == "loading") {
  26.             setTimeout(SetAC, 50);
  27.         } else {
  28.                 spread.SetActiveCell(0, 0);
  29.                 spread.SetSelectedRange(0, 0, 1, 1);
  30.             spread.Update();
  31.         }
  32.     }
  33. </script>
复制代码
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-12-20 10:56:00
18#
回复 17楼dof的帖子

是为了判断此方法是否存在;现在都用SetAC()这个方法就可以了。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部