aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/tools/browser_console/index.html
blob: 38742a9e50b4ba7b8beb1cae75579f1ed29ee87e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
---
title: 浏览器控制台
slug: Tools/Browser_Console
translation_of: Tools/Browser_Console
---
<div>{{ToolsSidebar}}</div>

<p>Browser Console (浏览器)控制台类似于<a href="/en-US/docs/Tools/Web_Console">Web控制台</a>,但是其不仅仅作用于某个标签页,更是针对整个浏览器。</p>

<p>因此它会记录与网页控制台相同的日志信息:网络请求,JavaScript脚本,CSS样式表,安全错误和警告,以及JavaScript代码中显式输出的日志信息。然而,它并非只是输出单个网页的此类信息,而是会记录下所有标签页、附加组件和浏览器自身代码的相关信息。</p>

<p>在附加组件或者浏览器代码的常用Web<a href="/en-US/docs/Tools/Tools_Toolbox">工具箱</a>中,如果还想使用其他的Web开发者工具,可以尝试一下<a href="/en-US/docs/Tools/Browser_Toolbox">浏览器工具箱</a></p>

<p>同样,你也可以在浏览器控制台执行JS表达式。这里的区别是,web控制台在页面窗体作用域中执行代码,而浏览器控制台在浏览器窗体作用域中执行代码。 This means you can interact with all the browser's tabs using the <a href="/en-US/docs/Code_snippets/Tabbed_browser" title="/en-US/docs/Code_snippets/Tabbed_browser"><code>gBrowser</code></a> global, and even with the XUL used to specify the browser's user interface.</p>

<div class="geckoVersionNote">
<p>NB: From Firefox 30, the Browser Console command line (to execute JavaScript expressions) is disabled by default. To enable it set the <code>devtools.chrome.enabled</code> preference to <code>true</code> in about:config, or set the "Enable browser {{Glossary("chrome")}} and add-on debugging toolboxes" (Firefox 40 and later) / "Enable {{Glossary("chrome")}} and add-on debugging" (Firefox 38.0.5 and earlier) option in the <a href="/en-US/docs/Tools_Toolbox#Advanced_settings">developer tool settings</a>.</p>
</div>

<h2 id="打开浏览器控制台">打开浏览器控制台</h2>

<p>打开浏览器控制台的两种方式:</p>

<ol>
 <li>激活菜单栏(按Alt),选择 “工具” 的子菜单“Web开发者”的子菜单 “浏览器控制台” (or Tools menu if you display the menu bar or are on OS X)</li>
 <li>使用快捷键: Windows平台 Ctrl+Shift+J 、MAC平台 Cmd+Shift+J .</li>
</ol>

<p>注意直到Firefox 38, if the Browser Console has become hidden by a normal Firefox window and you select it again, either from the menu or from the keyboard, then it will be closed. From Firefox 38 onwards, this instead has the effect of switching the focus back to the Browser Console, which is more likely to be what you wanted.</p>

<p>你也可以通过在命令行启动Firefox并传递 <code>-jsconsole</code> 参数来打开浏览器控制台:</p>

<pre class="notranslate">/Applications/FirefoxAurora.app/Contents/MacOS/firefox-bin -jsconsole</pre>

<p>浏览器控制台如图所示:</p>

<p><img alt="" src="https://mdn.mozillademos.org/files/5847/browser-console-window.png" style="display: block; margin-left: auto; margin-right: auto;"></p>

<p>浏览器控制台的外观、行为看起来和 <a href="/en-US/docs/Tools/Web_Console" title="/en-US/docs/Tools/Web_Console">Web控制台 </a>一样:</p>

<ul>
 <li>窗口的大部分空间被 <a href="/en-US/docs/Tools/Web_Console#Message_Display_Pane" title="/en-US/docs/Tools/Web_Console#Message_Display_Pane">一个展示信息的容器</a></li>
 <li>在顶部有一个<a href="/en-US/docs/Tools/Web_Console#Filtering_and_searching" title="/en-US/docs/docs/Tools/Web_Console#Filtering_and_searching">工具条</a>可以帮助你来筛选你想看到的信息</li>
 <li>最底部是一个<a href="/en-US/docs/Tools/Web_Console#The_command_line_interpreter" title="/en-US/docs/docs/Tools/Web_Console#The_command_line_interpreter">命令行解释器</a>,你可以在这里执行Js表达式</li>
</ul>

<h2 id="浏览器控制台日志">浏览器控制台日志</h2>

<p>浏览器控制台和Web控制台有着相同的日志记录:</p>

