`
wss71104307
  • 浏览: 222965 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

thickbox跨越frameset

阅读更多


     thickbox跨越iframe的问题很好解决,只需要在父页和iframe页都要载入 jquery.js thickbox.js thickbox.css(别忘记了父页面) 修改thickbox.js 函数function tb_init(domChunk) 找到tb_show(t,a,g);

这句修改为:

if (window.parent.frames[window.name] &&  
     (parent.document.getElementsByTagName('frameset').length <= 0))
{
     self.parent.tb_show(t,a,g);
}
else
{
    tb_show(t,a,g);
}


然而如果页面布局采用的是frameset这种方法就不适用了,原因是:

 

重点:你不能在<frameset></frameset>标签里使用<body></body>标签!但是,当你要给那些无法支持框架的
浏览器提示一些文字信息的话必须在<noframes>标签内使用<body> .

 很明显thickbox弹出的dialog是在body区域展示的,而通过self.parent获得frame的parent调用tb_show的是在body中实现的,所以这种解决方法对iframe(在body中)而对frameset没有用,所以thickbox无法跨frameset。



看起来thickbox好像怎么也无法跨越frameset,但是可以有一种巧妙的绕过方法。



就是把frameset的页面(记为A),重新用一个iframe把A放到另外一个页面B中,这样在frameset的子frame中,通过window.top直接获得最上层的即B页面的引用,在B页面中,body中展示的是A页面,故可以通过window.top得到B页面的window对象,然后调用tb_show方法就可以使得弹出的dialog影响使整个页面的背景。

window.top.tb_show(...);


例子:


其中1.html是以framset布局的

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="thickbox.js"></script>
<link rel="stylesheet" href="thickbox.css" type="text/css" media="screen" />
<title>frameset</title>
</head>
<FRAMESET rows="44,*" cols="*" frameborder="no" border="0" framespacing="0">
  <FRAME src="test2.html" name="tophead" scrolling="NO" noresize id="tophead" >
  <FRAMESET cols="180,*" frameborder="no" border="0" framespacing="0">
    <FRAME src="test2.html" name="left" scrolling="auto" noresize id="left">
    <FRAME src="2.html" name="right" id="right">
  </FRAMESET>
</FRAMESET>
<body>
</BODY>
</html>

text2.html 显示的是thickbox弹出的dialog中的内容

this is test2!
thickbox 弹出显示的内容
 

2.html中需要弹出一个thickbox的dialog

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="thickbox.js"></script>
<link rel="stylesheet" href="thickbox.css" type="text/css" media="screen" />
<title>无标题文档</title>
</head>
<script type="text/javascript">

<body>
<a href="test2.html?keepThis=true&TB_iframe=true&height=250&width=400" title="add a caption to title attribute / or leave blank" class="thickbox">test</a>  
</body>
 


需要把1.html用一个iframe放在新的页面index.jsp ,其中加入的JavaScript是为了使iframe自动调整高度。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="thickbox.js"></script>
<link rel="stylesheet" href="thickbox.css" type="text/css" media="screen" />
<script type="text/javascript">
</script>
<title>无标题文档</title>
</head>
<body>
<iframe id="frame_content" src="1.html" scrolling="no" frameborder="0"
 onload="this.height=100"></iframe>
<script type="text/javascript">
function reinitIframe(){
var iframe = document.getElementById("frame_content");
try{
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = Math.max(bHeight, dHeight);
iframe.height =  height;
}catch (ex){}
}
window.setInterval("reinitIframe()", 200);
</script>
</body>
</html>

  最后修改thickbox.js ;

   把 tb_show(t,a,g)改为: 你可以类似iframe解决方法自己加入一些判断条件


window.top.tb_show(t,a,g);
 


测试,可以看到2.html中弹出的dialog覆盖了整个html页面。


Oh,Yeah, Success!!!!


6
0
分享到:
评论
1 楼 javaDevil 2010-07-12  
引用
self.parent.tb_show(t,a,g); 

这个有问题,如果是这样的话,弹出层就无法获取iframe内的内容了,当为inline模式时

相关推荐

    jquery thickbox遮罩frameset框架的解决办法(请仔细阅读描述)

    解决thickbox在frameset框架下只能遮罩子页面的问题。 asp.net项目 直接浏览index.html 最后在父页面和遮罩层里的文本框中输入值后点登录可以得到这几个文本框的值。 将thickbox.js里的tb_init(domChunk)函数替换为...

    thickbox

    "Thickbox"是一款流行的JavaScript库,用于创建全屏弹出式图像和产品展示效果。在网页设计中,它提供了一种优雅的方式,使用户能够查看大图或多媒体内容,而无需离开当前页面。这个库特别适合电子商务网站,因为它们...

    thickbox插件

    6. **脚本功能**:thickbox.js和thickbox-compressed.js是Thickbox的JavaScript文件,其中包含了插件的主要逻辑和功能。thickbox-compressed.js是压缩版本,用于减小文件大小,加快页面加载速度。 7. **易用性**:...

    thickbox3.1.zip

    这个"thickbox3.1.zip"文件包含了Thickbox的3.1版本,它在网页设计和开发中被广泛使用,为用户提供了一种优雅的方式来展示多媒体内容,而不会让他们离开当前页面。 Thickbox的核心功能包括: 1. **图片预览**:...

    thickbox插件(jquery.js-thickbox.js-thickbox.css)含三个文件

    ThickBox是一款基于jQuery的轻量级弹出插件,主要包含三个核心文件:`jquery.js`、`thickbox.js`和`thickbox.css`。这些文件协同工作,为网页提供了一种优雅的方式,以全屏或者半透明背景的形式展示图片、内嵌框架、...

    ThickBox 3_1

    ThickBox 3_1 是一个经典的JavaScript库,主要用于实现网页中的轻量级弹出框效果。这个库在2006年首次发布,由jQuery支持,为用户提供了一种优雅的方式来展示图片、多媒体内容和整个网页,而无需离开当前页面。它的...

    juery thickbox3例子

    标题中的“jQuery Thickbox3”是指一个基于jQuery的弹出窗口插件,Thickbox的第三个主要版本。这个插件允许网页开发者创建全屏、透明背景的弹出窗口,通常用于展示图片、视频、IFrame内容或者任何HTML内容。Thickbox...

    thickbox的具体使用方法

    在本篇文章中,我们将深入探讨Thickbox的使用方法,并通过实例来进一步理解其工作原理。 首先,我们需要在项目中引入Thickbox的CSS和JavaScript文件。Thickbox通常会提供一个压缩包,包含以下文件: - thickbox.css...

    jquery插件thickbox的使用方法

    ### jQuery插件ThickBox的使用详解 #### 引言 ThickBox是基于jQuery库的一个强大而灵活的模态对话框插件,它能够帮助开发者轻松地在网页上创建弹出窗口,显示图片、HTML内容或外部网页。本文将详细介绍如何在项目...

    ThickBox3.1弹出层

    ThickBox3.1是一款经典的JavaScript和CSS库,用于创建优雅的、响应式的弹出窗口效果。这个库在网页设计和开发中广泛使用,能够实现图片预览、iframe嵌入、多媒体播放等多种功能,为用户提供一种轻量级的增强用户体验...

    jQuery_thickbox3.1

    **jQuery_thickbox3.1** 是一个基于流行的JavaScript库jQuery构建的插件,用于创建弹出式的轻量级对话框。这个插件允许用户在当前网页上展示图像、HTML div元素,甚至远程页面,无需离开当前浏览环境,极大地提升了...

    thickbox实例

    Thickbox是一款流行的JavaScript插件,它允许在网页上创建弹出式的图片、iframe和多媒体内容,无需离开当前页面。这个“thickbox实例”压缩包文件包含的是Thickbox 2.0版本的一些示例代码,对于学习如何在网站上实现...

    Thickbox 3.1插件包

    Thickbox 3.1是一款流行且功能丰富的JavaScript和CSS插件,用于创建弹出式图像、媒体和页面。这个插件包包含了实现这一功能所需的所有核心组件,包括JavaScript文件和CSS样式表,以及可能的注释和参考资料,使得...

    thickbox 简单实例

    这个"thickbox简单实例"的压缩包文件包含了使用Thickbox的基础知识,包括样式设置、配置选项以及如何加载图片。 首先,我们要理解Thickbox的核心概念。Thickbox利用jQuery的强大功能,通过简单的JavaScript代码就能...

    ThickBox 3.1调用方法+实例演示.zip

    这个“ThickBox 3.1调用方法+实例演示.zip”文件似乎包含了关于如何使用ThickBox 3.1版本的详细教程和示例,这对于开发者来说是一个宝贵的资源。 ThickBox 3.1的关键知识点包括: 1. **安装与引入**:首先,你需要...

    thickbox3.1实例

    Thickbox是一个基于jQuery的轻量级弹出窗口插件,由Cody Lindley精心设计和开发。这个插件允许用户在当前页面上创建全屏的、浮动的、可自定义的对话框,用于显示图像、HTML内容、IFrame或者嵌入的Flash对象。在...

    thickbox用法说明以及一些例子

    以下是对Thickbox用法的详细说明及示例。 **一、Thickbox的基本用法** 1. **引入库文件** 首先,你需要在你的HTML页面中引入Thickbox的相关文件。这通常包括CSS样式表和JavaScript脚本。例如: ```html ...

    thickbox demo

    在"thickbox"这个压缩包中,很可能是包含了Thickbox的所有源代码、样例、CSS样式表以及必要的图像资源。 首先,我们来详细了解一下jQuery。jQuery是一个高效、易用的JavaScript库,它极大地简化了JavaScript的DOM...

    thickbox & jquery

    标题 "thickbox & jquery" 指涉的是一个结合了 jQuery 库和 Thickbox 插件的技术主题,主要用于创建优雅、弹出式的图片浏览体验。让我们深入了解一下这两个组件及其在网页开发中的应用。 jQuery 是一个广泛使用的 ...

    Jquery thickbox回传值实例

    在实际应用中,我们经常需要在Thickbox窗口中进行一些操作,比如上传文件,然后将结果(例如文件路径)返回到主页面以便进一步处理。本实例将详细讲解如何实现jQuery Thickbox的回传值功能。 首先,我们需要了解...

Global site tag (gtag.js) - Google Analytics