使用JavaScript设置框架

时间:2012-03-01 12:00:09

标签: javascript html frames

我将任何不在框架内的页面重定向到index.html。该索引正在更改为index.html?page.html

我想使用地址中的附加部分,并将帧的SRC设置为此值。

我不知道如何正确包含location.search.substring(1),因此不会导致错误。

每个网站都有代码:

if (top.location == self.location)
{
    top.location = 'index.html?' + location.href.replace(/^.*[\\\/]/, '');
}

索引页面包含在

之后
<frameset rows="100px,100%" cols="*" border="0">
    <frame src="logo.html" name="logo" scrolling="no">
    <frameset rows="*" cols="200,100%" border="0">
        <frame src="menu.html" name="menu" scrolling="no">
        <script language="javascript">
            if (location.search && location.search.length > 1 && location.search.charAt(0) == "?") 
            {
                document.write('<frame src="' + location.search.substring(1) + '" name="page" scrolling="auto">');
            }
            else
            {
                document.write('<frame src="main_page.html" name="page" scrolling="auto">');
            }
        </script>
    </frameset>
</frameset>

我从之前的question获得了这个想法。

顺便说一句。我应该这样做吗?有没有更好的解决方案?

2 个答案:

答案 0 :(得分:2)

如果你想使用框架,这个想法很好。用于在框架中显示的孤独页面通常需要来自其他框架或顶部窗口的东西。工作解决方案:

1)无需将脚本导入frameset - 标签。

2)重定向页面:

if(top.window.location.pathname == self.window.location.pathname){ // Compares without search string
    top.window.location.href = 'your_page_address+'?current_page_name'
}

3)创建一个假页面加载到page - 框架并放置一个脚本,该脚本检索top.window的URL。然后将虚假页面重定向到之前用户所在的页面。如果原始页面是您的index.html,那么只需加载正确的页面。    该脚本也可以放在menu - 框架中的文档中,但是在重定向之前,您必须等待所有帧都完全加载。

请注意,您将从location对象的属性获得的结果取决于浏览器。因此,避免文字比较和操纵URL,只使用location - 对象的属性。

答案 1 :(得分:1)

好的,这是一个简单的例子。我认为存在许多更复杂的解决方案,但该示例包含任务的所有基本内容。也不需要假页面。

我仅在本地对此进行了测试,Chrome重定向到了首页。其他浏览器(FF,IE,Opera)按预期工作。

1)将index.html重写为普通框架集(即:无document.write s)

2)将此脚本放在index.html的head

reDirectCleared=false;

3)将此脚本放在首页的head

(function reDirect(){
    // ** Redirect if no frameset
    if(top.window.location.pathname == self.window.location.pathname){
        top.window.location.href = 'Your_index.html_URL?This_page_URL&'
    }
    // ** Frameset exist
    if(!top.window.reDirectCleared){
        top.window.reDirectCleared=true; // * Prevents further redirections
        var searchString = top.window.location.search;
        var pagePath = searchString.substring(1,searchString.indexOf('&'));
        if(pagePath.indexOf(self.window.location.pathname)>-1 || pagePath==''){
            return; // * Ready at frontpage
        }
        top.window.page.location.href = pagePath; // * Redirects page-frame
    }
    return;
})();

4)将此脚本放在所有其他页面的head中(不在index.html中)

if(top.window.location.pathname == self.window.location.pathname){
    top.window.location.href = 'Your_index.html_URL?This_page_URL&'
}

你的作业是,如果Chrome无法使用真实的http页面,如何让Chrome正确执行此操作。