<ul>
 <li><a href="/zh-CN/docs/Tools/Web_Console#HTTP_requests" title="/en-US/docs/Tools/Web_Console#HTTP_requests">HTTP请求</a></li>
 <li><a href="/en-US/docs/Tools/Web_Console#Warnings_and_errors" title="/en-US/docs/Tools/Web_Console#Warnings_and_errors">警告和错误</a> (包括JavaScript, CSS, 安全警告和错误,  JavaScript脚本使用 <a href="https://developer.mozilla.org/en-US/docs/Web/API/console" title="/en-US/docs/Web/API/console">console</a> API产生的信息)</li>
 <li><a href="/en-US/docs/Tools/Web_Console#Input.2Foutput_messages" title="/en-US/docs/Tools/Web_Console#Input.2Foutput_messages">输入和输出信息</a>: 命令发送到浏览器通过命令行,然后执行它们.</li>
</ul>

<p>但是,浏览器控制台能显示如下信息(网页控制台不具备的):</p>

<ul>
 <li>所有浏览器标签页的网页内容</li>
 <li>浏览器内部的代码</li>
 <li>附加组件.</li>
</ul>

<h3 id="附加组件(add-ons)的信息">附加组件(add-ons)的信息</h3>

<p>浏览器控制台显示所有的Firefox add-ons信息.</p>

<h4 id="Console.jsm">Console.jsm</h4>

<p>To use the console API from a traditional or bootstrapped add-on, get it from the Console module.</p>

<p>One exported symbol from Console.jsm is "console". Below is an example of how to acess it, which adds a message to the Browser Console.</p>

<pre class="brush: js notranslate">Components.utils.import("resource://gre/modules/devtools/Console.jsm");
console.log("Hello from Firefox code"); //output messages to the console</pre>

<p>Learn more:</p>

<ul>
 <li><a href="/en-US/docs/Web/API/console">console API reference</a></li>
 <li><a href="http://mxr.mozilla.org/mozilla-release/source/toolkit/devtools/Console.jsm">Console.jsm source code in the <span style="line-height: 1.5;">Mozilla Cross-Reference</span></a></li>
</ul>

<h4 id="HUDService">HUDService</h4>

<p>There is also the HUDService which allows access to the Browse Console. The module is available at <a href="http://mxr.mozilla.org/mozilla-release/source/browser/devtools/webconsole/hudservice.js">Mozilla Cross-Reference</a>. We see we can not only access the Browser Console but also Web Console.</p>

<p>Here is an example on how to clear the contents of the Browser console:</p>

<pre class="brush: js notranslate">Components.utils.import("resource://gre/modules/devtools/Loader.jsm");
var HUDService = devtools.require("devtools/webconsole/hudservice");

var hud = HUDService.getBrowserConsole();
hud.jsterm.clearOutput(true);</pre>

<p>If you would like to access the content document of the Browser Console this can be done with the HUDService. This example here makes it so that when you mouse over the "Clear" button it will clear the Browser Console:</p>

<pre class="brush: js notranslate">Components.utils.import("resource://gre/modules/devtools/Loader.jsm");
var HUDService = devtools.require("devtools/webconsole/hudservice");

var hud = HUDService.getBrowserConsole();

var clearBtn = hud.chromeWindow.document.querySelector('.webconsole-clear-console-button');
clearBtn.addEventListener('mouseover', function() {
  hud.jsterm.clearOutput(true);
}, false);</pre>

<h4 id="Bonus_Features_Available">Bonus Features Available</h4>

<p>For <a href="https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/index.html">Add-on SDK</a> add-ons, the console API is available automatically. Here's an example add-on that just logs an error when the user clicks a widget:</p>

<pre class="brush: js notranslate">widget = require("sdk/widget").Widget({
  id: "an-error-happened",
  label: "Error!",
  width: 40,
  content: "Error!",
  onClick: logError
});

function logError() {
  console.error("something went wrong!");
}</pre>

<p>If you <a href="https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/installation.html">build this as an XPI file</a>, then open the Browser Console, then open the XPI file in Firefox and install it, you'll see a widget labeled "Error!" in the Add-on bar:</p>

<p><img alt="" src="https://mdn.mozillademos.org/files/5937/browser-console-addon.png" style="display: block; margin-left: auto; margin-right: auto;">Click the icon. You'll see output like this in the Browser Console:</p>

<p><img alt="" src="https://mdn.mozillademos.org/files/5851/browser-console-addon-output.png" style="display: block; margin-left: auto; margin-right: auto;"></p>

