JQuery и фреймы - $(document).ready не работает
У меня есть страница с некоторым кодом в js и jQuery, и она работает очень хорошо. Но, к сожалению, весь мой сайт очень старый, и использует фреймы. Поэтому, когда я загружал свою страницу внутри фрейма, $(document).ready()
не запускается.
Мой набор фреймов выглядит так:
<frameset rows="79,*" frameBorder="1" frameSpacing="1" bordercolor="#5996BF" noresize>
<frame name="header" src="Operations.aspx?main='Info.aspx'" marginwidth="0" marginheight="0" scrolling="no" noresize frameborder="0">
<frame name="main" src="Info.aspx" marginwidth="0" marginheight="0" scrolling="auto" noresize frameborder="0">
</frameset>
Моя страница загружается в рамку main
. Что мне делать?
Ответы
Ответ 1
Я попробовал метод, упомянутый в другом комментарии:
$("#frameName").ready(function() {
// Write you frame on load javascript code here
} );
и это не сработало для меня.
это:
$("#frameName").load( function() {
//code goes here
} );
Даже при том, что событие не срабатывает так быстро - оно ожидает, пока загрузятся изображения и css.
Ответ 2
Если вы хотите запустить событие onload
для своих фреймов, выполните следующие действия:
-
Назначьте id
и name
для каждого тега <frame>
. Убедитесь, что значения атрибутов id
и name
одинаковы.
-
Используйте следующий код для запуска события onload
кадра:
$("frameName").ready(function() {
// Write your frame onload code here
}
Ответ 3
Я предполагаю, что это аналогичная проблема, с которой я столкнулся с DOMContentLoaded в iframe.
Я написал сообщение в блоге об этом.
Ответ 4
Я знаю, что это старая тема. Но чтобы помочь некоторым из вас, кто достигает этой страницы, вот мое решение:
$($("#frameName")[0].contentWindow.document).ready(function() {
// Write you frame onready code here
});
Ответ 5
Вы пытались поместить код jQuery на страницу Info.aspx?
Ответ 6
Для меня также работало следующее:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script>
$(window.parent.frames[0].document).ready(function() {
// Do stuff
});
</script>
[0] указывает, что это первый кадр в документе, [1] будет вторым фреймом и т.д. Это особенно приятно, если вы не контролируете надпись и все еще используете документ.
Ответ 7
Я долгое время работал с этим сообщением... вот мое решение.
test.html
<!DOCTYPE HTML>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
document.write('<frameset><frame name="frame_content" id="frame_content"></frame></frameset>');
$('#frame_content').attr('src', 'test2.html');
$('#frame_content').load(function()
{
if('${"#header"}' != '') {
$("#header", frame_content.document).remove();
}
});
if($('#frame_content').complete) $('#frame_content').trigger("load");
</script>
</head>
</html>
test2.html
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<div id="header">You will never see me, cause I have been removed!</div>
</body>
</html>
Ответ 8
Я не знаю, является ли это лучшим решением, но когда я удаляю $(document).ready()
и сохраняю его тело, все работает отлично.
Ответ 9
Не уверен, что вы пытаетесь сделать, но у меня есть еще более старое классическое приложение asp, которое работает из фреймов, и я недавно добавил функциональность jQuery, и он отлично работает. $(Document).ready() отлично работает внутри фрейма, но если вы хотите ссылаться на DOM в другом фрейме, вам нужно будет использовать событие Frame onload, чтобы вы знали, когда загружается DOM файл. По общему признанию, я использовал iFrames, но концепция должна быть одинаковой.
Ответ 10
Не нужно изменять разметку. Просто исправьте селектор. Это должно быть:
$("frame[name='main']").ready(function(){..});
not
$("#frameName").ready(function(){..});
Примечание. Кажется, что событие jQuery ready срабатывает несколько раз. Убедитесь, что все в порядке с вашей логикой.
Ответ 11
Этот ответ может быть запоздалым, но этот ответ может помочь кому-то вроде меня...
Это можно сделать через собственный код Javascript -
ifrm2 = var ifrm2 = document.getElementById('frm2');
if (ifrm2.contentDocument.readyState == 'complete') {
//here goes the code after frame fully loaded
}
//id = frm2 is the id of iframe in my page
Ответ 12
Нет причин для $(document).ready()
не вызываться.
Убедитесь, что ваша страница содержит include в jquery.js
. Попробуйте выполнить простой тест с пустой HTML-страницей и просто оповещение, чтобы увидеть, есть ли другая проблема.
Если вы пытаетесь использовать это на странице HTML, содержащей определение фрейма, имейте в виду, что там нет документа, вам нужно будет использовать