Подскажите кто может !!!! Динамический кросс доменный iframe под IE6
Помогите кто чем может :help: :help: .Пишу расширение под IE6 . Есть такой код. В IE 7 - 8 и в Firefox все работает отлично, за исключением IE 6 там кросс доменные фреймы запрещены политикой безопасности.
f (!window.parent.inject) { if(window == window.top) { if(document.body != null) { if (!document.location.host.match(/xxxxxx\.xxxxx\.ru$/)) { var my_div = document.body.firstChild; htmlend = document.createElement("div"); htmlend.innerHTML ="<iframe src='http://xxxxxxxxx.ru/index.html' id='frId' name='inject' frameborder='no' width='100%' height='100' scrolling='no'></iframe>"; document.body.insertBefore(htmlend, my_div); } } } } Решение должно существовать информации мало о подобных эксперементов некоторые говорят что можно у фрейма поменять свойство document.domain или loactionю Но у меня так и не получилось. Пишет "Разрешение отклонено" |
Цитата:
|
По подробней? iframe создается динамически когда открывается страница в браузере.
|
Цитата:
|
Цитата:
Встречал идею прописать document.domain на удаленном хосте и на родительском, тогда вроде кросс доменность прокатывает но пока не реализовал.. |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
ЗЫ: Не вкладки, случайно, для ие6 прикручиваете?!:) |
Цитата:
|
Цитата:
var iframe=document.createElement('iframe'); iframe.src='domain.com'; // Далее остальные свойства, если надо... document.appendChild(iframe); Ну вот... а если надо сменить url фрейма: //создаём новый фрейм newFrame со своим src document.removeChild(iframe, newFrame); Думаю, алгоритм понятен:) |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
B~Vladi,
доступ к содержимому он хочет получить. |
Цитата:
|
Цитата:
var domains = ['yande.com','google.com','mail.ru']; |
Цитата:
|
и ajax, если ты контролируешь ответ сервера
|
postMessage
|
postMessage отсутсвует в ie6.
|
Зато присутствует window.opener.
|
Цитата:
|
Цитата:
Но суть в том, что родительский фрейм может менять это свойство у другого фрейма, даже если последний загружен с другого домена. Соответственно, фрейм может читать свойство своего окна. В комментариях к приведённому коду говорится о проблемах безопасности, поэтому значением opener является объект VBScript, который из JS изменять нельзя (несоответствие типов). Пример простейшей реализации такого объекта: window.someNS.onMessage = function(){}; // Listener window.execScript( 'Private onMessage\n' + 'Class PostMsg\n' + 'Public Sub postMessage(data, domain)\n' + 'Call onMessage(data, domain)\n' + 'End Sub\n' + 'End Class\n' + 'Set onMessage = window.someNS.onMessage\n' + 'Set window.someNS.onMessage = New PostMsg' , 'vbscript'); var IEWindowOpener = window.someNS.onMessage; // Присваевается для contentWindow.opener delete win.someNS.onMessage; Во фрейме: (window.opener || window.top).postMessage(msg, '*') UPD: первый код только для IE, конечно же. Сперва стоит проверять поддержку postMessage через вызов соответствующего события. |
B~Vladi,
Интересно, не встречался прежде с этой библиотекой, спасибо. |
Часовой пояс GMT +3, время: 19:33. |