<p>For Add-on SDK-based add-ons only, the message is prefixed with the name of the add-on ("log-error"), making it easy to find all messages from this add-on using the <a href="/en-US/docs/Tools/Web_Console#Filtering_and_searching" title="/en-US/docs/Tools/Web_Console#Filtering_and_searching">"Filter output"</a> search box. By default, only error messages are logged to the console, although <a href="https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/console.html#Logging%20Levels">you can change this in the browser's preferences</a>.</p>

<h2 id="浏览器控制台命令行">浏览器控制台命令行</h2>

<div class="geckoVersionNote">
<p>From Firefox 30, the Browser Console command line is disabled by default. To enable it set the <code>devtools.chrome.enabled</code> preference to <code>true</code> in about:config, or set the "Enable chrome debugging" option in the <a href="/en-US/docs/Tools_Toolbox#Advanced_settings">developer tool settings</a>.</p>
</div>

<p>Like the Web Console, the command line interpreter enables you to evaluate JavaScript expressions in real time:<img alt="" src="https://mdn.mozillademos.org/files/5855/browser-console-commandline.png" style="display: block; margin-left: auto; margin-right: auto;">Also like the Web Console's command line interpreter, this command line supports <a href="/en-US/docs/Tools/Web_Console#Autocomplete" title="/en-US/docs/Tools/Web_Console#Autocomplete">autocomplete</a>, <a href="/en-US/docs/Tools/Web_Console#Command_history" title="/en-US/docs/Tools/Web_Console#Command_history">history</a>, and various <a href="/en-US/docs/Tools/Web_Console#Keyboard_shortcuts" title="/en-US/docs/docs/Tools/Web_Console#Keyboard_shortcuts">keyboard shortcuts </a>and <a href="/en-US/docs/Tools/Web_Console#Helper_commands" title="/en-US/docs/Tools/Web_Console#Helper_commands">helper commands</a>. If the result of a command is an object, you can <a href="/en-US/docs/Tools/Web_Console#Inspecting_objects" title="/en-US/docs/Tools/Web_Console#Inspecting_objects">click on the object to see its details</a>.</p>

<p>But while the Web Console executes code in the scope of the content window it's attached to, the browser console executes code in the scope of the chrome window of the browser. You can confirm this by evaluating <code>window</code>:</p>

<p><img alt="" src="https://mdn.mozillademos.org/files/5867/browser-console-chromewindow.png" style="display: block; margin-left: auto; margin-right: auto;"></p>

<p>This means you can control the browser: opening, closing tabs and windows and changing the content that they host, and modify the browser's UI by creating, changing and removing XUL elements.</p>

<h3 id="Controlling_the_browser">Controlling the browser</h3>

<p>The command line interpreter gets access to the <a href="/en-US/docs/XUL/tabbrowser" title="/en-US/docs/XUL/tabbrowser"><code>tabbrowser</code></a> object, through the <code>gBrowser</code> global, and that enables you to control the browser through the command line. Try running this code in the Browser Console's command line (remember that to send multiple lines to the Browser Console, use Shift+Enter):</p>

<pre class="brush: js notranslate">var newTabBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab);
newTabBrowser.addEventListener("load", function() {
  newTabBrowser.contentDocument.body.innerHTML = "&lt;h1&gt;this page has been eaten&lt;/h1&gt;";
}, true);
newTabBrowser.contentDocument.location.href = "https://mozilla.org/";</pre>

<p>It adds a listener to the currently selected tab's <code>load</code> event that will eat the new page, then loads a new page.</p>

<h3 id="修改浏览器的UI(用户界面)">修改浏览器的UI(用户界面)</h3>

<p>Since the global <code>window</code> object is the browser's chrome window, you can also modify the browser's user interface. On Windows, the following code will add a new item to the browser's main menu:</p>

<pre class="brush: js notranslate">var parent = window.document.getElementById("appmenuPrimaryPane");
var makeTheTea = gBrowser.ownerDocument.defaultView.document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "menuitem");
makeTheTea.setAttribute("label", "A nice cup of tea?");
parent.appendChild(makeTheTea);</pre>

<p><img alt="" src="https://mdn.mozillademos.org/files/5859/browser-console-modify-ui-windows.png" style="display: block; margin-left: auto; margin-right: auto;">On OS X, this similar code will add a new item to the "Tools" menu:</p>

<pre class="brush: js notranslate">var parent = window.document.getElementById("menu_ToolsPopup");
var makeTheTea = gBrowser.ownerDocument.defaultView.document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "menuitem");
makeTheTea.setAttribute("label", "A nice cup of tea?");
parent.appendChild(makeTheTea);</pre>

<p><img alt="" src="https://mdn.mozillademos.org/files/5861/browser-console-modify-ui-osx.png" style="display: block; margin-left: auto; margin-right: auto;"></p>