Использование JavaScript для настройки фреймов - PullRequest
0 голосов
/ 01 марта 2012

Я перенаправляю любую страницу, которая не находится во фрейме, в 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>

Я получил эту идею из моего предыдущего вопроса .

Кстати.Должен ли я даже сделать это?Есть ли лучшее решение?

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Идея в порядке, если вы хотите использовать кадры. Одиноким страницам, предназначенным для показа в кадрах, часто требуется что-то из других кадров или top.window. Рабочий раствор:

1) Не требуется сценарий для frameset -tags.

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 -фрейм и поместите туда скрипт, который получает URL-адрес top.window. Затем перенаправьте поддельную страницу на страницу, где ранее находился пользователь. Если исходной страницей был ваш index.html, просто загрузите нужную страницу. Этот сценарий также можно поместить в документ в menu -frame, но затем вам придется подождать, пока все кадры не будут полностью загружены, прежде чем перенаправлять.

Обратите внимание, результаты, которые вы получите от location свойств объекта, зависят от браузера. Поэтому избегайте буквального сравнения и манипулирования URL-адресами, используйте только свойства location -объекта.

1 голос
/ 02 марта 2012

ОК, вот простой пример.Я думаю, что существует множество более сложных решений, но пример содержит все основные элементы для задачи.Поддельная страница также не нужна.

Я проверял это только локально, и Chrome перенаправляет только на главную страницу.Другие браузеры (FF, IE, Opera) работают должным образом.

1) Перепишите ваш index.html как обычный набор фреймов (то есть: нет document.write s)

2) Поставьте этот скриптв head файла index.html

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-страницами.

...