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

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

№123-11-2005 11:03:22

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

Проблема с parseFromString

Может кто-нибудь встречался с неправильной обработкой <listbox> ?
Исходный текст:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>

<window
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  style="overflow: auto;" align="left" valign="top"
>

<script type="text/javascript; e4x=1">
<![CDATA[
function testParser() {
  var b1 = document.getElementById('b1');
  var b2 = document.getElementById('b2');
  var fragment1 =
    <box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
      <button label="fragment1"/>
    </box>;
  b1.appendChild((new DOMParser()).parseFromString(fragment1.toXMLString(), 'text/xml').documentElement);
  var fragment2 =
    <box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
      <listbox id="theList2">
        <listitem label="Ruby"/>
        <listitem label="Emerald"/>
        <listitem label="Sapphire"/>
        <listitem label="Diamond"/>
      </listbox>
      <button label="fragment2"/>
    </box>;
  b2.appendChild((new DOMParser()).parseFromString(fragment2.toXMLString(), 'text/xml').documentElement);
}
]]>
</script>

<listbox id="theList">
  <listitem label="Ruby"/>
  <listitem label="Emerald"/>
  <listitem label="Sapphire"/>
  <listitem label="Diamond"/>
</listbox>

<box>
  <button label="testParser" oncommand="testParser();"/>
</box>
<hbox>
  <box id="b1"/>
  <box id="b2"/>
</hbox>

</window>


Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8)
Gecko/20051107 Firefox/1.5

Отсутствует

 

№223-11-2005 15:06:51

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Проблема с parseFromString

olegs2, в чём выражается "неправильность" обработки ? Расскажите, дайте скриншот и т. д.

А вообще, в вашем коде по-меньшей мере 4 ошибки:

1.

Выделить код

Код:

...
  var fragment1 =
    <box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
      <button label="fragment1"/>
    </box>;
...

Впервые вижу такую конструкцию (может, я чего-то не знаю ?). По-моему, правильно будет так:

Выделить код

Код:

...
  var fragment1 =
    '<box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">\
<button label="fragment1"/>\
</box>';
...

* Теперь переменная fragment1 определена и имеет тип string.
(Важно: теги должны следовать друг за другом, без текстовых узлов между ними - вот так: <tag1><tag2><...<tagn/>...></tag2></tag1>)

2.

Выделить код

Код:

