JavaScript And Ajax(框架)

       框架能够在同一个浏览器窗口中显示多个 HTML 文档,可用于那些在页面上保持可见的导航控件(如带链接的菜单),还能让你能够独立的滚动内容框架,同时保持导航控件的位置固定不变。

       在现代网站设计里,框架被认为已经过时了。它有一系列的缺点:

  • 缺乏对各种屏幕尺寸和设备(如手机)的良好支持。
  • 浏览的 URL 反映了框架页面,但不能提供每个框架加载的文件的任何信息。书签和浏览器历史可能不能捕获当前页面的状态。
  • 框架在 XHTML1.1 中被废弃了

 

       在 ASP.NET 的开发里,使用母版页创建多栏页面要比使用框架的情况普遍的多。不过框架仍然有一些特殊的用途,比如把不同网站的现有文档放到同一个窗口里。框架和 JavaScript 相似,完全独立于 ASP.NET。它们只是 HTML 标准的一部分。

 

框架导航

       框架不容易和 ASP.NET 页面整合。创建独立的框架很简单,只要创建一个引用要显示的 ASP.NET 页面并定义好位置的 HTML 框架页面即可。

       但开发人员通常期望一个框架的动作会在其他框架中显示结果,但这种交互并不简单。问题在于每个框架加载不同页面,在 Web 服务器的角度看来,它们是完全独立的。它们之间的交互只能通过浏览器的客户端脚本

 

       考虑下面的 HTML 页面,它定义了一个有两个框架的框架集:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Frame Test</title>
</head>
<frameset framespacing="1" cols="200,*">
    <frame name="menu" src="Frame1.aspx" scrolling="no" />
    <frame name="content" src="" scrolling="auto" />
    <noframes>
        <body>
            <p>This page uses frames, but your browser doesn't support them.</p>
        </body>
    </noframes>
</frameset>
</html>

 

       左边框架显示 Frame1.aspx 页面。在这个页面里,你可以添加控件,用它们设置另一个框架内容。使用静态 HTML 很容易做到这一点,比如锚标签。例如,如果用户单击了下面的超链接,它会自动在右边的框架 content 里加载目标 NewPage.aspx:

<a href="NewPage.aspx" target="content">Click Here</a>

 

       你也可以在某个 JavaScript 事件发生时设置 parent.[FrameName].location 属性来实现相同的效果

<img src="ImgFile" onclick="parent.content.location='NewPage.aspx'">

 

       但是,如果要为响应服务器端事件,执行可编程的框架导航,这就变得更加复杂了。你可能要记录用户动作、检查安全凭证再执行框架导航。从服务器端执行这样的框架导航的唯一方式是写一段 JavaScript,当页面在客户端第一次加载时,由它告诉浏览器修改其他框架的位置

       例如,假设向左边的框架添加了按钮,单击时执行下面的服务器端代码。它定义 <script> 块并在页面中注册它,当页面回传时,脚本执行并把页面重定向到请求的页面:

protected void Button1_Click(object sender, EventArgs e)
{
    string url = "http://www.baidu.com";
    string frameScript = "<script type='text/javascript'>" +
        "window.parent.content.location='" + url + "';</script>";
    Page.ClientScript.RegisterStartupScript(this.GetType(), "FrameScript", frameScript);
}

image

 

 

内联框架

       合并服务器端编程和类框架功能的一个办法是使用 <iframe> 标签(HTML 4.0 标准的一部分)。这是一个内联的或者说嵌入式的框架,可以位于 HTML 文档的任何位置。主文档和嵌入页面被看作完全独立的文档。

<ifrmae src="page.aspx" width="40%" height="80"></iframe>

       <iframe> 标签的一个问题是不被所有浏览器支持。不过,你可以为那些不支持识别该标签的浏览器定义要显示的静态文本:

<ifrmae src="page.aspx" width="40%" height="80">
<p>See the content at <a href="page.aspx">page.aspx</a></p>
</iframe>

 

       给页面添加 <iframe> 标签后,就可以在代码隐藏类中定义它以便通过添加 runat=”server” 特性和 ID 特性来访问它。ASP.NET 没有与之对应的控件类,所以 <iframe> 被表示为一个 HtmlGenericControl 控件。

       现在你可以随时设置 src 特性来重定向框架:

IFrame1.Attributes["src"] = "page.aspx";

       当然,你不能够真正和嵌入页面的页面对象交互。实际上,这个页面甚至在这时还没有生成!相反,浏览器将单独请求被 src 特性引用的页面,然后在框架里显示它。不过,你可以使用各种技术在页面间传递信息,包括会话状态和查询字符串

posted on 2012-12-19 16:08  SkySoot  阅读(345)  评论(0编辑  收藏  举报

导航