1

私はこのコードの作成者ではありませんが、現在は維持されていません。だから私はそれを修正しようとしていますが、javascriptの経験はほとんどありません。Firefox 9以降、Components.classesByID["{3a9cd622-264d-11d4-ba06-0060b0fc76dd}"]。廃止されました。代わりに、document.implementation.createDocumentを使用することをお勧めします。ここの誰かがこれらの変更を実装する方法を教えてもらえますか?私は、私が試したすべてのもので頭を叩いているようです。

Mozilla開発者ネットワークでの例は次のとおりです。

    var doc = document.implementation.createDocument ("http://www.w3.org/1999/xhtml", "html", null);
var body = document.createElementNS("http://www.w3.org/1999/xhtml", "body");
body.setAttribute("id", "abc");
doc.documentElement.appendChild(body);
alert(doc.getElementById("abc")); // [object HTMLBodyElement]

そして、私が修正しようとしている.jsmのコードは次のとおりです。

createFgImageData: function helpers_createFgImageData() {

    // I don't know how to load images synchronously *FIX*
    // Until then, this awesome bitmap format below will do. 

    this.fgImageData = {};
    this.fgImageData["check"] = [
        "      *",
        "     **",
        "*   ***",
        "** *** ",
        "*****  ",
        " ***   ",
        "  *    "];
    this.fgImageData["radio"] = [
        " **** ",
        "******",
        "******",
        "******",
        "******",
        " **** "];
    this.fgImageData["menu-ltr"] = [
        "*   ",
        "**  ",
        "*** ",
        "****",
        "*** ",
        "**  ",
        "*   "];
    this.fgImageData["menu-rtl"] = [
        "   *",
        "  **",
        " ***",
        "****",
        " ***",
        "  **",
        "   *"];            

    // I think I'm doing something slightly wrong when creating the document
    // but I'm not sure. It works though. *FIX*

    var domi = Components.classesByID["{3a9cd622-264d-11d4-ba06-0060b0fc76dd}"].
                    createInstance(Components.interfaces.nsIDOMDOMImplementation);
    this.document = domi.createDocument("http://www.w3.org/1999/xhtml", "html", null);
    this.canvas = this.document.createElementNS("http://www.w3.org/1999/xhtml", "html:canvas");

    for(var name in this.fgImageData) {
        if (this.fgImageData.hasOwnProperty(name)) {
            var data = this.fgImageData[name];
            var width = data[0].length;
            var height = data.length;

            this.canvas.width = width;
            this.canvas.height = height;
            var g = this.canvas.getContext("2d");
            g.clearRect(0, 0, width, height);
            var idata = g.getImageData(0, 0, width, height);
            for(var y=0, oy=0; y<height; y++, oy+=idata.width*4)
                for(var x=0, ox=oy; x<width; x++, ox+=4)
                    idata.data[ox+3] = data[y][x] == " " ? 0 : 255;

            this.fgImageData[name] = idata;
        }
    }
}, 
4

2 に答える 2

1

(JavaScriptモジュールのように)実際のウィンドウにアクセスできない場合は、DOMParserを使用してHTMLドキュメントを作成するのがおそらく最善です(このヒントを提供してくれたBorisに感謝します)。これは、任意のコンテキストでインスタンス化できます。

var parser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
                       .createInstance(Components.interfaces.nsIDOMParser);
var dummyDocument = "<html xmlns='http://www.w3.org/1999/xhtml'/>";
this.document = parser.parseFromString(dummyDocument, "text/xml");
this.canvas = this.document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");

2番目のパラメータはでcreateElementNS()ある必要があり"canvas"ます"html:canvas"。名前空間は最初のパラメータで指定されていることに注意してください。また、Firefox 12以降、DOMParserはHTMLコード(MIMEタイプ"text/html")も解析できるため、次のように記述できることにも注意してください。

this.document = parser.parseFromString("", "text/html");

最小限のHTMLドキュメントは確かに空の文字列です。

于 2012-09-09T19:15:21.143 に答える
1

JSMで使用できる既存のドキュメントはありません。いくつかのオプションがあります。

  1. 発信者から関連する親ドキュメントを渡します。
  2. 空の文字列に対してDOMParserを使用するか、空のデータに対してXHRを使用して空白のドキュメントを作成します:URI。
于 2012-09-09T13:06:30.693 に答える