JavaScript で XTF の実装
2005-09-02


isAttributeHandler: false,
  getScriptingInterfaces: function (count)
  {
    var interfaces = [Components.interfaces.nsIDOMElement,
                      Components.interfaces.nsIDOM3Node,
                      Components.interfaces.nsIDOMEventTarget];

    count.value = interfaces.length;
    return interfaces;
  },

  // nsIXTFVisual (nsIXTFXMLVisual の派生元) の実装
  visualContent: null,
  insertionPoint: null,
  applyDocumentStyleSheets: true,

  // nsIXTFXMLVisual の実装
  onCreated: function (/* nsIXTFXMLVisualWrapper */ wrapper)
  {
    ...

    var builder = Components.classes["@mozilla.org/xtf/xml-contentbuilder;1"]
                            .createInstance(
                              Components.interfaces.nsIXMLContentBuilder);
    builder.setElementNamespace("http://www.w3.org/1999/xhtml");

    builder.beginElement("table");
      ...
    builder.endElement(); // table

    this.visualContent = builder.root;
  },

  // nsISupports の実装
  QueryInterface: function (iid)
  {
    if (iid.equals(Components.interfaces.nsIXTFXMLVisual) ||
        iid.equals(Components.interfaces.nsIXTFVisual) ||
        iid.equals(Components.interfaces.nsIXTFElement) ||
        iid.equals(Components.interfaces.nsISupports))
      return this;

    Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
    return null;
  }
};

まずは elementType[LINK] にそれがどういう種類の要素か指定する。指定できる値は以下のとおり。指定した値によって追加のインターフェースを実装する必要あり。

elementType プロパティに指定できる値
説明 インターフェース
ELEMENT_TYPE_GENERIC_ELEMENT 表示には反映されない要素を表すみたい。HTML での link 要素とか script 要素とかみたいなものか。 nsIXTFGenericElement
ELEMENT_TYPE_SVG_VISUAL SVG を使って表示する要素を表すみたい。 nsIXTFSVGVisual
ELEMENT_TYPE_XML_VISUAL 何らかの内容を表示する一般的な要素。とりあえず SVG を使わないのならこれを指定しておけばいいのか? nsIXTFXMLVisual
ELEMENT_TYPE_XUL_VISUAL XUL 要素と同等の要素? nsIXTFXULVisual
ELEMENT_TYPE_BINDABLE XBL によるバインディングが可能な要素? nsIXTFBindableElement

isAttributeHandler[LINK] はとりあえず false にしておけばよさそう。true にすると nsIXTFAttributeHandler インターフェース


続きを読む
戻る
[Mozilla Firefox]
[JavaScript]

コメント(全0件)
コメントをする


記事を書く
 powered by ASAHIネット