Не могу найти кадры детей - PullRequest
0 голосов
/ 10 июня 2011

Я поддерживаю старый сайт, который использует frameset / frames.

Я не хочу прикреплять обработчик к основному фрейму, чтобы, когда пользователь щелкает тело, где-то появляется предупреждение.

Я уже некоторое время стучу головой, но теперь я чувствую, что я так близко, что могу попробовать, но я до сих пор не могу понять проблему.Я использую jquery 1.5.1.

$(function () {
    $($('frame[name="main"]')).ready(function () {
        console.log($('frame[name="main"]')); // this is a success (I can view it in firebug
        console.log($('frame[name="main"]').find('body')); // fails (nothing is found)
    });
});

Вот кадры

<frameset cols="190,*" frameborder="no" border="0" framespacing="0" framepadding="0" marginwidth="0" marginheight="0">
    <frame name="head" src="someHTMLPage1.html" scrolling="no" noresize frameborder="no" border="0" framespacing="0" framepadding="0" marginwidth="0" marginheight="0">
    <frame name="main" src="someHTMLPage2.html" scrolling="auto" frameborder="no" border="0" framespacing="0" framepadding="0" marginwidth="0" marginheight="0">
</frameset>

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Спасибо, Артуро,

Ваше решение помогло, но не было идеальным. Вот что я сделал.

$(function () {

    $($('frame[name="info"]')).load(function () {
        var doc = window.frames["info"].document;
        doc.onclick = function () { alert('something') };
    });
});

Мне пришлось использовать .load вместо .ready, чтобы это работало.

Это работало в режиме совместимости с IE 7/8/8 и FF4 и Chrome 12 (вероятно, работает в более ранних версиях FF и Chrome, я просто не тестировал)

0 голосов
/ 10 июня 2011

Прежде всего, jquery ready не очень хорошо работает с окном, для которого он был разработан.Рамка инкапсулирует окно.

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

var doc = window.frames["main"].document;
var bdy = doc.body;
bdy.onclick = function() { alert("your text here") };

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

Также вы можете перейти на загрузку вместо готовности

$($('frame[name="main"]')).load(function() { ...

...