… on the other hand…

Don't click here!
The Turtle
My CV.

window.opener и crossdomain

by Dima on 11/19/2009

Меня спрашивают. Я отвечаю.
Задача: с сайта открыть окошко, в котором разместить контент с другого сайта, но так, чтоб можно было переключать контент в родительском окне. Причем конент может быть с разных доменов.
Нельзя так делать. Permission denied в InternetExplorer и ошибка про Unsafe URL в Chrome.
Но не все пропало. Вот мое решение:
Файл 1 – родительский (test1.htm):

<html>
<head>
<title>test1</title>
<script>
function winop(){
var w=window.open(“”, “list”, “width=150,height=210″);
w.document.location=”http://kurilo.su/sample/test2.htm”
document.location.href=”http://kurilo.su/sample/test3.php?q=”+escape(document.location.href);
}
</script>
</head>
<body>
<a href=”#” onclick=”winop();”>Ы</a>
</body>
</html>

Файл 2 – всплывающее окно (test2.htm):

<html>
<head>
<title>test2</title>
<script>
function winchange(i){
if (window.opener && !window.opener.closed){
if (i==1) {
window.opener.fchang(“http://www.danilin.info/”);
} else {
window.opener.fchang(“http://www.kurilo.su/”);
}
}
}
</script>
</head>
<body>
<a href=”#” onclick=”winchange(1);”>Ы</a><br />
<a href=”#” onclick=”winchange(2);”>А</a>
</body>
</html>

Файл 3 – вспомогательный (test3.php):

<html>
<head>
<title>test3</title>
<script>
function fchang(s){
window.q.location=s;
}
</script>
</head>
<frameset rows”100%”>
<frame src=”<?php echo $_GET[‘q’] ?>” name=”q”></frame>
</frameset>
</html>

Да, пользователь увидит в момент открытия popup окна изменение адреса, но сможет спокойно работать в старом окне и ничего ему не будет мешать.
Действующее решение здесь.
Пояснять суть решения надо?
(кстати, кто еще не освоился с этим блогом, часть текста на прошлой странице. Пользуйтесь PgUp и PgDown)

2 thoughts on “window.opener и crossdomain

  1. S says:

    window.opener.location.replace(url)
    правда в твоем любимом хроме не работает

  2. Дима says:

    Удивительно, но именно в нем я и проверял все. 🙂
    Так что, все работает. 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *