BO报表系统嵌入Iframe在firefox下的错误修改
1. 需求概要
BO报表嵌入Iframe框架中,在IE下功能正常,firefox下功能错误。
主要原因,由于BO报表内嵌的frame元素较多,ie和firefox对读取iframe元素的js操作存在差异导致
解决方法,修改js的相关方法,以达到不同浏览器的兼容
2. 技术方案
2.1 具体说明
2.1.1 utils.js
2.1.1.1 文件路径
以businessobjects为项目目录
businessobjects\\enterprise115\\desktoplaunch\\InfoView\\utils\\utils.js
2.1.1.2 修改内容
原方法内容:
function findElementById(Id) {
var mywin = window;
while (mywin != mywin.parent && mywin.parent &&mywin.parent.document) {
mywin = mywin.parent;
}
var f = mywin.document.getElementById(Id);
if (f != null) return f;
for (var i = 0; i < mywin.length; i++) {
f = findElementHelper(mywin.frames[i], Id);
if (f != null) return f;
}
return null;
}
修改后的方法内容:
function findElementById(Id) {
var mywin = window;
var curwin = window;
curwin = mywin;
try {
while (mywin != mywin.parent
&& mywin.parent &&mywin.parent.document) {
mywin = mywin.parent;
curwin = mywin;
}
} catch (err) {
mywin = curwin;
}
var f = mywin.document.getElementById(Id);
if (f != null) return f;
for (var i = 0; i < mywin.length; i++) {
f = findElementHelper(mywin.frames[i], Id);
if (f != null) return f;
}
return null;
}
2.1.1.3 修改说明
由于没有嵌套iframe时,ie和firefox的逻辑都是正常的
嵌套后firefox中mywin != mywin.parent && mywin.parent&&
mywin.parent.document此语句运行时会出现异常,主要是上级对象的获取错误。
因此在JS中,在保持原逻辑的情况下,对出现的异常进行捕捉操作。
如果对象mywin.parent不存在时,直接获取mywin即可。
2.1.2 IVIntegration.js
2.1.2.1 文件路径
以businessobjects为项目目录
businessobjects\\enterprise115\\desktoplaunch\\viewers
\\cdz_adv\\scripts\\IVIntegration.js
2.1.2.2 修改内容
原方法内容:
function setDocTitle(strDocName){
var myframe=self;
while (myframe.parent && myframe!=myframe.parent){
myframe=myframe.parent;
var isAppsFrame=(myframe.thisIsAnAppsFrame
&&myframe.thisIsAnAppsFrame==”wishYouAreHere”)?true:false;
if (isAppsFrame) break;
var isTop=(myframe.thisIsTheIVTopFrame
&&myframe.thisIsTheIVTopFrame==”wishYouAreHere”)?true:false;
var fs=myframe.frames;
if (fs){
var header=fs[0];
if (header && header.setTitle){
header.setTitle(convStr(strDocName));
break;
}
}
if (isTop) break;
}
}
修改后的方法内容:
function setDocTitle(strDocName){
var myframe=self;
while (myframe.parent && myframe!=myframe.parent){
myframe=myframe.parent;
try {
var isAppsFrame=(myframe.thisIsAnAppsFrame
&&myframe.thisIsAnAppsFrame==”wishYouAreHere”)?true:false;
}catch(e){
var isAppsFrame = true;
}
if (isAppsFrame) break;
var isTop=(myframe.thisIsTheIVTopFrame
&&myframe.thisIsTheIVTopFrame==”wishYouAreHere”)?true:false;
var fs=myframe.frames;
if (fs){
var header=fs[0];
if (header && header.setTitle){
header.setTitle(convStr(strDocName));
break;
}
}
if (isTop) break;
}
}
2.1.2.3 修改说明
由于BO报表本身就是iframe结构,因此再嵌入iframe页面中,获取指定对象的操作就会变得复杂。
加之ie和firefox浏览器,在js中对iframe对象的获取方法需要有的兼容性,因此此方法的某些语句在firefox下便会发生错误。
发生错误的语句为,var isAppsFrame=(myframe.thisIsAnAppsFrame
&&myframe.thisIsAnAppsFrame==”wishYouAreHere”)?true:false。
还是保持不改变源程序逻辑基础上进行改进,将出现的异常进行捕捉。
如果获取这些frame对象出现异常时,定义var isAppsFrame=true即可。
建议继续学习:
- iframe大小自适应 (阅读:8805)
- iframe里src="about:blank"的问题。 (阅读:6846)
- 跨域请求的iframe解决方案(1) (阅读:5391)
- ie下iframe输入框焦点丢失解决方案 (阅读:4294)
- 三谈Iframe自适应高度 (阅读:3635)
- 使用document.domain和iframe实现站内AJAX跨域 (阅读:3312)
- Google+开发团队分享经验 (阅读:3307)
- 跨域请求的iframe解决方案(2) (阅读:3145)
- IFrame带来的Session问题 (阅读:2787)
- iframe自适应高度代码 (阅读:2801)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:zifeng 来源: 淘宝数据平台团队
- 标签: BO Iframe 报表
- 发布时间:2010-06-01 21:56:50
- [56] Oracle MTS模式下 进程地址与会话信
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 如何拿下简短的域名
- [54] 图书馆的世界纪录
- [52] android 开发入门
- [52] Go Reflect 性能
- [50] 读书笔记-壹百度:百度十年千倍的29条法则
- [49] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