源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

使用JQUERY Tabs插件宿主IFRAMES

  • 时间:2021-05-25 15:25 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:使用JQUERY Tabs插件宿主IFRAMES
必备的东西: Windows XP/Vista/7/2003/2008 Visual Studio 2005 or 2008 (download the correct version of Home Site project above) .NET Framework 2.0 and ASP.NET AJAX 1.0 今天,很多浏览器提供了使用tab的能力去浏览更多的网页和网站。当然这是一个非常有用的功能来替代同时打开几个浏览器,但如果提供在一个页面中浏览多个网页也非常的不错。 例如,如果你的主页是由很多不同的有用的Web工具或者站点组成,一个tab页面将可能非常的有用。使用框架集,IFRAME等等,都是宿主外部内容的典型方式。这些方法允许你在单个页面上宿主多个网页。 但是使他们能正确的布局却非常不容易。 更不用说去处理页面和IFRAME的scrollbars等问题。 这篇文章中,尝试去宿主外部数据,提供了一个基本的解决方案,利用ASP.NET,AJAX和javascript 去处理一些遇到的麻烦。 计划 主旨是提供一个简单的宿主外部数据的方案,这个解决方案有下面这些简单的需求。 1、提供一个tab界面,方便浏览。 2、提供一个配置方法来添加tab 3、使每个tab页都能宿主配置的页面 基本的技术需要是: 1、仅当tab被选中的时候,加载外部的数据内容 2、保证纵向的scrollbars的设置成显示,而且仅当需要处理的数据溢出的时候,才显示scrollbars 。 3、保证该解决方案是能跨浏览器工作 解决方案的名字和主页面的名字都是 Home Site 分析 对于这个解决方案,我决定使用JQuery UI Tabs 来实现表格式的导航功能。我以前也使用过商业的开源的tab控件。但是JQuery UI Tabs 是轻量级的,实现非常地简单,而且是免费的。 除了JQuery 和tab控件以及.net提供的功能,不需要其它的控件。 VS2005 将足以结合整个项目的开发环境,选择C#作为开发语言。 我将使用一个IFRAME的宿主网站内容,由于跨站点(又名跨域)的安全限制,使用JQuery UI Tabs去宿主外部网页将无法直接工作。 设计 这里有一个为客户提供视觉上的最低限度的需求: [img]http://files.jb51.net/upload/2010-1/20100101014421255.jpg[/img] 该解决方案,将需要三种不同的功能模块: 1、配置模块 2、使用JQuery UI Tabs 插件的tab界面 3、使用IFRAME元素宿主网页内容办法。 配置模块: 一个需求的功能是是使tab可配置。 我选择最低限度,将tab的配置信息放到一个xml文件之中。虽然我可以更进一步的深入,使tab能的动态增加和删除,我决定在本文的第二篇中提供此功能。 XML文件的格式如下: 代码
[url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]"> <head runat="server">     <title>Home Site</title>     <link href="css/jquery-ui-1.7.2.custom.css"           type="text/css" rel="stylesheet" />     <link href="css/Main.css"           type="text/css" rel="stylesheet" />     <script src="JavaScript/jquery-1.3.2.min.js"           type="text/javascript"></script>     <script src="Javascript/jquery-ui-1.7.2.custom.min.js"           type="text/javascript"></script>     <script src="Javascript/jquery.hijack.min.js"           type="text/javascript"></script>     <script type="text/javascript">         // JQuery scripting         $(document).ready(function()         {             var browser = navigator.appName;             var heightAdjust = 23;             var widthAdjust = 7;             // Make height and width offset adjusts for non-IE browsers             if (browser != "Microsoft Internet Explorer")             {                 heightAdjust = 18;                 widthAdjust = 9;             }             // Show the panelList UL element so we can setup the tabs             // Please note this approach eliminates Flash of Unstyled Content (FOUC)             $('#panelList').show();             // Setup the jQuery UI tabs             $('#tabPage').tabs({                 cache: true, // This ensures selecting a tab does not refresh the page                 load: function(event, ui)                 {                     // Keep links, form submissions, etc. contained within the tab                     $(ui.panel).hijack();                     // Adjust the IFRAME size correctly in the browser window                     $('.contentsIframe').width((ViewPortWidth() - widthAdjust));                     $('.contentsIframe').height((ViewPortHeight() -                        $('.menuRow').height() - $('.tabs').height() - heightAdjust));                 }             });             // Toggle arrow button image and hide/show menu area             $('#collapseArrow').click(function()             {                 if ($(this).hasClass('ui-icon-circle-triangle-s'))                 {                     $(this).removeClass('ui-icon-circle-triangle-s');                     $(this).addClass('ui-icon-circle-triangle-n');                     $('#menuDiv').show();                 }                 else                 {                     $(this).removeClass('ui-icon-circle-triangle-n');                     $(this).addClass('ui-icon-circle-triangle-s');                     $('#menuDiv').hide();                 }             // Adjust the IFRAME size correctly in the browser window             $('.contentsIframe').width((ViewPortWidth() - widthAdjust));             $('.contentsIframe').height((ViewPortHeight() -               $('.menuRow').height() - $('.tabs').height() - heightAdjust));         });         // Adjust tab header width and visible iframe window         // height and width after the window is resized         $(window).resize(function(){         $('.contentsIframe').width((ViewPortWidth() - widthAdjust));         $('.contentsIframe').height((ViewPortHeight() -           $('.menuRow').height() - $('.tabs').height() - heightAdjust));         $('.ui-widget-header').width(ViewPortWidth() - widthAdjust);         });         // Adjust tab header height and width according to the IE client viewing area         $('.ui-widget-header').width(ViewPortWidth() - widthAdjust);         // Adjust the IFRAME height correctly in the browser window         $('.contentsIframe').height((ViewPortHeight() -           $('.menuRow').height() - $('.tabs').height() - heightAdjust));         });         // Returns width of viewable area in the browser         function ViewPortWidth()         {             var width = 0;             if ((document.documentElement) &&                 (document.documentElement.clientWidth))             {                 width = document.documentElement.clientWidth;             }             else if ((document.body) && (document.body.clientWidth))             {                 width = document.body.clientWidth;             }             else if (window.innerWidth)             {                 width = window.innerWidth;             }             return width;         }         // Returns height of viewable area in the browser         function ViewPortHeight()         {             var height = 0;             if (window.innerHeight)             {                 height = window.innerHeight;             }                 else if ((document.documentElement) &&                          (document.documentElement.clientHeight))             {                 height = document.documentElement.clientHeight;             }             return height;         }     </script> </head> <body class="mainBody" style="margin:0">     <form id="form1" runat="server">         <asp:ScriptManager id="ScriptManager1" runat="server" />         <div>             <table id="mainTable" cellpadding="0" cellspacing="0">                 <tr class="menuRow">                     <td align="left" valign="top">                         <span id="collapseArrow"                            title="Show/Hide Header"                            class="menuSpan ui-icon ui-icon-circle-triangle-n"></span>                         <div id="menuDiv"                           class="menuDiv">This is the header area.                                   <br /><i>Please customize this area as you set                                   fit; i.e. add a logo, menu options, links,                                   etc.</i><br /><br /></div>                     </td>                 </tr>                 <tr>                     <td class="tabPageCell" colspan="2"                              valign="top" align="left">                         <div id="tabPage" class="contents">                             <ul id="panelList"                                 class="tabs" runat="server" />                         </div>                     </td>                 </tr>             </table>         </div>     </form> </body> </html>
     这些代码标记非常的繁琐,我用了很多内部的注释来解释他们。请注意出现在标头区的左上角的箭头按钮,其实就是来自我选择的JQuery的主题中的图像文件,使用ui-icon 和ui-icon-circle-triangle-n causes 设置collapseArrow span ,造成JQuery 显示一个名字为ui-icon-circle-triangle-n的ico的图像。在文档头部的脚本区中,我创建一个函数,当我们单击它的时候,改变向上箭头图标为向下箭头图标,此外,同样的单击事件处理程序将显示或隐藏标头部域的div(menuDiv)。 Home Site 页面的隐藏代码如下: 代码
[url=http://www.codeproject.com/]http://www.codeproject.com/[/url]非常的容易,这里重现描述的动作。 <script type="text/javascript" language="javascript">     if (top!=self) top.location.href = location.href; </script> 2、在浏览器中,Web网页被迫改变页面本身的大小,有可能跳出IFRAME窗体,从而取代了前父窗口。 3、我没有使用Safari,Opera,早期版本的IE浏览器,或任何其他浏览器的早期版本测试的此解决方案,所以要在Home Site中适当地调整heightAdjust和widthAdjust变量,适应没有测试的IE浏览器或低于IE8浏览器的版本。 总结和兴趣点 虽然这种解决方案不是很复杂,通过一个标签界面宿主外部网站内容。这是我所见过的许多网络论坛和博客要求的功能。请注意:您也可以配置标签可显示自己相关的域名或网站(在同一台服务器)。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部