2013-08-02 33 views
2

我最近开始重新设计/改造一个网站,使用帧/框架集(我相信这是在20世纪90年代创建了!)网站结构已经失去了浏览器的后退能力

我都选择提出了一个基本结构如下:

<body> 
    header & navigation 
    content 
    footer 
</bod> 

如果上面是在我的index.html页面定义页眉/导航和页脚是静态的..根据从导航菜单选择的项目内容的变化。

我现在唯一的问题是,例如,用户在主页上(index.html),然后从导航菜单中选择和项目,刷新...如果用户单击后退按钮在任何浏览器上,他们都不会回到主页,而是回到以前的浏览器位置,比如他们来自谷歌搜索,他们会被重定向到那里。

的Index.html:

<html> 

<head> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="viewport" content="width=device-width"> 

<script src="javascript/modernizr-2.6.2.min.js"></script> 

<link type="text/css" href="css/main.css" rel="stylesheet"> 

<script type="text/javascript" src="javascript/jquery-1.9.1.min.js"></script> 
<script type="text/javascript" src="javascript/jquery-ui-1.10.1.custom.min.js"></script>  
<script type="text/javascript" src="javascript/redesign_js.js"></script> 
<script type="text/javascript" src="javascript/carousel_js.js"></script> 

<!-- New JavaScript functions to enable dropdown navigation --> 
<script type="text/javascript"> 
    $(document).ready(function(){   
     $('nav li ul').hide().removeClass('fallback'); 
     $('nav li').hover(
      function() { 
       $('ul', this).stop().slideDown(300); 
      }, 
      function() { 
       $('ul', this).stop().slideUp(300); 
      } 
     );  
    }); 
</script> 

<!-- New JavaScript functions to enable refresh of page content DIV --> 
<script type="text/javascript"> 
    function getPageContent(a) { 
     $.get(a, processContent, 'html').fail(function() { alert('There is a problem loading a resource. Please re-try');}); 
     $('#welcome').hide(); 
    } 

    function processContent(file_data) 
    { 
     $("#PageContent").html(file_data); 
    } 
</script> 



<style> 

/*nav {background:#FFF;float:left;}*/ 
nav ul { 
    text-align:left;  
} 
nav ul li { 
    float:left; 
    display:inline; 
    border-right: 1px solid #083D72; 
} 
nav ul li:hover { 
    background:#2D8FF0; 
} 
nav ul li a { 
    display:block; 
    color:#444; 
} 
nav ul li ul { 
    position:absolute; 
    width:180px; 
    background:#09427C; 
    font-size: 12px;  
} 
nav ul li ul li { 
    width:180px;  
} 
nav ul li ul li a { 
    display:block; 
    color:#444; 
} 
nav ul li ul li:hover a {} 
nav ul li ul.fallback { 
    display:none; 
} 
nav ul li:hover ul.fallback { 
    display:block; 
} 
</style> 

</head> 

<body> 

<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr class=""> 
    <div class="wrap"> 
     <hgroup> 
      <h1 class="logo"><img src="images/logo.png" width="163" height="59" alt="Tables and Chairs"></h1> 
      <h2 class="heading">Welcome to Tables and Chairs</h2> 
     </hgroup> 
    </div> 
</tr> 
</table> 

<!-- MENU START --> 
<nav class="site-nav"> 
<ul class="menu-nav wrap menu menu--hor"> 
<li class="data-sources"><a href="#" title="">Date <span class="icon-caret-down"></span> </a>  
    <li> 
     <a onClick="getPageContent('Information.html')">Information</a> 
     <ul class="fallback"> 
     <li><a onClick="getPageContent('ovens.html')">Ovens</a></li> 
      <li><a onClick="getPageContent('fridges.html')">Fridges</a></li> 
      <li><a onClick="getPageContent('tables.html')">Tables</a></li> 
      <li><a onClick="getPageContent('costing.html')">Costing</a></li> 
      <li><a onClick="getPageContent('install.html')">Installation</a></li> 
     </ul> 
    </li> 
    <li> 
     <a onClick="getPageContent('legal.html')">Legal Info</a> 
     <ul class="fallback"> 
      <li><a onClick="getPageContent('terms.html')">Terms & Conditions</a></li> 
      <li><a onClick="getPageContent('data.html')">Data Protection</a></li>     
     </ul> 
    </li> 
    <li> 
     <a onClick="getPageContent('contact.html')">Contact Us</a> 
     <ul class="fallback"> 
     <li><a href="javascript:openHelpWind('contact')">Contact Details</a></li> 
      <li><a onClick="getPageContent('comments.html')">Your Comments</a></li> 
      <li><a onClick="getPageContent('addinfos.html')">Additional Info</a></li> 
     </ul> 
    </li> 
    <li> 
     <a onClick="getPageContent('cookies.html')">Cookies</a> 
    </li> 
</li> 
</ul> 
</nav> 
<!-- MENU END --> 


<div id="PageContent"> 
    <section id="welcome"> 
     <div class="page-heading"> 
      <h1 class="wrap">Welcome to Tables and Chairs</h1> 
     </div> 


     <div class="ctr-full"> 
      <form class="wrap createsrc" method="post"> 
      <div class="grid one-whole"> 
       <section class="box"> 
        <fieldset> 
        <ul id="carousel"> 
           <li><img width="200" height="133" src="images/slideImage1.png" /></li> 
           <li><img width="200" height="133" src="images/slideImage2.png" /></li> 
           <li><img width="200" height="133" src="images/slideImage3.png" /></li> 
           <li><img width="200" height="133" src="images/slideImage4.png" /></li> 
          </ul> 
       </fieldset> 
       </section> 
      </div> 
      <br>      
      </form> 
     </div> 
    </section> 
