Доступ к содержимому IFrame contentWindow.document дает «Доступ запрещен» в IE6. - PullRequest
1 голос
/ 16 ноября 2011

Я не думал, что это возможно, но я ненавижу IE6 вдвое больше, чем сегодня утром.

Пожалуйста, не беспокойте меня о причинах, но я постараюсь объяснить, чего мы пытаемся достичь. У нас работает 2 приложения, скажем, APP1 и APP2, оба они находятся в одном домене . APP1 включает в себя файл JavaScript, который размещен на APP2. Этот файл JS будет:

  1. Создать IFrame (используя document.createElement)
  2. Установить источник IFrame в корень APP2 (где генерируется некоторый HTML);
  3. Добавить div к телу APP1
  4. Прочитать содержимое IFrame (поэтому сгенерированный HTML-код APP2)
  5. установить это содержимое как innerHTML для div (3)

Таким образом, в конце в APP1 у нас есть заголовок, в котором содержимое генерируется APP2 без IFrame на экране.

Проблема заключается в шаге 4; это работает нормально для всех браузеров, кроме IE6 (может ли это быть наиболее часто используемым предложением в веб-разработке?). Я получаю JS-ошибку при попытке доступа к contentWindow.document из iframe: «Доступ запрещен». Я не эксперт, но, как я понимаю, эту ошибку вы получите, если оба приложения не будут находиться в одном домене, но они есть (dev.echnet / APP1 & dev.echnet / APP2).

Это код, который я использую для вышеперечисленных шагов (убрал то, что не выполняется, если не IE6): (1), (2) и (3):

var elIf;
$().ready(function()
{
    elIf = document.createElement('<iframe name="uhframename">');
    elIf.setAttribute('id','idUhFrame');
    document.body.appendChild(elIf);

var uhDiv = document.createElement('div');
document.body.appendChild(uhDiv);

elIf.src='dev.echnet/APP1?nocache='+Math.random();
getText();

}

(4) * 1 028 *

function getText() {
        var sContent = "";
        if (elIf.contentWindow.document.body) { // access denied on elIf.contentWindow.document
           ...
        }
}

Я много гуглил и перепробовал много возможностей, которые нашел (также на SO), но ни одна из них, похоже, не решила эту проблему.

Я также попытался явно установить домен в IFrame, настроив его источник так:

"JavaScript: (функция () {document.open (); document.domain = \ 'dev.echnet \'; document.close ();}) ()"

но я не совсем уверен, имеет ли это какой-либо эффект, так как я устанавливаю источник на что-то еще, сделав несколько шагов дальше. В любом случае, поскольку это один и тот же домен, это не должно иметь значения?

Надеясь на помощь или кого-нибудь, чтобы сбить всех пользователей IE6 (в настоящее время выполнимая задача), поэтому я могу пропустить эту задачу: -).

1 Ответ

0 голосов
/ 16 ноября 2011

Поработав над другим вопросом здесь, я пришел к этому решению.

Кажется .document не всегда необходимо.

http://jsfiddle.net/sTkVR/4/

Я использую хром, и он не работал с .document, но работает как шарм без него

...