私は Mozilla Thunderbird 拡張機能に取り組んでいます。DOM インスペクターとコンソールをインストールし、開発環境を構成して、指先でほとんどの情報を取得できるようにしました。
オーバーレイを使用する際の開発を容易にするために、XUL 要素への参照を取得し、デバッグ/開発目的でログに DOM ツリーを表示したいと考えています。
Web 開発では、単純にブラウザー コンソールにドロップして、次のように入力します。
$('#user-menu').html();
そして、その要素の HTML コンテンツをコンソールに出力します。
ただし、XML/XUL 要素でこれを行う方法は見つかりませんでした。基本的に、XML/XUL DOM を文字列に変換して印刷できるようにしようとしています。
テキストだけを印刷するつもりはありません。SOには、それを示す回答がすでにあります。構造も印刷したいです。
たとえば、id="attachmentList" を持つノードを取得するとします。
var node = $('#attachmentList');
内容を印刷して表示するにはどうすればよいですか。
<hbox id="attachment">
<description>Test</description>
<xbox oncommand="do()">Do Something</xbox>
</hbox>
XML/XUL DOM が id="attachmentList" で識別される要素内にあると仮定しますか?
アップデート:
これは、serializeToString を使用しようとしたときに表示される美しいエラー メッセージです。私は何か間違ったことをしているかもしれないと思っていますが、jQuery と XUL は十分に文書化されていません:
Error: Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER)
[nsIDOMSerializer.serializeToString]
Source file: chrome://demo/content/messageOverlay.js
Line: 72
これが役立つ場合、Thunderbird で jQuery をインポートする方法は次のとおりです。
window.addEventListener("load", function() {
// was hoping this would eliminate that security error
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
var demolog = Components.classes["@mozilla.org/consoleservice;1"].
getService(Components.interfaces.nsIConsoleService);
demolog.logStringMessage("loading overlay...now load jQuery...");
// loading jQuery here...
var jQuery = loadjQuery(window);
demolog.logStringMessage("loaded jQuery...now set $ alias...");
var $ = jQuery;
demolog.logStringMessage("jQuery loaded and configured...");
// register a click handler. When I click this, it fires.
document.getElementById("jamesdemo")
.addEventListener("click", function() {
demolog.logStringMessage("clicked");
// http://stackoverflow.com/questions/6507293/convert-xml-to-string-with-jquery
var oSerializer = Components.classes["@mozilla.org/xmlextras/xmlserializer;1"].
createInstance(Components.interfaces.nsIDOMSerializer);
demolog.logStringMessage( "created XMLSerializer..." );
// this threw the security error
// var sXML = oSerializer.serializeToString($('#attachmentView'));
// as does this...
var sXML = oSerializer.serializeToString(
document.getElementById('#attachmentView'));
// doesn't get this far at all
demolog.logStringMessage("XML = " + sXML);
// when this was in scope, it threw the same error.
demolog.logStringMessage( (new XMLSerializer()).serializeToString($('#attachmentView').get(0).childNodes));
demolog.logStringMessage( "attachmentView = " + $('#attachmentView').get(0).childNodes );
// This prints Object [XULElement], but of course cannot be serialized.
demolog.logStringMessage( "attachmentitem" + $('#attachmentitem').get(0) );
});
});