Получение скрытого поля из Iframe на странице контейнера - PullRequest
1 голос
/ 25 февраля 2010

У меня есть страница ASP, которая содержит iframe. Я назову это главной страницей. Мне нужно установить значение скрытого поля на главной странице после завершения загрузки iframe. Iframe - это страница ASP, у которой есть скрытое поле, заданное во время загрузки страницы. Затем необходимо передать это значение в скрытое поле на главной странице.

У меня есть инструмент onLoad на странице iframe, вызывающий метод javascript в главном фрейме. Мне пришлось поместить задержку в функцию, где она обращается к некоторым элементам управления telerik, потому что она не могла найти их иначе. Кажется, что страница еще не инициализирована.

Вопросы: Есть лучший способ сделать это? Есть ли событие "страница готова"? Есть ли способ синхронизировать эти страницы, чтобы мне не нужны задержки?

Thansks, Brian

На странице iframe я делаю

  window.onload = doLoad;

  function doLoad() {
      window.parent.SetHitCount(document.getElementById("<%=hdnHitCount.ClientID %>").value);
      return;
  }

На главной странице у меня есть функция JavaScript:

  // called from document iframe to set the hit count
  function SetHitCount(count){
        var hdnHitCount = document.getElementById("<%=hdnHitCount.ClientID %>")
        hdnHitCount.value = count;
        // set in the toolbar. needs a delay so the telerik controls will be ready
        window.setTimeout(function() { 
            var toolbar = $find("<%=RadToolBarDocument.ClientID%>");
            if (toolbar != null) {
                var button = toolbar.findItemByValue("NumberOfHits");
                button.set_text("<%= Resources.Review_Document.Hits %>" + hdnHitCount.value);
            }
       }, 1000); 
  }

1 Ответ

1 голос
/ 25 февраля 2010

Похоже, что ваша проблема не имеет ничего общего с IFrame, поскольку значение hdnHitCount получается без проблем.

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

Жестко закодированный тайм-аут не является хорошим решением. Что если инициализация элемента управления занимает больше секунды (например, на более медленных компьютерах / соединениях)?

Правильный способ сделать это - настроить систему, в которой и инициализация управления, и функция SetHitCount будут проверять, не произошла ли другая:

  • Если при запуске SetHintCount элемент управления доступен, запустите свою логику, в противном случае сохраните счетчик обращений в некоторую переменную
  • Если при инициализации элемента управления эта переменная установлена, заполняйте элемент управления по его значению. В противном случае SetHitCount еще не выполнено и при заполнении элемента управления будет выполнено.
...