Хай.
Ппц проблема тут возникла: Нужно закрыть iframe, со странецей из другого домена относительно самой страницы где создан iframe, причем закрыть этот iframe нужно из ссылки внутри этого iframe!
По началу вроде все просто: можно заюзать javascript проперти parent. Но в crossdomain случае браузер не даст этого сделать из соображений безопасности.
После долгих мучений был найден такой workaround с использование hash в урле:
–
// Код для обработки сообщений из 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);
Заметка: тут нужно еще не забыть указать URL основной страницы (внутри которой iframe). Этот УРЛ нельзя получить через parent.location или parent.location.href т.к. в кросс-браузерном варианте это небезопасно.
// Код для посылки сообщений в parent document
function sendMessage(msg){
parent.location = parentWindowUrl + “#myMsg_” + msg;
}
<a href=”javascript:void(0)” onclick=”javascript:sendMessage(’myMessage’);return false;”>Do it!</a>
–
Успехов!