</div> 

<footer class="site-footer" role="contentinfo"> 
<div class="wrap"> 
    <small class="fr">&copy; 2013 T&C All rights reserved</small> 
</div> 
</footer> <!-- END footer.site-footer --> 

</body> 
</html> 

任何帮助表示赞赏。

感谢

更新**

感谢您的反馈家伙。我试图实施Ben Almans插件。

我已经下载了完整的插件,并放置在下面的代码在我的脑海:

<!DOCTYPE html> 
<html> 

<head> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="viewport" content="width=device-width"> 


<script src="javascript/modernizr-2.6.2.min.js"></script> 


<link type="text/css" href="css/main.css" rel="stylesheet"> 

<script type="text/javascript" src="javascript/jquery-1.9.1.min.js"></script> 
<script type="text/javascript" src="javascript/jquery-ui-1.10.1.custom.min.js"></script>  
<script type="text/javascript" src="javascript/redesign_js.js"></script> 
<script type="text/javascript" src="javascript/jquery.ba-hashchange.js"></script> 

<!-- New JavaScript functions to enable dropdown navigation --> 
<script type="text/javascript"> 
    $(document).ready(function(){   
     $('nav li ul').hide().removeClass('fallback'); 
     $('nav li').hover(
      function() { 
       $('ul', this).stop().slideDown(300); 
      }, 
      function() { 
       $('ul', this).stop().slideUp(300); 
      } 
     );  
    }); 
</script> 

<!-- New JavaScript functions to enable history navigation --> 
<script type="text/javascript"> 
    $(function(){ 

     // Bind an event to window.onhashchange that, when the hash changes, gets the 
     // hash and adds the class "selected" to any matching nav link. 
     $(window).hashchange(function(){ 
     var hash = location.hash; 

     // Set the page title based on the hash. 
     document.title = 'The hash is ' + (hash.replace(/^#/, '') || 'blank') + '.'; 

     // Iterate over all nav links, setting the "selected" class as-appropriate. 
     $('#nav li').each(function(){ 
      var that = $(this); 
      that[ that.attr('href') === hash ? 'addClass' : 'removeClass' ]('selected'); 
     }); 
     }) 

     // Since the event is only triggered when the hash changes, we need to trigger 
     // the event now, to handle the hash the page may have loaded with. 
     $(window).hashchange(); 

    }); 
</script> 



<!-- New JavaScript functions to enable refresh of page content DIV --> 
<script type="text/javascript"> 
    function getPageContent(a) { 
     $.get(a, processContent, 'html').fail(function() { alert('There is a problem loading a resource. Please re-try');}); 
     $('#welcome').hide(); 
    } 

    function processContent(file_data) 
    { 
     $("#PageContent").html(file_data); 
    } 
</script> 



<style> 

/*as per earlier post....*/ 

</style> 

</head> 

<body> 

的#tag犯规显示为Firbug我看到的错误工作:

类型错误: $ .browser未定义。

任何帮助表示赞赏。

+0

不看我猜你需要一个jQuery历史插件 – mplungjan

+1

这是预期的行为。您没有导航到其他页面,您正在使用ajax加载它们。所以实际上你的主页永远不会被浏览出来。因此,后面会带你到你从哪里来。 – Abhitalks

+0

您可以使用散列表 –

回答

2

因为他们实际上并没有去任何地方 - 您的链接似乎只是动态地改变内容,这意味着他们从不技术上离开索引页面,后退按钮功能正常。

大量的技术提供了模板技术,真的不需要这样的原始黑客使用“主”页面;明确定义每个页面并使用链接将它们串联在一起成为可浏览的网站。

+0

感谢您的意见。当我重新设计整个网站时,我宁愿按照“正确的方式”来做。您可以帮助“明确地定义每个页面,并使用链接将它们串在一起成为可浏览的网站。”谢谢 –

+0

本质上,像''这样的代码替换为像' – Quentin

+0

@Quentin - Thanks Quentin'这样的代码,我到冰箱页面并具有返回功能,它不会自动导入下拉页眉/导航和页脚。 –

2

最简单的解决方案是将散列添加到URL的末尾。由于您已经在使用jQuery,因此您应该只使用一个插件:例如http://benalman.com/projects/jquery-hashchange-plugin

看那demo page

拓展上的一些评论:

这是比较正常的(传统)有一个Web服务器上的多个HTML文件并点击导航中的链接将带您该文件,例如您的网站文件夹中可能有3个文件在里面:

  • 的index.html
  • 有关。HTML
  • contact.html

然后用户会点击你的页面上的链接与<a href="index.html">Home</a>(作为一个例子),这将导致Web服务器来服务索引页的请求的用户代理。

通常人们在多个页面上都有相同的元素,例如页眉和页脚。为了实现这一点,不需要粘贴到所有文件中,您需要一个服务器端预处理器,例如PHP或ASP.Net,它们分别具有母版页的概念。

当然,也有使用MVC类型框架的选项 - 但我不想把它放入组合中。

+1

我不认为使用jQuery是一个没有按照用户期望进行正确链接的方法;是的,单页网站已经成为一件小事,但这看起来并不像它本意是为了什么。 OP正在远离框架,但并没有真正做出任何改进。 –

+0

@RobH - 感谢您的链接,我现在明白为什么它的行为如此。我看了你提供的链接,看起来很简单。 –

+0

@格兰托马斯 - 感谢您的意见。正如我正在重新设计整个网站,如果你可以通过例子说明如何从框架中“真正”改进,我将不胜感激。 –

相关问题