Javascript обратный вызов, когда IFRAME завершает загрузку?

Или используя ES6:

class Circular {
  constructor() {
    this.value = "Hello World";
    this.self = this;
  }
}

circular = new Circular();
143
задан FlySwat 2 October 2008 в 19:32
поделиться

6 ответов

У меня была точно та же проблема в прошлом и единственном способе, которым я нашел для фиксации его, должен был добавить обратный вызов в iframe страницу. Конечно, тот единственные работы, когда Вы управляете iframe содержанием.

0
ответ дан roryf 2 October 2008 в 19:32
поделиться

У меня есть подобный код в моих проектах, который хорошо работает. Адаптируя мой код к Вашей функции, решение могло быть следующим:

function xssRequest(url, callback)
{
    var iFrameObj = document.createElement('IFRAME');
    iFrameObj.id = 'myUniqueID';
    document.body.appendChild(iFrameObj);       
    iFrameObj.src = url;                        

    $(iFrameObj).load(function() 
    {
        callback(window['myUniqueID'].document.body.innerHTML);
        document.body.removeChild(iFrameObj);
    });
}

, Возможно, у Вас есть пустой innerHTML потому что (одна или обе причины): 1. необходимо использовать его против элемента тела 2. Вы удалили iframe из своей страницы DOM

2
ответ дан Pier Luigi 2 October 2008 в 19:32
поделиться
  • 1
    Это won' t работа - поскольку в документации MySQL говорится: " пункт ПРОВЕРКИ анализируется, но игнорируется всем устройством хранения данных engines". – Thor84no 13 March 2012 в 17:02

Сначала идя именем функции xssRequest это кажется на попытку перекрестного запроса сайта - который, если правильно, Вы не собираетесь быть способными считать содержание iframe.

, С другой стороны, если URL iframe находится на Вашем домене, можно получить доступ к телу, но я нашел, что, если я использую тайм-аут для удаления iframe, обратный вызов хорошо работает:

// possibly excessive use of jQuery - but I've got a live working example in production
$('#myUniqueID').load(function () {
  if (typeof callback == 'function') {
    callback($('body', this.contentWindow.document).html());
  }
  setTimeout(function () {$('#frameId').remove();}, 50);
});
49
ответ дан Remy Sharp 2 October 2008 в 19:32
поделиться
  • 1
    Но он can' t получают тип файла, не зная полного имени файла, которое является его точной проблемой. Он знает, что файл называют ' имя файла.??? ' и потребности знать, как узнать '??? ' без цикличного выполнения по набору расширений, проверяющих каждого из них – Michael Mrozek 21 July 2010 в 20:56

Я должен был сделать это в случаях, где документы, такие как документы в формате Word и pdfs передавались потоком к iframe и находились решение, которое работает вполне прилично. Ключ обрабатывает onreadystatechanged событие на iframe.

Позволяет, говорят, что название Вашего кадра является "myIframe". Сначала где-нибудь в Вашем запуске кода (я, это встраивает любого, где после iframe), добавляет что-то вроде этого для регистрации обработчика событий:

document.getElementById('myIframe').onreadystatechange = MyIframeReadyStateChanged;

я не смог использовать атрибут onreadystatechage на iframe, я не могу помнить, почему, но приложение должен был работать в IE 7 и Safari 3, так, чтобы май фактор.

Вот пример, как получить полное состояние:

function MyIframeReadyStateChanged()
{
    if(document.getElementById('myIframe').readyState == 'complete')
    {
        // Do your complete stuff here.
    }
}
7
ответ дан Ryan Cook 2 October 2008 в 19:32
поделиться
  • 1
    Хорошо, если файл или папка будут существовать, то file_type возвратит it' s вводят таким образом сигнализирующий, что файл существует иначе, он возвращает false. Я don' t знают то, что это рассматривает ошибкой, хотя, как это говорит, это может возвратить некоторые предупреждения. – Gazillion 21 July 2010 в 21:00

Я думаю, что событие загрузки правильное. Неправильно то, как вы извлекаете контент из dom содержимого iframe.

Вам нужен html страницы, загруженной в iframe, а не html объекта iframe.

Что вам нужно сделать - получить доступ к документу содержимого с помощью iFrameObj.contentDocument . Это возвращает dom страницы, загруженной внутри iframe, если она находится в том же домене, что и текущая страница.

Я бы извлек содержимое перед удалением iframe.

Я тестировал в firefox и opera.

Тогда, я думаю, вы можете получить свои данные с помощью $ (childDom) .html () или $ (childDom) .find ('some selector') ...

1
ответ дан 23 November 2019 в 22:56
поделиться

Внутренний HTML-код вашего iframe пуст, потому что ваш тег iframe не окружает никакого содержимого в родительском документе. Чтобы получить контент со страницы, на которую указывает атрибут src iframe, вам необходимо получить доступ к свойству contentDocument iframe. Однако будет выдано исключение, если src находится из другого домена. Это функция безопасности, которая предотвращает выполнение произвольного JavaScript на чужой странице, что может создать уязвимость межсайтового скриптинга. Вот пример кода, который иллюстрирует то, о чем я говорю:

<script src="http://prototypejs.org/assets/2009/8/31/prototype.js" type="text/javascript"></script>

<h1>Parent</h1>

<script type="text/javascript">
function on_load(iframe) {
  try {
    // Displays the first 50 chars in the innerHTML of the
    // body of the page that the iframe is showing.
    // EDIT 2012-04-17: for wider support, fallback to contentWindow.document
    var doc = iframe.contentDocument || iframe.contentWindow.document;
    alert(doc.body.innerHTML.substring(0, 50));
  } catch (e) {
    // This can happen if the src of the iframe is
    // on another domain
    alert('exception: ' + e);
  }
}
</script>
<iframe id="child" src="iframe_content.html" onload="on_load(this)"></iframe>

Чтобы продолжить пример, попробуйте использовать это как содержимое iframe:

<h1>Child</h1>

<a href="http://www.google.com/">Google</a>

<p>Use the preceeding link to change the src of the iframe
to see what happens when the src domain is different from
that of the parent page</p>
8
ответ дан 23 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: