Доступ запрещен в IE (тот же домен!) - PullRequest
0 голосов
/ 05 апреля 2011

Я знаю о проблемах межсайтового скриптинга с IE, но это происходит с того же сервера / домена. (Я на самом деле обращаюсь к серверу с IP-адресом ... но я думаю, что это не может быть проблемой?)

Дело в том, что я пытаюсь перевести приложение с помощью jquery.translate. В FF (сюрприз!) Это работает как шарм. Но в IE я получаю страшную ошибку «Access Denied». Это звонок, который я делаю:

$(top.frames["Content"].document).translate('english');

Я делаю это при загрузке кадра. А теперь по-настоящему странная часть: когда я впервые загружаю набор фреймов , он работает! Но когда я нажимаю на ссылки в правой части фрейма, я получаю сообщение об ошибке. Еще более странно: в левой части кадра я поместил кнопку, которая будет запускать точно такой же код - и тогда это сработает!

Конечно, я думал, что событие может произойти слишком рано; до того, как правая рамка закончила загрузку. Но даже когда я жду 10 секунд, через 10 секунд - бум, я получаю ошибку ....

У меня кончаются волосы здесь .. :-) У кого-нибудь есть подсказка?

спасибо!

Пол

1 Ответ

0 голосов
/ 29 января 2014

Я получаю ту же ошибку при попытке доступа к функциям в iframe, оба документа происходят из одного домена. Моя техника доступа к объекту окна iframe и его функциям была следующей:

// if id for the iframe element is 'context', first make sure 
// it's accessible as a property of the main window object
if(! window.context ) window.context = window.frames[0] || null;
if( window.context === null ) alert("The Context screen is not available");

// grab a function from the iframe window and assign to var
var fadeLoader = window.context.fadeLoader; // this is an error in IE

... поэтому, прежде чем я смогу попытаться вызвать функцию, я получаю сообщение об ошибке. Играя в консоли F12, вот что сработало:

// grab a function from the iframe window and assign to var
var fadeLoader = window.context.window.fadeLoader; 
// now I can call the function
fadeLoader();

... но теперь я получаю ошибку в Firefox, потому что 'window' не является допустимым свойством элемента iframe в FF. Вместо этого FF использует (правильно) contentWindow. Итак, чтобы сделать эту работу вокруг:

if(! window.context ) window.context = window.frames[0] || null;
if(! window.context.window ) window.context.window = window.context.contentWindow;
var fadeLoader = window.context.window.fadeLoader;
fadeLoader();

Кажется, работает в IE, FireFox, Chrome и Safari.

...