...parseFromString(fragment1.toXMLString(), ...

Ну нет у string метода toXMLString() (я опять чего-то не знаю ?). С учётом моей поправки (1), я бы записал этот участок кода так:

Выделить код

Код:

...parseFromString(fragment1, ...

3, 4. Аналогично 1, 2 - но в отношении переменной fragment2.

Отредактировано Anton (23-11-2005 16:24:28)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№323-11-2005 15:46:30

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

Re: Проблема с parseFromString

Anton, спасибо за развернутый ответ!
Я пытаюсь использовать расширение e4x, добавленное в javascript, начиная с версии Firefox 1.5.
Конструкции вида var v = <tag>; работают и сильно сокращают и упрощают исходный код.
Обнаружил неработоспособность пока только тега <listbox>, который "почти collapsed".
Кстати, проблем с fragment1 как раз нет.

Отсутствует

 

№423-11-2005 16:28:27

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Проблема с parseFromString

olegs2 пишет

...Я пытаюсь использовать расширение e4x, добавленное в javascript, начиная с версии Firefox 1.5...

Ага, вот чего я не знаю.

...Обнаружил неработоспособность пока только тега <listbox>, который "почти collapsed"...

Ну, а я обнаружил решение :) Нужны ещё теги <listrows>.

Вот в этот

Выделить код

Код:

...
      <listbox id="theList2">
        <listitem label="Ruby"/>
        <listitem label="Emerald"/>
        <listitem label="Sapphire"/>
        <listitem label="Diamond"/>
      </listbox>
...

их и добавляем:

Выделить код

Код:

...
      <listbox id="theList2"><listrows>
        <listitem label="Ruby"/>
        <listitem label="Emerald"/>
        <listitem label="Sapphire"/>
        <listitem label="Diamond"/></listrows>
      </listbox>
...

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№524-11-2005 13:54:48

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

Re: Проблема с parseFromString

Добавление <listrows> решает проблему визуализации, но в результате получается что-то похожее на listbox, но не listbox. Все-таки мешали узлы #text. Вылечилось добавлением оператора
XML.prettyPrinting = false;
Ниже работающий вариант, кому интересно.

Выделить код

Код:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>

<window
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  style="overflow: auto;" align="left" valign="top"
>

<script type="text/javascript; e4x=1">
<![CDATA[
function testParser() {
//XML.ignoreWhitespace = true;
XML.prettyPrinting = false;
  var b1 = document.getElementById('b1');
  var b2 = document.getElementById('b2'); 
  var fragment1 = 
    <box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
      <button label="fragment1"/>
    </box>;
  b1.appendChild((new DOMParser()).parseFromString(fragment1.toXMLString(), 'text/xml').documentElement);
  var fragment2 = 
<box xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <listbox rows="3">
    <listcols>
      <listcol style="width: 10em;"/>
      <listcol style="width: 10em;"/>
      <listcol style="width: 10em;"/>
    </listcols>
    <listhead>
      <listheader label="aaa"/>
      <listheader label="bbb"/>
      <listheader label="ccc"/>
    </listhead>
    <listitem value="1">
      <listcell label="aaa1"/>
      <listcell label="bbb1"/>
      <listcell label="ccc1"/>
    </listitem>
    <listitem value="2">
      <listcell label="aaa2"/>
      <listcell label="bbb2"/>
      <listcell label="ccc2"/>
    </listitem>
    <listitem value="3">
      <listcell label="aaa3"/>
      <listcell label="bbb3"/>
      <listcell label="ccc3"/>
    </listitem>
    <listitem value="4">
      <listcell label="aaa4"/>
      <listcell label="bbb4"/>
      <listcell label="ccc4"/>
    </listitem>
  </listbox>
</box>;
  b2.appendChild((new DOMParser()).parseFromString(fragment2.toXMLString(), 'text/xml').documentElement);
}
]]>
</script>

<hbox>
</hbox>
<box>
  <button label="testParser" oncommand="testParser();"/>
</box>
<hbox>
  <box id="b1"/>
  <box id="b2"/>
</hbox>

</window>

:::: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8) Gecko/20051107 Firefox/1.5

Отсутствует

 

№624-11-2005 18:01:25

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Проблема с parseFromString

olegs2 пишет

Добавление <listrows> решает проблему визуализации, но в результате получается что-то похожее на listbox, но не listbox...

olegs2, можно подробней ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№725-11-2005 08:52:59

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

Re: Проблема с parseFromString

Здравствуйте, Anton.
Пример <listbox> я, не долго думая, взял из elemref. Чисто для пробы. Вставил его "как есть" и, его же, через скрипт. Через скрипт, как я уже говорил, на экране появилась некая белиберда. Затем, по вашему совету, добавил <listrows>. Перед этим посмотрел в elemref, убедился, что не слепой (его там нет), посмотрел DOM, убедился, что он есть. И вот он, родной listbox, на экране. Правда на мышку и курсор не реагирует, в отличие от своего "близнеца".
Соорудил более развернутую конструкцию (последний пример) + <listrows>. Пробовал в различных комбинациях, которые приводили либо к ошибкам, либо вышибали Firefox. Попробовал сплошную строку тегов (еще раз спасибо за совет) - работает. Поиски средств подавления #text привели к XML.prettyPrinting = false;.
Voilà!

З.Ы.
Вам лично могу послать материалы по e4x, которые я собрал, если интересно.

Отсутствует

 

№825-11-2005 16:36:34

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Проблема с parseFromString

olegs2 пишет

...могу послать материалы по e4x, которые я собрал, если интересно.

Не откажусь. Спасибо.
antonglv на gmail.com ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

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