Список вопросов по HTML

       

Как определить, что юзер открыл страницу не в кадре, и перевести его в кадр?


Можно использовать скрипт, просто перенаправляющий на фреймсет (из предыдущей версии FAQ), но гораздо грамотнее сделать так, чтобы пользователю не пришлось потом долго лазить по меню в поисках нужной странички.

Пусть http://www.myserver.com/dir/frameset.html - это фреймсет, в котором есть два фрейма: menu.html - меню, main - рабочее окно для main.html, 1.html, 2.html и т.д.

В случае, если фреймсет и вызванная страничка лежат на одном сервере, то в <head> нужно вставить такой скрипт:

<script language="JavaScript" type="text/javascript"><!-- if (parent==self || parent.location.pathname!='/dir/frameset.html') { var framesetURL='/dir/frameset.html?main='+      escape(self.location.href)    if (typeof(location.replace)!='undefined') {      self.location.replace(framesetURL) //этот метод из JS1.1 грамотнее, чем простой редирект, потому что //не засоряет history.    } else self.location=framesetURL; } //--></script>

В случае, если вызванная страничка и фреймсет расположены на разных серверах, то скрипт будет такой:

<script language="JavaScript" type="text/javascript"><!-- var parentURL=''; with (parent.location) parentURL=protocol+'//'+hostname+pathname; if (parent==self ||    parentURL!='http://www.myserver.com/dir/frameset.html') {    var framesetURL='http://www.myserver.com/dir/frameset.html?main='+      escape(self.location.href)    if (typeof(location.replace)!='undefined') {      self.location.replace(framesetURL)    } else self.location=framesetURL; } //--></script>

Если у вас на сервере работает CGI, PHP, или ASP, то фреймсет должен взять пришедший параметр $main и указать его в качестве src для фрейма main.

Если это невозможно (страничка лежит на халявном серваке), то во frameset.html

в <head> нужно поставить:

<script language="JavaScript" type="text/javascript"><!-- function loadMain() { var mainPos=location.search.indexOf('main=')+5; if (mainPos>4) {    var mainURL=location.search.substring(mainPos,location.search.length);    if (mainURL.indexOf('&')>-1) {      mainURL=mainURL.substring(0,mainURL.indexOf('&'))    }    mainURL=unescape(mainURL);    if (typeof(location.replace)!='undefined') {      self.frames.main.location.replace(mainURL)    } else self.frames.main.location.href=mainURL } } //--></script>

А в тег <frameset> нужно прописать параметр:

onload="loadMain();"

Тогда при внешней ссылке на 1.html или наборе в строке браузера http://www.myserver.com/dir/1.html откроется фреймсет, и в нужный фрейм автоматически загрузится 1.html.



Содержание раздела