Как проверить, загружен ли тот же домен, динамически загруженный iframe, который я не контролирую? - PullRequest
1 голос
/ 11 декабря 2011

Наборы фотографий в Tumblr подаются как iFrames.

Я хочу манипулировать этим iframe через jQuery, чтобы он выглядел так, как я хочу, что я могу сделать, но он не всегда заканчивает то, что делает.

Я думаю, это потому, что одновременно с загрузкой страницы происходит много вещей. Мне нужен способ проверить, что этот iFrame, который я не могу контролировать, загружается на 100%, прежде чем делать забавные вещи.

Существуют различные методы, предложенные в других вопросах по этому поводу, но я не думаю, что они подходят для этой ситуации. Вот один пример из вопроса переполнения стека "jQuery .ready в динамически вставляемом iframe"

function callIframe(url, callback) {
    $(document.body).append('<IFRAME id="myId" ...>');
    $('iframe#myId').attr('src', url);

    $('iframe#myId').load(function() 
    {
        callback(this);
    });
}

Но это не имеет для меня никакого смысла, даже несмотря на то, что оно было отмечено и имело 100 голосов. В этом «ответе» iframe добавляется функцией. Это для меня не динамически загружаемый iframe!

Вот мой код с «тупой» проверкой загрузки iframe. Код работает, но только иногда. Вы можете увидеть это в действии здесь http://syndex.me (третий пост - фотосет)

$(".post_relative").each(function () {
        var post_relative = $(this);
        var photoset = post_relative.find('.html_photoset');
        if(photoset.length){
            var myFrame = photoset.find("iframe");
            myFrame.load(function(){
                var newCover=myFrame.contents().find('.photoset').children(':first-child').children(':first-child').attr("href")+ '?'+(Math.random()*10000);
                post_relative.append("<img src='"+ newCover +"' alt='Cover Page' />");
                var psHeight = post_relative.find('img');
                psHeight.load(function(){
                if (psHeight.height()>heightRef){
                    psHeight.height(heightRef);
            }
                myFrame.hide();
            })
        })
        }
    });

Итак, вопрос: как выполнить скрипт, основанный на 100% загрузке и готовности iframe?

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

Вы записываете данные вне контекста каждого кадра, используя событие onload. У вас есть два варианта:

  • печенье
  • LocalStorage

Второе решение является значительно лучшим, но оно не поддерживается в IE7. Если он находится в одной схеме, домене и порте, вы можете получить доступ к этим элементам из обоих фреймов.

0 голосов
/ 11 декабря 2011

Если вы используете jquery, вы пытались

$("#iFrameId").load(function (){
    // do something once the iframe is loaded
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...