Полезная информация

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№108-12-2005 13:14:58

olegs2
Участник
 
Группа: Members
Зарегистрирован: 21-11-2005
Сообщений: 10

out of memory

Вот такой немудреный код приводит к краху Fx, если понажимать кнопку.
Загрузка страницы через http.
Может что-то можно "подкрутить"?

Выделить код

Код:

<?xml version="1.0" encoding="Windows-1251"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://global/locale/config.dtd">

<window id="main" align="left" valign="top"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  onload="recordListBox = document.getElementById('recordList');"
>

<script type="text/javascript; e4x=1">
<![CDATA[
  XML.prettyPrinting = false;
  var recordListBox, xmlsrc;
  var req = new XMLHttpRequest();
  function loadRecords() {
    if (recordListBox.hasChildNodes()) {recordListBox.removeChild(recordListBox.childNodes[0]);}
    req.open("GET", "records.xml", false);
    req.overrideMimeType('text/xml; charset=windows-1251');
    req.send(null);
    if(req.status != 200) {alert('Error loading xml file \n'); return;}
    xmlsrc = new XML(req.responseText);
    var recordListXML = 
<listbox rows="20" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <listcols>
    <listcol style="width: 10em"/>
    <listcol style="width: 10em"/>
    <listcol style="width: 10em"/>
  </listcols>
  <listhead>
    <listheader label="head1"/>
    <listheader label="head2"/>
    <listheader label="head2"/>
  </listhead>
</listbox>;

    for each (var f in xmlsrc['fs'].f) {
      recordListXML.appendChild(makeRecordRows(f));
    }
    var recordListDOM = (new DOMParser()).parseFromString(recordListXML.toXMLString(), 'text/xml');
    recordListBox.appendChild(recordListDOM.documentElement);
  }
  function makeRecordRows(f) {
    var recordFields = f.text().toString().split("•");
    var record = <listitem value={f.@v}/>;
    for (var i = 0; i < recordFields.length; i++) {
      record.appendChild(<listcell label={recordFields[i]}/>);
    }
    return record;
  }
]]>
</script>

<box id="recordList" width="300px" height="400px"/>
<button label="Load records" oncommand="loadRecords();"/>

</window>

файл records.xml:

<l>
  <fs>
    <f v="0"><![CDATA[1000•bbb1•ccc1]]></f>
... 1000 штук ...
  </fs>
</l>

Отсутствует

 

№212-12-2005 09:42:45

olegs2
Участник
 
Группа: Members
Зарегистрирован: 21-11-2005
Сообщений: 10

Re: out of memory

Все дело в функции makeRecordRows.
Видимо построение объекта XML в коротком цикле "захлебывается" и приводит к переполнению какого-то внутреннего буфера. Лечится заменой на сборку просто строки. Ну и DOMParser лучше вставить внутрь appendChild.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]