SharePoint 2007运行 Edit In DataSheet 时在IE 6下页面卡死的分析和处理方法
2011-07-06 22:17
537 查看
摘要
在IE6打开”EditInDatasheet”在sharepoint2007的list页面时,会造成页面卡死的情况,CPU这时的运行占到50%+以上,但是在IE8打开时没有问题。
原因分析
造成这个原因时,我们分析,在MasterPage页面,可能是我们写的Js造成的,但是,把所有的JS注释掉后,这个问题依然存在,己是把所有自己写的css注释掉后,这个问题没有了,然后就是一块代码一块代码的调试,终于找到造成这个问题的代码。如下:
分析原因,改成如下时就可以运行:
就是把定义长度、宽度和内边距的代码去掉,就可以运行了,分析可能是JS在计算Datasheet的宽度和长度时产生了自循环,造成卡死状态。
经查找是在sharePoint自带的core.js中的一段代码有计算datasheet的宽度和长度。
core.js位置:C:\ProgramFiles\CommonFiles\MicrosoftShared\webserverextensions\12\TEMPLATE\LAYOUTS\1033\core.js
js代码是:
这两行代码是取得长度和宽度的:
我们在这段代码里加上alert(“1”);时,发现这个1一直弹出来,而datasheet一直在改变,datasheet的长度和宽度一直在增长。原因找到了。
处理方式:
当datasheet达到IE的适合长度和宽度时,停止计算,从而停止这个方法的运行。
代码改为如下:
加上了判断是在IE6下时才运行此方法,把这个方法加在masterpage上,它会把core.js的方法给重载掉,再运行就没有问题了。
关键代码:
当宽度大于浏览器的宽度时,停止计算。
作者:springyang
出处:http://www.cnblogs.com/springyangwc/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
在IE6打开”EditInDatasheet”在sharepoint2007的list页面时,会造成页面卡死的情况,CPU这时的运行占到50%+以上,但是在IE8打开时没有问题。
原因分析
造成这个原因时,我们分析,在MasterPage页面,可能是我们写的Js造成的,但是,把所有的JS注释掉后,这个问题依然存在,己是把所有自己写的css注释掉后,这个问题没有了,然后就是一块代码一块代码的调试,终于找到造成这个问题的代码。如下:
1 | #main-content-block{ |
2 | margin:0auto; |
3 | padding:20px020px0; |
4 | width:100%; |
5 | text-align:left; |
6 | *height:65%; |
7 | vertical-align:top; |
8 | } |
1 | #main-content-block{ |
2 | margin:0auto; |
3 | text-align:left; |
4 | vertical-align:top; |
5 | } |
经查找是在sharePoint自带的core.js中的一段代码有计算datasheet的宽度和长度。
core.js位置:C:\ProgramFiles\CommonFiles\MicrosoftShared\webserverextensions\12\TEMPLATE\LAYOUTS\1033\core.js
js代码是:
01 | functionGCComputeSizing(GCObject) |
02 | { |
03 | if (TestGCObject(GCObject)) |
04 | { |
05 | varfBIDI=(document.documentElement.currentStyle.direction== "rtl" ); |
06 | varlGCWindowWidth=document.documentElement.scrollWidth; |
07 | varlGCWindowHeight=document.documentElement.scrollHeight; |
08 | varlGCObjectOffsetLeft=0; |
09 | varlGCObjectOffsetTop=0; |
10 | if (fBIDI) |
11 | { |
12 | lGCObjectOffsetLeft=-180; |
13 | lGCObjectOffsetTop=120; |
14 | } |
15 | else |
16 | { |
17 | lGCObjectOffsetLeft=32; |
18 | lGCObjectOffsetTop=-2; |
19 | } |
20 | varlGCObjectWalker=GCObject.parentElement; |
21 | while (lGCObjectWalker!=document.body) |
22 | { |
23 | lGCObjectOffsetLeft+=lGCObjectWalker.offsetLeft; |
24 | lGCObjectOffsetTop+=lGCObjectWalker.offsetTop; |
25 | lGCObjectWalker=lGCObjectWalker.offsetParent; |
26 | if (fBIDI) |
27 | if (lGCObjectWalker.offsetLeft>0) |
28 | break ; |
29 | } |
30 | lGCObjectOffsetLeft+=GCObject.parentElement.offsetLeft; |
31 | lGCObjectOffsetTop+=GCObject.parentElement.offsetTop; |
32 | glGCObjectHeight=lGCWindowHeight-lGCObjectOffsetTop; |
33 | if (glGCObjectHeight>lGCWindowHeight) |
34 | glGCObjectHeight=lGCWindowHeight |
35 | if (glGCObjectHeight<cGCMinimumHeight) |
36 | glGCObjectHeight=cGCMinimumHeight; |
37 | if (fBIDI) |
38 | { |
39 | glGCObjectWidth=lGCWindowWidth+lGCObjectOffsetLeft; |
40 | } |
41 | else |
42 | glGCObjectWidth=lGCWindowWidth-lGCObjectOffsetLeft; |
43 | if (glGCObjectWidth>lGCWindowWidth) |
44 | glGCObjectWidth=lGCWindowWidth; |
45 | if (glGCObjectWidth<cGCMinimumWidth) |
46 | glGCObjectWidth=cGCMinimumWidth; |
47 | } |
48 | } |
1 | varlGCWindowWidth=document.documentElement.scrollWidth; |
2 |
3 | varlGCWindowHeight=document.documentElement.scrollHeight; |
处理方式:
当datasheet达到IE的适合长度和宽度时,停止计算,从而停止这个方法的运行。
代码改为如下:
01 | if ($.browser.msie&&$.browser.version== "6.0" ){ |
02 |
03 | functionGCComputeSizing(GCObject) |
04 | { |
05 | alert( "newone" ); |
06 | if (TestGCObject(GCObject)) |
07 | { |
08 | varfBIDI=(document.documentElement.currentStyle.direction== "rtl" ); |
09 | varlGCWindowWidth=document.documentElement.scrollWidth>document.documentElement.clientWidth?document.documentElement.clientWidth:document.documentElement.scrollWidth; |
10 | varlGCWindowHeight=(document.documentElement.scrollHeight>document.documentElement.clientHeight)?document.documentElement.clientHeight:document.documentElement.scrollHeight; |
11 | varlGCObjectOffsetLeft=0; |
12 | varlGCObjectOffsetTop=0; |
13 | if (fBIDI) |
14 | { |
15 | lGCObjectOffsetLeft=-180; |
16 | lGCObjectOffsetTop=120; |
17 | } |
18 | else |
19 | { |
20 | lGCObjectOffsetLeft=32; |
21 | lGCObjectOffsetTop=-2; |
22 | } |
23 | varlGCObjectWalker=GCObject.parentElement; |
24 | while (lGCObjectWalker!=document.body) |
25 | { |
26 | lGCObjectOffsetLeft+=lGCObjectWalker.offsetLeft; |
27 | lGCObjectOffsetTop+=lGCObjectWalker.offsetTop; |
28 | lGCObjectWalker=lGCObjectWalker.offsetParent; |
29 | if (fBIDI) |
30 | if (lGCObjectWalker.offsetLeft>0) |
31 | break ; |
32 | } |
33 | lGCObjectOffsetLeft+=GCObject.parentElement.offsetLeft; |
34 | lGCObjectOffsetTop+=GCObject.parentElement.offsetTop; |
35 | glGCObjectHeight=lGCWindowHeight-lGCObjectOffsetTop; |
36 | if (glGCObjectHeight>lGCWindowHeight) |
37 | glGCObjectHeight=lGCWindowHeight |
38 | if (glGCObjectHeight<cGCMinimumHeight) |
39 | glGCObjectHeight=cGCMinimumHeight; |
40 | if (fBIDI) |
41 | { |
42 | glGCObjectWidth=lGCWindowWidth+lGCObjectOffsetLeft; |
43 | } |
44 | else |
45 | glGCObjectWidth=lGCWindowWidth-lGCObjectOffsetLeft; |
46 | if (glGCObjectWidth>lGCWindowWidth) |
47 | glGCObjectWidth=lGCWindowWidth; |
48 | if (glGCObjectWidth<cGCMinimumWidth) |
49 | glGCObjectWidth=cGCMinimumWidth; |
50 | } |
51 | } |
52 | } |
关键代码:
1 | varlGCWindowWidth=document.documentElement.scrollWidth>document.documentElement.clientWidth?document.documentElement.clientWidth:document.documentElement.scrollWidth; |
2 | varlGCWindowHeight=(document.documentElement.scrollHeight>document.documentElement.clientHeight)?document.documentElement.clientHeight:document.documentElement.scrollHeight; |
作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章推荐
- SharePoint 2007运行 Edit In DataSheet 时在IE 6下页面卡死的分析和处理方法
- SharePoint 2007 Edit in Datasheet时遇到"The selected cells are read-only."问题
- sharepoint 2010 列表的数据表视图无法使用 the list cannot be displayed in datasheet view 解决方法
- 控制SharePoint站点菜单(eg:Actions-Edit+In+DataSheet)
- 控制SharePoint站点菜单(eg:Actions-Edit+In+DataSheet)
- 运行loadrunner,打不开IE问题处理方法
- ecshop Undefined variable: data in 的问题处理方法
- Unable to open "Edit in datasheet"
- 运行loadrunner,打不开IE问题处理方法
- Sharepoint 2007 用代码聚合所有子网站文章 (populating data sources in code)
- 在myeclipse中代码修改不起作用:当在myeclipse中修改处理方法的代码时,重新发布Tomcat,在运行时,jsp页面显示内容没变,还是按修改前的代码执行
- IE不能运行有JS代码的网页处理方法
- IE6789浏览器使用console.log类似的方法输出调试内容但又不影响页面正常运行
- C# B/S程序中出现“异常详细信息: System.Data.SqlClient.SqlException: 用户 'XXX/ASPNET' 登录失败。”的处理方法
- Tomcat运行Servlet,JSP页面请求转发报错解决方法
- View的post方法到底干了啥,深入分析Android异步消息处理机制
- 关于EasyUI对话框,表格和菜单组件在IE下的兼容性处理方法
- 【MyBatis源码分析】insert方法、update方法、delete方法处理流程(下篇)
- ie下双倍margin的处理方法