Вопрос - Настройка динамического HTML с использованием Javascript для iFrames в Windows Mobile 6.1 - IE Mobile6 - PullRequest
1 голос
/ 18 мая 2010

(извините, если это неправильный форум для публикации - я не смог найти ничего, связанного с не родным программированием и связанной с этой темой)

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

// Able to read using 
document.getElementById('iFrameIdentifier').innerHTML;

// On Desktop IE, this code works 
document.getElementById('iFrameId').contentWindow.document.open();
document.getElementById('iFrameId').contentWindow.document.write(dynamicHTML);
document.getElementById('iFrameId').contentWindow.document.close();

В идеале та же функция должна работать так же, как и для div, но она говорит: «Объект не поддерживает этот метод или свойство».

Я также пробовал document.getElementById ('iFrameId'). Document.body.innerHTML.

Это, по-видимому, заменяет весь HTML-код страницы, а не только внутренний HTML.

Я попробовал пару вещей, и они не работали

  • document.getElementById ( 'iFrameId'). Body.innerHTML
  • document.frames [0] .document.body.innerHTML

Моя цель - иметь элемент контейнера, который может содержать динамический HTML, установленный на него.

Я хорошо использовал его до сих пор, когда заметил, что установка innerHTML для div занимает все больше времени из-за onClicks или других методов JS, которые прикрепляются к якорям и изображениям в динамическом HTML. Появляются методы JS или HTML, как-то, как не убирается должным образом (утечка памяти?)

Также обсуждается - http://www.experts -exchange.com / Программирование / Языки / Сценарии / JavaScript / Q_26185526.html # a32779090

Ответы [ 2 ]

0 голосов
/ 20 мая 2010

Хорошо, я вроде решил проблемы, с которыми сталкивался ранее, и большую проблему, связанную с установкой HTML в iFrame на IEMobile. Но у меня все еще есть еще одна PIA, связанная с двойными полосами прокрутки, которую я сейчас изучаю. Кажется, есть больше бедных душ, сталкивающихся с подобной проблемой - если я тоже это исправлю. Я опубликую обновление здесь.

Как я наконец написал в iFrame на IEMobile? Имейте 2 деления, одно для упаковки iFrame, а другое для записи внутри iFrame.

document.getElementById('OuterDiv').innerHTML = '';
document.getElementById('OuterDiv').innerHTML = '<iframe id="iFrameId" src="somefile.html"></iframe>';

Это создает iFrame каждый раз, и в загружаемом файле somefile.html есть InnerDiv.innerHTML, который, похоже, не пропускает память.

В somefile.html будет метод onLoad, который будет извлекать HTML (объяснено ниже о том, как мне удалось его получить) и выполнить

document.getElementById('InnerDiv').innerHTML = dynamicHTML;

Как мне удалось передать HTML между родительским и дочерним iFrame Как хорошо объяснено @bobince ранее, для передачи данных между родителем и дочерним iFrame нужно полагаться на стороннюю службу, такую ​​как cookie или сервер.

На самом деле я использовал ActiveXControl для установки и получения данных из javascript родительского и дочернего iFrame соответственно. Я не рекомендую делать это, если вам нужно ввести элемент управления ActiveX только для этого. У меня случайно уже есть тот, который я использую, чтобы получить динамический HTML во-первых.

Если вам нужна помощь, вы можете написать мне - Twitter @ Swaroop

Спасибо @bobince за вашу помощь. Я отмечаю это как ответ, потому что в нем говорится, что я сделал, чтобы решить проблему.

0 голосов
/ 18 мая 2010

Я пробовал пару вещей, но ни одна из них, похоже, не работает.

Добро пожаловать в IEMobile! Ничто из того, что вы знаете о сценариях DOM, не применимо здесь.

К сожалению, создание сценариев между кадрами в IEMobile6-7 невозможно.

  • frameelement.contentDocument (стандартный метод DOM) недоступен
  • frameelement.contentWindow.document (версия временного решения IE6-7) недоступна
  • массив старой школы Netscape window.frames работает только для фреймов, а не для фреймов
  • передача дочерним документом объекта document в window.parent работает только для фреймов, а не для фреймов. В iframe, window.parent===window.

Итак, я вижу только следующие пути:

  1. использовать фреймы вместо фреймов. Насти. Или,
  2. используйте document.cookie для связи между родителем и потомком: дочерний документ - это просто скрипт, который проверяет наличие определенного cookie в document.cookie на устройстве опроса, и когда он обнаружен, это сообщение от родителя, и он может написать какой-нибудь HTML или что-то еще. Медленно и противно. Или,
  3. использование серверной стороны для вставки содержимого в фреймы, передачи его в качестве аргумента скрипту. Медленно, противно и потенциально небезопасно. Или,
  4. полностью избегайте фреймов (лучше всего, если можете). Или,
  5. сбросить поддержку от IEMobile6-7 (лучше всего для сохранения здравомыслия, если вам это сойдет с рук!)

Появляются методы JS или HTML - это как-то не убраться должным образом (утечка памяти?)

Да, наверное. IEMobile6-7 (*) близко к непригодному для использования в динамическом HTML. Это дает вам прекрасный вкус того, как сценарии были для нас, бедняжек, в Netscape 4 дня.

Старайтесь избегать создания и уничтожения большого количества узлов и обработчиков событий. Сохраняйте страницу как можно более статичной, повторно используя узлы элементов, где это возможно, и устанавливая свойства данных текстовых узлов, предпочитая сносить все на части и делать заново с помощью createElement или innerHTML. Используйте заглушку события (onclick="return this._onclick()") в HTML вместе с записью в _onclick, если вам нужно установить обработчики событий из JavaScript, предпочтительнее воссоздать HTML с новым обработчиком событий (или просто попытаться установить свойство, которое конечно не работает в IEMobile). Избегайте длительных отдельных страниц, когда можете.

Это все равно рухнет, но, надеюсь, это займет больше времени.

*: то есть версии IE, представленные в WinMo до версии 6.1.4, где он стал бесконечно лучшим IEMobile8, продаваемым как «Internet Explorer Mobile 6» (спасибо Microsoft).

...