2009-03-31 3 views
2

Вот ситуация:Получение исключение JavaScript происходит в поверхности IFrame

  • страница (iframe.html) имеет загрузку IFrame другой страницы (iframe-content.html).
  • Ошибка JavaScript может произойти, когда iframe-content.html загружен в iframe.
  • Я хотел бы, чтобы это исключение было видимым для браузера (например, показано в Firefox error console или Firebug).

Вот что я вижу:

  1. При iframe.html начальной загрузке, и загружает iframe-content.html с src="iframe-content.html", исключение JavaScript показывает в Firebug.
  2. Однако, если страница загружается в JavaScript (document.getElementById('iframe').src = 'iframe-content.html'), исключение не отображается.

Вы можете воспроизвести это, перейдя в:

  1. http://avernet.googlepages.com/iframe.html с Firefox.
  2. Вы увидите исключение, так как загружается iframe-content.html.
  3. Нажмите на кнопку: содержимое iframe загрузится снова, но на этот раз исключение не отображается в Firebug.

Есть ли способ № 3 для исключения, вместо того, чтобы его молчаливо игнорировали? (Вы не можете использовать try/catch вокруг JS-кода, который устанавливает src, так как этот код возвращается непосредственно перед загрузкой страницы в iframe.)

+0

То, что я описываю здесь, не является проблемой IE. С IE ошибка, возникающая при загрузке страницы в iframe, отображается браузером. – avernet

+0

Работает для меня: нажатие «перезагрузка» выплевывает еще одну ошибку, как ожидалось. Но я действительно сомневаюсь в эффективности установки атрибута 'src' для значения, которое уже установлено. (Абсолютная абсолютность URL-адреса, изменение, на которое вы, возможно, не захотите полагаться.) – bobince

ответ

2

Кажется, что ваша страница iframe на самом деле не загружена на второй раз. Или он загружается из кеша, и ошибка игнорируется. Это интересно, но я думаю, что нашел способ обойти это.

function setContent() { 
    try { 
     console.log("Loading iframe content"); 
     document.getElementById('iframe').src = 'iframe-content.html?foo=bar'; 
    } catch (e) { 
     console.log("Caught", e); 
    } 
    console.log("Done loading"); 
} 

При этом должна появиться ошибка.

То, что я сделал, должно было обмануть браузер, чтобы подумать, что я загружаю новую страницу в качестве параметров после изменения URL.

'iframe-content.html?foo=bar'; 

Вы можете заменить строку «bar» на меняющуюся временную метку. Конечно, это позволит избежать кеша, но это также заставит его генерировать ошибку, как вы хотели.

+0

True! Страница не перезагружается. Вот так. Спасибо Микко. – avernet

Смежные вопросы