АРХИВ ЗА ИЮНЬ 2010
ИЮНЬ 3, 2010

Хай.

Ппц проблема тут возникла: Нужно закрыть iframe, со странецей из другого домена относительно самой страницы где создан iframe, причем закрыть этот iframe нужно из ссылки внутри этого iframe!

По началу вроде все просто: можно заюзать javascript проперти parent. Но в crossdomain случае браузер не даст этого сделать из соображений безопасности.

После долгих мучений был найден такой workaround с использование hash в урле:

На основной странице добавляем JavaScript код

// Код для обработки сообщений из iframe

var lastId = “”;
function checkForMessages(){
if (location.hash != lastId){
lastId = location.hash;
lastHashIdx = lastId.lastIndexOf(’#myMsg’);
if (lastHashIdx != -1) {
// Пропарсить наш месадж
msg = lastId.substring(lastHashIdx + 7); // lastHashIdx + strlen(’#myMsg’)

// Убрать месадж из урла
lastId = lastId.substring(0, lastHashIdx);
location.hash = lastId;

// Обработать месадж
if (msg == ‘myMessage’) {
// TODO Handler here

alert(’TODO Handle for myMessage’);

} else {
alert(’unknowm message ‘ + msg);
}
}
}
}
setInterval(checkForMessages, 200);

В iframe добавляем JavaScript код

Заметка: тут нужно еще не забыть указать URL основной страницы (внутри которой iframe). Этот УРЛ нельзя получить через parent.location или parent.location.href т.к. в кросс-браузерном варианте это небезопасно.

// Код для посылки сообщений в parent document

function sendMessage(msg){
parent.location = parentWindowUrl + “#myMsg_” + msg;
}

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

<a href=”javascript:void(0)” onclick=”javascript:sendMessage(’myMessage’);return false;”>Do it!</a>

Успехов!

Страницы:1...56789