Я расширял средство просмотра правил css в Firefox Devtools и нашел кое-что интересное: это содержимое chrome://browser/content/devtools/cssruleview.xul:
<?xml version="1.0"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://global/skin/global.css"?>
<?xml-stylesheet href="chrome://browser/content/devtools/styleinspector.css" type="text/css"?>
<?xml-stylesheet href="chrome://browser/skin/devtools/csshtmltree.css" type="text/css"?>
<?xml-stylesheet href="chrome://browser/skin/devtools/common.css" type="text/css"?>
<!DOCTYPE window [
<!ENTITY % inspectorDTD SYSTEM "chrome://browser/locale/devtools/styleinspector.dtd">
%inspectorDTD;
]>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" title="&ruleViewTitle;">
<script type="application/javascript;version=1.8">
window.setPanel = function(panel, iframe) {
Components.utils.import("resource:///modules/devtools/StyleInspector.jsm");
this.ruleview = new RuleViewTool(panel, window, iframe);
}
window.onunload = function() {
if (this.ruleview) {
this.ruleview.destroy();
}
}
</script>
</window>
Тем не менее, инспектор DOM показывает множество различных элементов, всплывающее меню с элементами контекстного меню и т. д. Я пытался наложить это на файл, но это не сработало... возможно, потому что оно генерируется динамически. Это не сработало:
<?xml version="1.0" encoding="utf-8"?>
<overlay id="cssInspectorOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<menupopup id="rule-view-context-menu">
<menuitem id="new-rule-devtooltweak"
label="New Rule..."
accesskey="N"
oncommand="alert('yahoo')"/>
</menupopup>
</overlay>
Глядя на CssRuleView.jsm в Mozilla, я обнаружил, что элементы создаются с помощью createElement, а не файла xul! Интересно, почему они делают это именно так — из соображений производительности или по какой-то другой причине?