diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/pt-br/mozilla | |
parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip |
initial commit
Diffstat (limited to 'files/pt-br/mozilla')
174 files changed, 20346 insertions, 0 deletions
diff --git a/files/pt-br/mozilla/add-ons/code_snippets/canvas/index.html b/files/pt-br/mozilla/add-ons/code_snippets/canvas/index.html new file mode 100644 index 0000000000..5178d91a50 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/code_snippets/canvas/index.html @@ -0,0 +1,235 @@ +--- +title: Canvas fragmentos de códigos +slug: Mozilla/Add-ons/Code_snippets/Canvas +translation_of: Archive/Add-ons/Code_snippets/Canvas +--- +<p>Para informações gerais sobre o uso do <code><canvas></code> ver a <a class="internal" href="/en-US/docs/Web/API/Canvas_API" title="En/HTML/Canvas">página do tópico canvas</a>.</p> + +<h2 id="Código_usável_do_conteúdo_da_Web">Código usável do conteúdo da Web</h2> + +<h3 id="Recebendo_o_número_de_pixels_de_uma_certa_cor_em_um_canvas">Recebendo o número de pixels de uma certa cor em um canvas</h3> + +<p>A função a seguir retornará o número de pixels em um canvas que a cor RGB de r, g e b. Isso pode ser muito útil para comparar, por exemplo se um usuário pintou sobre uma outra área como explicado <a href="https://hacks.mozilla.org/2013/06/building-a-simple-paint-game-with-html5-canvas-and-vanilla-javascript/" title="https://hacks.mozilla.org/2013/06/building-a-simple-paint-game-with-html5-canvas-and-vanilla-javascript/">nessa publicação do blog</a>.</p> + +<pre class="brush: js">function getpixelamount(canvas, r, g, b) { + var cx = canvas.getContext('2d'); + var pixels = cx.getImageData(0, 0, canvas.width, canvas.height); + var all = pixels.data.length; + var amount = 0; + for (i = 0; i < all; i += 4) { + if (pixels.data[i] === r && + pixels.data[i + 1] === g && + pixels.data[i + 2] === b) { + amount++; + } + } + return amount; +}; +</pre> + +<h3 id="Recebendo_a_cor_de_um_pixel_em_um_canvas">Recebendo a cor de um pixel em um canvas</h3> + +<p>Esse fragmento a seguir retorna um objeto com os valores RGBA do pixel na posição x e y do canvas. Isso pode ser usado para determinar se o cursor do mouse está dentro de uma certa forma ou não.</p> + +<pre class="brush: js">function getpixelcolour(canvas, x, y) { + var cx = canvas.getContext('2d'); + var pixel = cx.getImageData(x, y, 1, 1); + return { + r: pixel.data[0], + g: pixel.data[1], + b: pixel.data[2], + a: pixel.data[3] + }; +} +</pre> + +<h3 id="Encadeamento_de_métodos">Encadeamento de métodos</h3> + +<p>Essa classe prove um estilo JQuery de acesso encadeado aos métodos e propriedades do contexto 2D.</p> + +<pre class="brush: js">function Canvas2DContext(canvas) { + if (typeof canvas === 'string') { + canvas = document.getElementById(canvas); + } + if (!(this instanceof Canvas2DContext)) { + return new Canvas2DContext(canvas); + } + this.context = this.ctx = canvas.getContext('2d'); + if (!Canvas2DContext.prototype.arc) { + Canvas2DContext.setup.call(this, this.ctx); + } +} +Canvas2DContext.setup = function () { + var methods = ['arc','arcTo','beginPath','bezierCurveTo','clearRect','clip', + 'closePath','drawImage','fill','fillRect','fillText','lineTo','moveTo', + 'quadraticCurveTo','rect','restore','rotate','save','scale','setTransform', + 'stroke','strokeRect','strokeText','transform','translate']; + + var getterMethods = ['createPattern','drawFocusRing','isPointInPath','measureText', // drawFocusRing not currently supported + // The following might instead be wrapped to be able to chain their child objects + 'createImageData','createLinearGradient', + 'createRadialGradient', 'getImageData','putImageData' + ]; + + var props = ['canvas','fillStyle','font','globalAlpha','globalCompositeOperation', + 'lineCap','lineJoin','lineWidth','miterLimit','shadowOffsetX','shadowOffsetY', + 'shadowBlur','shadowColor','strokeStyle','textAlign','textBaseline']; + + for (let m of methods) { + let method = m; + Canvas2DContext.prototype[method] = function () { + this.ctx[method].apply(this.ctx, arguments); + return this; + }; + } + + for (let m of getterMethods) { + let method = m; + Canvas2DContext.prototype[method] = function () { + return this.ctx[method].apply(this.ctx, arguments); + }; + } + + for (let p of props) { + let prop = p; + Canvas2DContext.prototype[prop] = function (value) { + if (value === undefined) + return this.ctx[prop]; + this.ctx[prop] = value; + return this; + }; + } +}; + +var canvas = document.getElementById('canvas'); + +// Use context to get access to underlying context +var ctx = Canvas2DContext(canvas) + .strokeStyle("rgb(30,110,210)") + .transform(10, 3, 4, 5, 1, 0) + .strokeRect(2, 10, 15, 20) + .context; + +// Use property name as a function (but without arguments) to get the value +var strokeStyle = Canvas2DContext(canvas) + .strokeStyle("rgb(50,110,210)") + .strokeStyle(); +</pre> + +<h2 id="Saving_a_canvas_image_to_a_file" name="Saving_a_canvas_image_to_a_file">Código usável apenas para código previlegiado</h2> + +<p>Esse fragmento só é útl para códigos previlegiados, como extensões ou aplicativos previlegiados.</p> + +<h3 id="Saving_a_canvas_image_to_a_file" name="Saving_a_canvas_image_to_a_file">Salvando uma imagem do canvas à um arquivo</h3> + +<p>A função a seguir aceita um objeto canvas e uma string de destinação do caminho do arquivo. O canvas é convertido para um arquivo PNG e, é salvo na localização especificada. A função retorna uma promessa que resolve quando o arquivo foi completamente salvo.</p> + +<pre class="brush: js">function saveCanvas(canvas, path, type, options) { + return Task.spawn(function *() { + var reader = new FileReader; + var blob = yield new Promise(accept => canvas.toBlob(accept, type, options)); + reader.readAsArrayBuffer(blob); + + yield new Promise(accept => { reader.onloadend = accept }); + + return yield OS.File.writeAtomic(path, new Uint8Array(reader.result), + { tmpPath: path + '.tmp' }); + }); +} +</pre> + +<h3 id="Loading_a_remote_page_onto_a_canvas_element" name="Loading_a_remote_page_onto_a_canvas_element">Carregando uma página remota em um elemento canvas</h3> + +<p>A classe a seguir primeiro cria um elemento iframe oculto e anexa um ouvinte ao evento carregar frame. Uma vez que a página remota foi carregada, o método remotePageLoaded é ativado. Esse método pega uma referência da janela do iframe e desenha essa janela no objeto canvas.</p> + +<p>Note que isso só funciona se você esta rodando a página no chrome. Se você tentar rodar o código como uma página da web simples, você receberá um 'Erro de segurança" código: erro "1000'.</p> + +<pre class="brush: js">RemoteCanvas = function() { + this.url = "http://developer.mozilla.org"; +}; + +RemoteCanvas.CANVAS_WIDTH = 300; +RemoteCanvas.CANVAS_HEIGHT = 300; + +RemoteCanvas.prototype.load = function() { + var windowWidth = window.innerWidth - 25; + var iframe; + iframe = document.createElement("iframe"); + iframe.id = "test-iframe"; + iframe.height = "10px"; + iframe.width = windowWidth + "px"; + iframe.style.visibility = "hidden"; + iframe.src = this.url; + // Here is where the magic happens... add a listener to the + // frame's onload event + iframe.addEventListener("load", this.remotePageLoaded, true); + //append to the end of the page + window.document.body.appendChild(iframe); + return; +}; + +RemoteCanvas.prototype.remotePageLoaded = function() { + // Look back up the iframe by id + var ldrFrame = document.getElementById("test-iframe"); + // Get a reference to the window object you need for the canvas + // drawWindow method + var remoteWindow = ldrFrame.contentWindow; + + //Draw canvas + var canvas = document.createElement("canvas"); + canvas.style.width = RemoteCanvas.CANVAS_WIDTH + "px"; + canvas.style.height = RemoteCanvas.CANVAS_HEIGHT + "px"; + canvas.width = RemoteCanvas.CANVAS_WIDTH; + canvas.height = RemoteCanvas.CANVAS_HEIGHT; + var windowWidth = window.innerWidth - 25; + var windowHeight = window.innerHeight; + + var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, + RemoteCanvas.CANVAS_WIDTH, + RemoteCanvas.CANVAS_HEIGHT); + ctx.save(); + ctx.scale(RemoteCanvas.CANVAS_WIDTH / windowWidth, + RemoteCanvas.CANVAS_HEIGHT / windowHeight); + ctx.drawWindow(remoteWindow, + 0, 0, + windowWidth, windowHeight, + "rgb(255,255,255)"); + ctx.restore(); +}; +</pre> + +<p>Emprego:</p> + +<pre class="brush: js">var remoteCanvas = new RemoteCanvas(); +remoteCanvas.load(); +</pre> + +<h3 id="Loading_a_remote_page_onto_a_canvas_element" name="Loading_a_remote_page_onto_a_canvas_element">Converter arquivos de imagem para strings base64</h3> + +<p>O código a seguir recebe uma imagem remota e converte seu conteúdo para <code><a href="/en/data_URIs">Dados do esquema URI</a></code>.</p> + +<pre class="brush: js">var canvas = document.createElement("canvas"); +var ctxt = canvas.getContext("2d"); +function loadImageFile (url, callback) { + var image = new Image(); + image.src = url; + return new Promise((accept, reject) => { + image.onload = accept; + image.onerror = reject; + }).then(accept => { + canvas.width = this.width; + canvas.height = this.height; + ctxt.clearRect(0, 0, this.width, this.height); + ctxt.drawImage(this, 0, 0); + accept(canvas.toDataURL()); + }); +} +</pre> + +<p>Emprego:</p> + +<pre class="brush: js">loadImageFile("myimage.jpg").then(string64 => { alert(string64); }); +</pre> + +<p>Se você quer receber ao invés do conteúdo base64 de um arquivo local usando o arquivo elemento {{ HTMLElement("input") }}, você deve usar o objeto <code><a href="/en/DOM/FileReader#readAsDataURL%28%29" title="en/DOM/FileReader#readAsDataURL%28%29">FileReader</a></code>.</p> diff --git a/files/pt-br/mozilla/add-ons/code_snippets/index.html b/files/pt-br/mozilla/add-ons/code_snippets/index.html new file mode 100644 index 0000000000..a3e51b03df --- /dev/null +++ b/files/pt-br/mozilla/add-ons/code_snippets/index.html @@ -0,0 +1,173 @@ +--- +title: Snippets de código +slug: Mozilla/Add-ons/Code_snippets +tags: + - Add-ons + - Code snippets + - Extensions + - NeedsTranslation + - TopicStub +translation_of: Archive/Add-ons/Code_snippets +--- +<div class="warning"> + <p> + O suporte para extensões que usam XUL/XPCOM ou <span lang="en">Add-on SDK</span> foi removido no Firefox 57, lançado em novembro de 2017. Como não há versão suportada do Firefox ativando essas tecnologias, essa página será removida em dezembro de 2020. + </p> + + <p> + Os complementos que usam as técnicas descritas neste documento são considerados código legado no Firefox. Não use essas técnicas para desenvolver novos complementos. + Use <a href="/pt-BR/docs/Mozilla/Add-ons/WebExtensions"><span lang="en">WebExtensions</span></a>. Se você mantém um complemento que usa as técnicas descritas aqui, considere migrar para usar <span lang="en">WebExtensions</span>. + </p> + + <p> + <strong> + A partir do <a href="https://wiki.mozilla.org/RapidRelease/Calendar">Firefox 53</a>, nenhum código legado será aceito no <span lang="en">addons.mozilla.org (AMO)</span> para Firefox e Firefox para Android. + </strong> + </p> + + <p> + <strong> + A partir do <a href="https://wiki.mozilla.org/RapidRelease/Calendar">Firefox 57</a>, apenas as extensões desenvolvidas usando as APIs <span lang="en">WebExtensions</span> serão suportadas no Firefox e Firefox para Android. + </strong> + </p> + + <p> + Mesmo antes do Firefox 57, as mudanças na plataforma Firefox quebraram muitas extensões legado. Essas alterações incluem o multiprocessamento do Firefox (e10s), + <span lang="en">sandboxing</span> e múltiplos processos de conteúdo. As extensões legado afetadas por essas alterações devem migrar para usar as APIs <span lang="en">WebExtensions</span>, se possível. + Consute o <a href="https://blog.mozilla.org/addons/2017/02/16/the-road-to-firefox-57-compatibility-milestones/">documento de "Marcos de compatibilidade"</a> para mais informações. + </p> + + <p> + Uma página wiki contendo <a href="https://wiki.mozilla.org/Add-ons/developer/communication">recursos, caminhos de migração, expediente e mais</a>, está disponível para ajudar os desenvolvedores a fazer a transição para as novas tecnologias. + </p> +</div> + + + +<p> + Esta é uma lista rápida de snippets de código (pequenos exemplos úteis de código) disponíveis para desenvolvedores de extensões para os vários aplicativos Mozilla. Muitos desses exemplos também podem ser usados em aplicativos XULRunner, bem como no próprio código Mozilla. +</p> + +<p> + Esses exemplos demonstram como realizar tarefas básicas que podem não ser imediatamente óbvias. +</p> + +<h2 id="General" name="General">General</h2> + +<dl> + <dt><a href="/en-US/docs/Code_snippets/From_articles" title="/en-US/docs/Code_snippets/From_articles">Examples and demos from MDN articles</a></dt> + <dd>A collection of examples and demos from articles.</dd> + <dt><a href="/en-US/docs/Code_snippets/Windows" title="/en-US/docs/Code_snippets/Windows">Window code</a></dt> + <dd>Opening and manipulating windows</dd> + <dt><a href="/en-US/docs/Code_snippets/Toolbar" title="/en-US/docs/Code_snippets/Toolbar">Toolbar</a></dt> + <dd>Toolbar related code</dd> + <dt><a href="/en-US/docs/Code_snippets/Sidebar" title="/en-US/docs/Code_snippets/Sidebar">Sidebar</a></dt> + <dd>Sidebar related code</dd> + <dt><a href="/en-US/docs/Code_snippets/Forms">Forms</a></dt> + <dd>Forms related code</dd> + <dt><a href="/en-US/docs/Code_snippets/XML" title="/en-US/docs/Code_snippets/XML">XML</a></dt> + <dd>Code used to parse, write, manipulate, etc. XML</dd> + <dt><a href="/en-US/docs/Code_snippets/File_I_O" title="/en-US/docs/Code_snippets/File_I/O">File I/O</a></dt> + <dd>Code used to read, write and process files</dd> + <dt><a href="/en-US/docs/Code_snippets/Drag_&_Drop" title="/en-US/docs/Code_snippets/Drag_&_Drop">Drag & Drop</a></dt> + <dd>Code used to setup and handle drag and drop events</dd> + <dt><a href="/en-US/docs/Code_snippets/Dialogs_and_Prompts" title="/en-US/docs/Code_snippets/Dialogs_and_Prompts">Dialogs</a></dt> + <dd>Code used to display and process dialog boxes</dd> + <dt><a href="/en-US/docs/Code_snippets/Alerts_and_Notifications" title="/en-US/docs/Code snippets/Alerts and Notifications">Alerts and Notifications </a></dt> + <dd>Modal and non-modal ways to notify users</dd> + <dt><a href="/en-US/docs/Code_snippets/Preferences" title="/en-US/docs/Code_snippets/Preferences">Preferences</a></dt> + <dd>Code used to read, write, and modify preferences</dd> + <dt><a href="/en-US/docs/Code_snippets/JS_XPCOM" title="/en-US/docs/Code_snippets/JS_XPCOM">JS XPCOM</a></dt> + <dd>Code used to define and call XPCOM components in JavaScript</dd> + <dt><a href="/en-US/docs/Code_snippets/Running_applications" title="/en-US/docs/Code_snippets/Running_applications">Running applications</a></dt> + <dd>Code used to run other applications</dd> + <dt><a href="/en-US/docs/Code_snippets/Canvas" title="/en-US/docs/Code_snippets/Canvas"><code><canvas></code> related</a></dt> + <dd><a href="/en-US/docs/HTML/Canvas" title="/en-US/docs/HTML/Canvas">WHAT WG Canvas</a>-related code</dd> + <dt><a href="/en-US/docs/Signing_a_XPI" title="/en-US/docs/Signing_a_XPI">Signing a XPI</a></dt> + <dd>How to sign an XPI with PKI</dd> + <dt><a href="/en-US/docs/Code_snippets/Threads">Delayed Execution</a></dt> + <dd>Performing background operations.</dd> + <dt><a href="/en-US/docs/Code_snippets/Miscellaneous" title="/en-US/docs/Code_snippets/Miscellaneous">Miscellaneous</a></dt> + <dd>Miscellaneous useful code fragments</dd> + <dt><a href="/en-US/docs/Code_snippets/HTML_to_DOM" title="/en-US/docs/Code_snippets/HTML_to_DOM">HTML to DOM</a></dt> + <dd>Using a hidden browser element to parse HTML to a window's DOM</dd> +</dl> + +<h2 id="javascript-libraries" name="javascript-libraries">JavaScript libraries</h2> + +<p>Here are some JavaScript libraries that may come in handy.</p> + +<dl> + <dt><a href="/en-US/docs/Code_snippets/StringView" title="/en-US/docs/Code_snippets/StringView">StringView</a></dt> + <dd>A library that implements a <code>StringView</code> view for <a href="/en-US/docs/Web/JavaScript/Typed_arrays" title="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a>. This lets you access data in typed arrays using C-like string functions.</dd> + <dt><a href="/en-US/Add-ons/Code_snippets/Rosetta" title="/en-US/docs/Code_snippets/Rosetta">Rosetta</a></dt> + <dd>By default, the only possible standardized scripting language for HTML is <strong>ECMAScript</strong>. Hence, if you are going to use another scripting language you might expect that most of the browsers will not recognize it. Nevertheless, the increasing computational power of modern browsers together with the introduction of <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays">typed arrays</a> in ECMAScript allow us, in theory, to build full <a class="external external-icon" href="https://en.wikipedia.org/wiki/Virtual_machine">virtual machines</a> in pure ECMAScript. Therefore, it is also possible, in theory, to use ECMAScript for a smaller task: parsing exotic programming languages (i.e., creating compilers). This snippets shows a possible way to start from.</dd> +</dl> + +<h2 id="Browser-oriented_code" name="Browser-oriented_code">Browser-oriented code</h2> + +<dl> + <dt><a href="/en-US/docs/Code_snippets/Tabbed_browser" title="/en-US/docs/Code_snippets/Tabbed_browser">Tabbed browser code</a> (Firefox/SeaMonkey)</dt> + <dd>Basic operations, such as page loading, with the tabbed browser, which is the heart of Mozilla's browser applications</dd> + <dt><a href="/en-US/docs/Code_snippets/Cookies" title="/en-US/docs/Code_snippets/Cookies">Cookies</a></dt> + <dd>Reading, writing, modifying, and removing cookies</dd> + <dt><a href="/en-US/docs/Code_snippets/Page_Loading" title="/en-US/docs/Code_snippets/Page_Loading">Page Loading</a></dt> + <dd>Code used to load pages, reload pages, and listen for page loads</dd> + <dt><a href="/en-US/docs/Code_snippets/Interaction_between_privileged_and_non-privileged_pages" title="/en-US/docs/Code_snippets/Interaction_between_privileged_and_non-privileged_pages">Interaction between privileged and non-privileged code</a></dt> + <dd>How to communicate from extensions to websites and vice-versa.</dd> + <dt><a href="/en-US/docs/Code_snippets/Downloading_Files" title="/en-US/docs/Code_snippets/Downloading_Files">Downloading Files</a></dt> + <dd>Code to download files, images, and to monitor download progress</dd> + <dt><a href="/en-US/docs/Code_snippets/Password_Manager" title="/en-US/docs/Code_snippets/Password_Manager">Password Manager</a></dt> + <dd>Code used to read and write passwords to/from the integrated password manager</dd> + <dt><a href="/en-US/docs/Code_snippets/Bookmarks" title="/en-US/docs/Code_snippets/Bookmarks">Bookmarks</a></dt> + <dd>Code used to read and write bookmarks</dd> + <dt><a href="/en-US/docs/Code_snippets/JavaScript_Debugger_Service" title="/en-US/docs/Code_snippets/JavaScript_Debugger_Service">JavaScript Debugger Service</a></dt> + <dd>Code used to interact with the JavaScript Debugger Service</dd> +</dl> + +<h2 id="SVG" name="SVG">SVG</h2> + +<dl> + <dt><a href="/en-US/docs/Code_snippets/SVG_General" title="/en-US/docs/Code_snippets/SVG_General">General</a></dt> + <dd>General information and utilities</dd> + <dt><a href="/en-US/docs/Code_snippets/SVG_Animation" title="/en-US/docs/Code_snippets/SVG_Animation">SVG Animation</a></dt> + <dd>Animate SVG using JavaScript and SMIL</dd> + <dt><a href="/en-US/docs/Code_snippets/SVG_Interacting_with_script" title="/en-US/docs/Code_snippets/SVG_Interacting_with_script">SVG Interacting with Script</a></dt> + <dd>Using JavaScript and DOM events to create interactive SVG</dd> + <dt><a href="/en-US/docs/Code_snippets/Embedding_SVG" title="/en-US/docs/Code_snippets/Embedding_SVG">Embedding SVG in HTML and XUL</a></dt> + <dd>Using SVG to enhance HTML or XUL based markup</dd> +</dl> + +<h2 id="XUL_Widgets" name="XUL_Widgets">XUL Widgets</h2> + +<dl> + <dt><a href="/en-US/docs/Code_snippets/HTML_in_XUL_for_rich_tooltips" title="/en-US/docs/Code_snippets/HTML_in_XUL_for_rich_tooltips">HTML in XUL for Rich Tooltips</a></dt> + <dd>Dynamically embed HTML into a XUL element to attain markup in a tooltip</dd> + <dt><a href="/en-US/docs/Code_snippets/Label_and_description" title="/en-US/docs/Code_snippets/Label_and_description">Label and description</a></dt> + <dd>Special uses and line breaking examples</dd> + <dt><a href="/en-US/docs/Code_snippets/Tree" title="/en-US/docs/Code_snippets/Tree">Tree</a></dt> + <dd>Setup and manipulation of trees using XUL and JS</dd> + <dt><a href="/en-US/docs/Code_snippets/Scrollbar" title="/en-US/docs/Code_snippets/Scrollbar">Scrollbar</a></dt> + <dd>Changing style of scrollbars. Applies to scrollbars in browser and iframe as well.</dd> + <dt><a href="/en-US/docs/Code_snippets/Autocomplete" title="/en-US/docs/Code_snippets/Autocomplete">Autocomplete</a></dt> + <dd>Code used to enable form autocomplete in a browser</dd> + <dt><a href="/en-US/docs/Code_snippets/Boxes" title="/en-US/docs/Code_snippets/Boxes">Boxes</a></dt> + <dd>Tips and tricks when using boxes as containers</dd> + <dt><a class="internal" href="/en-US/docs/Code_snippets/Tabbox" title="/en-US/docs/Code snippets/Tabbox">Tabbox</a></dt> + <dd>Removing and manipulating tabs in a tabbox</dd> +</dl> + +<h2 id="Windows-specific" name="Windows-specific">Windows-specific</h2> + +<dl> + <dt><a href="/en-US/docs/Code_snippets/Finding_Window_Handles" title="/en-US/docs/Code_snippets/Finding_Window_Handles">Finding Window Handles (HWND)</a> (Firefox)</dt> + <dd>How to use Windows API calls to find various kinds of Mozilla window handles. Window handles can be used for IPC and Accessibility purposes.</dd> + <dt><a href="/en-US/docs/Accessing_the_Windows_Registry_Using_XPCOM" title="/en-US/docs/Accessing_the_Windows_Registry_Using_XPCOM">Using the Windows Registry with XPCOM</a></dt> + <dd>How to read, write, modify, delete, enumerate, and watch registry keys and values.</dd> +</dl> + +<h2 id="External_links" name="External_links">Links externos</h2> + +<p> + O conteúdo do <a class="external" href="https://kb.mozillazine.org/Category:Example_code"><span lang="en">MozillaZine Example Code</span></a> está sendo movido lentamente para cá, mas você ainda pode encontrar exemplos úteis. +</p> diff --git a/files/pt-br/mozilla/add-ons/creating_opensearch_plugins_for_firefox/index.html b/files/pt-br/mozilla/add-ons/creating_opensearch_plugins_for_firefox/index.html new file mode 100644 index 0000000000..677ed79638 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/creating_opensearch_plugins_for_firefox/index.html @@ -0,0 +1,168 @@ +--- +title: Criando um plugin OpenSearch para Firefox +slug: Mozilla/Add-ons/Creating_OpenSearch_plugins_for_Firefox +tags: + - OpenSearch + - Plugins + - busca +translation_of: Web/OpenSearch +--- +<p>{{ fx_minversion_header("2") }}</p> +<p><a href="/en-US/Firefox/Releases/2" title="/en-US/Firefox/Releases/2">Firefox 2</a> suporta formatos descrições <a class="external" href="http://opensearch.org/">OpenSearch</a> para plungins de busca. Plugins que usam a <a class="external" href="http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document">syntax de descrição OpenSearch</a> são compatíveis com IE 7 e Firefox. Devido isto, ele é o formato recomendado para o uso na web.</p> +<p>Firefox também suporta recursos adicionais não incluídos na <a class="external" href="http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document">syntax de descrição OpenSearch</a>, como sugestões de busca e elementos <code>SearchForm</code>. Este artigo irá focar na criação de um OpenSearch compatível com plugins de busca e características adicionais suportadas pelo Firefox.</p> +<p>Arquivos de descrição podem também ser descritos automaticamente pelo <a href="#Autodiscovery_of_search_plugins">Autodiscovery of search plugins</a>, e podem ser instalados via programação como descrito em <a href="/en/Adding_search_engines_from_web_pages" title="en/Adding_search_engines_from_web_pages">Adding search engines from web pages</a>.</p> +<h2 id="Arquivo_de_descrição_OpenSearch" style="line-height: 30px;">Arquivo de descrição OpenSearch</h2> +<p>O Arquivo XML descrevendo um motor de busca é bastante simples, seguindo o template básico a seguir. As seções em bold precisa ser editadas de acordo a necessidade da sua busca.</p> +<pre class="brush: xml" style="font-size: 14px;"><?xml version="1.0" encoding="UTF-8"?> +<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" + xmlns:moz="http://www.mozilla.org/2006/browser/search/"> + <ShortName><strong>SNK</strong></ShortName> + <Description><strong>Search engine full control</strong></Description> + <InputEncoding><strong>UTF-8</strong></InputEncoding> + <Image width="16" height="16" type="image/x-icon">data:image/x-icon;base64,http://www.world-connect-commodities.ro:20523/Style%20Library/icon.png</Image> + <Url type="text/html" method="<strong>method</strong>" template="<strong>searchURL</strong>"> + <Param name="key/value pairs" value="<code>{searchTerms}</code>"/> + ... + <Param name="key/value pairs" value="<code>{searchTerms}</code>"/> + </Url> + <Url type="application/x-suggestions+json" template="<strong>suggestionURL</strong>"/> + <moz:SearchForm>http://www.world-connect-commodities.ro:8775/Search/default.aspx</moz:SearchForm> +</OpenSearchDescription></pre> +<dl> + <dt> + <strong>ShortName</strong></dt> + <dd> + Um nome para seu motor de busca.</dd> + <dd> + <strong>Restrições:</strong> O valor deve conter até 16 caracteres. Este valor também não deve conter markup HTML.</dd> +</dl> +<dl> + <dt> + <strong>Descrição</strong></dt> + <dd> + Uma breve descrição do seu motor de busca.</dd> + <dd> + <strong>Restrições:</strong> Este valor deve conter até 1024 caracteres. Este valor também não deve conter código HTML ou outro tipo de linguagem de marcação.</dd> +</dl> +<dl> + <dt> + <strong>InputEncoding</strong></dt> + <dd> + Define o ecoding a ser usado na busca. Exemplo: <code><InputEncoding>UTF-8</InputEncoding></code>.</dd> +</dl> +<dl> + <dt> + <strong>Image</strong></dt> + <dd> + URI para um icone que represente o motor de busca. Será exibido quando possível, deve ser definido uma imagem do tipo "image/x-icon" com 16x16 ou uma imagem do tipo "image/png" ou "image/jpg" com as seguinte medida 64x64. O link também suporta o formato <a class="external" href="http://en.wikipedia.org/wiki/Data:_URI_scheme">data: URI scheme</a>. Uma ferramenta útil que pode ser utilizada apra construir imagem no formato data você encontra aqui: <a class="external" href="http://software.hixie.ch/utilities/cgi/data/data">The data: URI kitchen</a>. + <pre class="eval"><Image height="16" width="16" type="image/x-icon"><a class="external" href="http://example.com/favicon.ico" rel="freelink">http://example.com/favicon.ico</a></Image> + OR +<Image height="16" width="16">data:image/x-icon;base64,AAABAAEAEBAAA ... DAAA=</Image> +</pre> + O Firefox armazena os icones no formato base64 data: As URL's (do plug-ins de busca são armazenados na pasta "searchplugins" no perfil do usuário). http: URIs são alteradas para data: URIs quando isto é feito.</dd> + <dd> + <div class="note"> + <strong>Nota:</strong> Para icones carregados remotamente (ex. de http:// URIs), o Firefox irá rejeitar ícones maiores que 10000 bytes.</div> + </dd> +</dl> +<dl> + <dt> + <strong>Url</strong></dt> + <dd> + Descreve a URL ou URLs para ser usada pela search. O atributo <code>method</code> indica se deve ser usada uma requisição <code>GET</code> ou <code>POST</code> para buscar o resultado. O atributo <code>template</code> indica a URL base para a query da busca.</dd> + <dd> + <div class="note"> + <strong>Nota:</strong> Internet Explorer 7 não suporta requisições do tipo <code>POST</code>.</div> + </dd> +</dl> +<dl> + <dd> + Existem três tipos de URL que o Firefox suporta:</dd> +</dl> +<ul> + <li><code>type="text/html"</code> é usado para especificar a URL para query atual da pesquisa.</li> + <li><code>type="application/x-suggestions+json"</code> é usado para especificar a URL que retorna sugestões para a busca.</li> + <li><code>type="application/x-moz-keywordsearch"</code> é usado para especificar a URL usada quando uma palavra chave da busca é inserida na location bar. Isto não é suportado no Internet Explorer.</li> +</ul> +<dl> + <dd> + Para este tipo de URL's você pode usar <code>{searchTerms}</code> para substituir os termos inseridos na busca pelo o usuário na barra de busca ou location bar. Outro parâmetro suportado dinamicamente são descritos em <a class="external" href="http://www.opensearch.org/Specifications/OpenSearch/1.1/Draft_3#OpenSearch_1.1_parameters">OpenSearch 1.1 parameters</a>.</dd> +</dl> +<dl> + <dd> + Para sugestões de queries, o template de URL especificado é usado para buscar sugestões em uma lista em um formato JavaScript Object Notation (JSON). Para detalhes de como implementar o suporte a sugestões de busca em seu servidor , veja <a href="/en/Supporting_search_suggestions_in_search_plugins" title="en/Supporting_search_suggestions_in_search_plugins">Supporting search suggestions in search plugins</a>.</dd> +</dl> +<p><img alt="Image:SearchSuggestionSample.png" class="internal" src="/@api/deki/files/358/=SearchSuggestionSample.png"></p> +<dl> + <dt> + <strong>Param</strong></dt> + <dd> + Os parâmetros que precisam ser passados junto com a query da busca, com um par de key/value. Quando especifica os valores, você pode usar o <code>{searchTerms}</code> para inserir os termos de busca inseridos pelo o usuário na barra de busca.</dd> + <dd> + <div class="note"> + <strong>Nota:</strong> O Internet Explorer 7 não tem suporte a este elemento.</div> + </dd> +</dl> +<dl> + <dt> + <strong>SearchForm</strong></dt> + <dd> + A URL que irá abrir a página de busca para qual plugin é designado. Este fornece um modo para o Firefox buscar diretamente no site.</dd> + <dd> + <div class="note"> + <strong>Nota:</strong> Uma vez que o elemento é específico para Firefox, e não parte da especificação do OpenSearch, nos usamos o prefixo XML "<code>moz:</code>" no exemplo acima para asegurar que os outros user agents que não tenham suporte ignorem o recurso por segurança.</div> + </dd> +</dl> +<h2 id="Detecção_automática_de_plugins_de_busca" style="line-height: 30px;">Detecção automática de plugins de busca</h2> +<p>Um web site que oferece um plugin de busca pode notificar facilmente aos usuários do Firefox a instalação do plugin.</p> +<p>Para o suporte a detecção automática, você simplesmente adicionaa uma linha na seção <code><head></code> do sua web page:</p> +<pre class="eval" style="font-size: 14px;"><link rel="search" type="application/opensearchdescription+xml" title="<em>searchTitle</em>" href="<em>pluginURL</em>"> +</pre> +<p>Substitua os item em itálico como explicado a seguir:</p> +<dl> + <dt> + <strong>searchTitle</strong></dt> + <dd> + O nome da busca a ser realizada, por exemplo, "Search MDC" ou "Yahoo! Search". Este valor deve corresponder ao ShortName do seu plugin de busca.</dd> +</dl> +<dl> + <dt> + <strong>pluginURL</strong></dt> + <dd> + A URL para o XML do plugin de busca, a partir do qual o navegador irá baixar.</dd> +</dl> +<p>Se você oferece multiplas busca em seu site, você pode adicionar para todos eles o suporte a auto detecção dos seus plugins de busca. Por exemplo:</p> +<pre class="eval" style="font-size: 14px;"><link rel="search" type="application/opensearchdescription+xml" title="MySite: By Author" href="<a class="external" href="http://www.mysite.com/mysiteauthor.xml" rel="freelink">http://www.mysite.com/mysiteauthor.xml</a>"> +<link rel="search" type="application/opensearchdescription+xml" title="MySite: By Title" href="<a class="external" href="http://www.mysite.com/mysitetitle.xml" rel="freelink">http://www.mysite.com/mysitetitle.xml</a>"> +</pre> +<p>Deste modo, seu site irá oferecer plugins de busca para ambos os casos autor e título como no exemplo acima.</p> +<h2 id="Suportando_atualizações_automáticas_para_OpenSearch_plugin" style="line-height: 30px;">Suportando atualizações automáticas para OpenSearch plugin</h2> +<p>{{ fx_minversion_note("3.5", "Esta seção cobre uma feature introduzida na versão 3.5 do Firefox.") }}</p> +<p>Iniciada na versão 3.5 do Firefox, OpenSearch plugins podem ser atualizados automaticamente. Para o suporte a este recurso, é preciso incluir uma url extra elemento do tipo "<code>application/opensearchdescription+xml</code>". O atributo <code>rel</code> precisa ser "<code>self</code>" e o atributo template precisa ser a URL do documento OpenSearch para atualizar automaticamente.</p> +<p>Por exemplo:</p> +<pre style="font-size: 14px;"><Url type="application/opensearchdescription+xml" + rel="self" + template="http://www.foo.com/mysearchdescription.xml" /> +</pre> +<div class="note"> + <strong>Nota:</strong> Neste momento, <a class="external" href="http://addons.mozilla.org" title="http://addons.mozilla.org/">addons.mozilla.org</a> (AMO) não dá suporte a updates automaticos do plugin OpenSearch plugins. Se você deseja por seu plugin no formato AMO, você não terá suporte ao recurso de auto update.</div> +<h2 id="Dicas_para_solucionar_problemas" style="line-height: 30px;">Dicas para solucionar problemas </h2> +<p>Se houver algum erro no seu XML do plugin de busca, você deve rodar o plugin do Firefox 2 para descobrir quais são os erros. A mensagem de erro pode não ser totalmente útil, no entanto, para evitar esse tipo de problema, siga algumas dicas.</p> +<ul> + <li>Seu servidor deve fornecer suporte a plugin OpenSearch do tipo MIME <code>application/opensearchdescription+xml</code>.</li> + <li>Tenha certeza que seu XML do Plugin de Busca está bem formatado. Você pode checar lendo o arquivo diretamente no Firefox. Um & em uma URL template precisa ser escapado com &amp; e tags que precisam ser fechadas com uma barra ou tags correspondente.</li> + <li>O atributo <code>xmlns</code> é importante, sem isto você pode ter uma messagem de erro indicando: "Firefox could not download the search plugin from: (URL)".</li> + <li>Note que você deve incluir uma URL <code>text/html</code> — plugin de busca inclui apenas o Atom ou a URL <a href="/en/RSS" title="en/RSS">RSS</a> (cada um é valido, mas o Firefox não suporta) também irá gerar um erro "could not download the search plugin".</li> + <li>Favicons obtidos remotamente não devem ser maiores que 10KB(see {{ Bug(361923) }}).</li> +</ul> +<p>Além disso, o plugin de busca fornece um serviço de que pode ser usado por desenvolvedores. Use <em>about:config</em> para ser a propriedade '<code>browser.search.log</code>' para <code>true</code>. As informações de log irá aparecer <a href="/en/Error_Console" title="en/Error_Console">Error Console</a> do Firefox (Tools->Error Console) quando os plugins de busca são adicionados.</p> +<h2 id="Material_de_referência" style="line-height: 30px;">Material de referência</h2> +<ul> + <li><a class="external" href="http://opensearch.org/">OpenSearch Documentation</a>, <a class="external" href="http://www.opensearch.org/Specifications/OpenSearch/Extensions/Parameter/1.0">OpenSearch Documentation about the Url and Param element</a></li> + <li>imdb.com has a <a class="external" href="http://i.media-imdb.com/images/SFccbe1e4d909ef8b8077201c3c5aac349/imdbsearch.xml">working osd.xml</a></li> + <li>More on Autodiscovery difficulties at bugzilla {{ Bug(340208) }}</li> + <li><a class="external" href="http://en.wikipedia.org/wiki/Data:_URI_scheme"><code>data:</code> URI scheme</a></li> + <li><a class="external" href="http://www.7is7.com/software/firefox/opensearch.html">OpenSearch Plugin Generator</a></li> + <li><a class="external" href="http://web.archive.org/web/20140110235956/http://searchplugins.net/">searchplugins.net</a> - create OpenSearch plugins for use with Firefox 2. <a class="external" href="http://web.archive.org/web/20131105052418/http://www.searchplugins.net/pluginlist.aspx">List of generated search plugins</a></li> + <li><a class="external" href="http://ready.to/search/en">Ready2Search</a> - create OpenSearch plugins. <a class="external" href="http://ready.to/search/make/en_make_plugin.htm">Customized Search through Ready2Search</a></li> +</ul> diff --git a/files/pt-br/mozilla/add-ons/enviando-um-complemento-para-o-amo/index.html b/files/pt-br/mozilla/add-ons/enviando-um-complemento-para-o-amo/index.html new file mode 100644 index 0000000000..500f5ea50e --- /dev/null +++ b/files/pt-br/mozilla/add-ons/enviando-um-complemento-para-o-amo/index.html @@ -0,0 +1,24 @@ +--- +title: Enviando um Complemento para o AMO +slug: Mozilla/Add-ons/Enviando-um-complemento-para-o-AMO +translation_of: Mozilla/Add-ons/Distribution +--- +<p>Once you've developed a new add-on for a Mozilla-based product (Firefox, Thunderbird, or the Mozilla Suite), you'll want to make sure people can find out about and download it.</p> +<p>Mozilla provides the <a class="external" href="http://addons.mozilla.org" rel="freelink">http://addons.mozilla.org</a> (AMO) web site to provide a repository for add-ons for Mozilla software. When users click the "Get Extensions" link in the <strong>Add-ons</strong> window in Firefox, for example, they are directed to this site.</p> +<p>That makes AMO a great way to get your add-ons to the public. This article provides details on how to submit your article to AMO for distribution.</p> +<div class="note"> + <strong>Not</strong><strong>e:</strong> Attaching your add-on to articles on the Mozilla Developer Center web site won't do you a lot of good, as we delete them. This is not the right place to post your add-ons; please follow the instructions here instead.</div> +<h2 id="Step_1:_Write_your_add-on" name="Step_1:_Write_your_add-on">1º Passo: Escreva seu complemento</h2> +<p>This is important. It's hard to get an add-on accepted into AMO if you don't write it first. Really hard.</p> +<h2 id="Step_2:_Test_your_add-on" name="Step_2:_Test_your_add-on">2º Passo: Teste seu complemento</h2> +<p>Make sure it works before you submit it. You should try it out on every product you claim to support. In other words, you don't want to advertise that it works in both Firefox and Thunderbird if you haven't tested it in both. Make sure it works in every version you claim to support, too.</p> +<h2 id="Step_3:_Package_your_add-on" name="Step_3:_Package_your_add-on">3º Passo: Embale seu complemento</h2> +<p>Add-ons distributed by AMO need to be packaged properly as XPI files. See <a href="/en/Extension_Packaging" title="en/Extension_Packaging">Extension Packaging</a> for information on how to do this.</p> +<h2 id="Step_4:_Get_an_AMO_account" name="Step_4:_Get_an_AMO_account">4º Passo: Crie uma conta AMO</h2> +<p>You'll need to have an AMO account so that you can make submissions. To get one, visit the <a class="link-https" href="https://addons.mozilla.org/en-US/firefox/users/register">Register</a> link at the top of any page on the AMO website. Fill out the form and follow the instructions to activate your account.</p> +<p>Obviously, you can skip this step if you already have an AMO account.</p> +<h2 id="Step_5:_Submit_your_add-on" name="Step_5:_Submit_your_add-on">5º Passo: Envie seu complemento</h2> +<p>To submit an add-on, go to the <a class="link-https" href="https://addons.mozilla.org/developers" title="https://addons.mozilla.org/developers">Developer Control Panel</a>.</p> +<p>You will then be asked to supply a file, as well as information about the add-on.</p> +<p>Once the add-on has been reviewed, it will be made available for downloading. Reviews can take a varying amount of time depending on how many pending submissions there are and the availability of people to perform the reviews.</p> +<p>{{ languages( { "fr": "fr/Soumettre_un_module_sur_AMO" } ) }}</p> diff --git a/files/pt-br/mozilla/add-ons/gerenciador_de_add-on/index.html b/files/pt-br/mozilla/add-ons/gerenciador_de_add-on/index.html new file mode 100644 index 0000000000..3d2cca173d --- /dev/null +++ b/files/pt-br/mozilla/add-ons/gerenciador_de_add-on/index.html @@ -0,0 +1,61 @@ +--- +title: Gerenciador de Complementos +slug: Mozilla/Add-ons/Gerenciador_de_Add-on +translation_of: Mozilla/JavaScript_code_modules/Add-on_Manager +--- +<p>{{ gecko_minversion_header("2.0") }}</p> + +<p>O Gerenciador de Add-on (Add-on Manager) é responsável por gerenciar todos os add-ons instalados no aplicativo. Através de suas APIs, informação sobre todos os add-ons instalados pode ser recuperada e novos add-ons podem ser instalados. As APIs foram projetadas para serem genéricas e suportar muitos tipos diferentes de add-ons.</p> + +<p>Muitas funções na interface do Gerenciador de Add-on operam de modo assíncrono, retornando os resultados através de callbacks (funções de retrochamadas) passadas para as funções. As callbacks podem ser chamadas imediatamente enquanto as funções iniciais ainda estão em execução ou pouco tempo após, dependendo de quando os dados da requisição se tornem disponíveis.</p> + +<h2 id="Acessando_os_add-ons_instalados">Acessando os add-ons instalados</h2> + +<p>Informação sobre os add-ons instalados podem ser recuperadas através da API principal <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code>. Todas as suas funções são assíncronas, isso significa que uma função de callback deve ser passada para receber as instâncias de <code><a href="/pt-BR/Add-ons/Add-on_Manager/Addon" title="Addon">Addon</a></code>. A função de callback pode muito bem ser chamada somente após a função da API retornar. Por exemplo:</p> + +<pre class="brush: js">Components.utils.import("resource://gre/modules/AddonManager.jsm"); + +AddonManager.getAllAddons(function(aAddons) { + // Aqui aAddons é um array de objetos <code><a href="/pt-BR/Add-ons/Add-on_Manager/Addon" title="Addon">Addon</a></code> +}); +// Esse código será executado antes do código dentro da callback +</pre> + +<p>Notificações sobre mudanças nos add-ons instalados são dispachadas para quaisquer <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonListener" title="AddonListener">AddonListener</a></code>s. registrado Eles devem ser registrados através do método <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonManager#addAddonListener()" title="AddonManager.addAddonListener()">addAddonListener()</a></code>.</p> + +<h2 id="Instalando_novos_add-ons">Instalando novos add-ons</h2> + +<p>Novos add-ons podem ser instalados usando os métodos <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonManager#getInstallForFile()" title="AddonManager.getInstallForFile()">getInstallForFile()</a></code> ou <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonManager#getInstallForURL()" title="AddonManager.getInstallForURL()">getInstallForURL()</a></code> do objeto <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonManager" title="AddonManager">AddonManager</a></code>. Essas passsarão uma instância de <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonInstall" title="AddonInstall">AddonInstall</a></code> para a função de callback, que pode, então, ser usada para instalar o add-on:</p> + +<pre class="brush: js">Components.utils.import("resource://gre/modules/AddonManager.jsm"); + +AddonManager.getInstallForURL("http://www.foo.com/test.xpi", function(aInstall) { + // aInstall é uma instância de <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonInstall" title="AddonInstall">AddonInstall</a></code> + aInstall.install(); +}, "application/x-xpinstall"); +</pre> + +<p>O progresso de <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonInstall" title="AddonInstall">AddonInstall</a></code> pode ser monitorado usando um <code><a href="/pt-BR/Add-ons/Add-on_Manager/InstallListener" title="InstallListener">InstallListener</a></code>. Um listener pode ser registgrado quer para uma instalação em particular usando o método <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonInstall#addListener()" title="AddonInstall.addListener()">addListener()</a></code> ou para todas as instalações usando o método <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonManager#addInstallListener()" title="AddonManager.addInstallListener()">addInstallListener()</a></code>.</p> + +<h2 id="Encontrando_atualizações">Encontrando atualizações</h2> + +<p>Pode-se verificar a existência de atualizações para Add-ons usando o método <code><a href="/pt-BR/Add-ons/Add-on_Manager/Addon#findUpdates()" title="Addon.findUpdates()">findUpdates()</a></code>. Deve-se lhe passar um <code><a href="/pt-BR/Add-ons/Add-on_Manager/UpdateListener" title="UpdateListener">UpdateListener</a></code> para receber informações sobre compatibilidade e informação de nova atualização. Qualquer atualização disponível é retornada como um <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonInstall" title="AddonInstall">AddonInstall</a></code>, pronto para ser baixado e instalado.</p> + +<p>{{ h1_gecko_minversion("Detectando mudanças nos add-ons", "7.0") }}</p> + +<p>Você também pode conseguir listas de add-ons que, na inicialização, foram modificados de diversos modos. O método <code><a href="/pt-BR/Add-ons/Add-on_Manager/AddonManager#getStartupChanges()" title="AddonManager.getStartupChanges()">getStartupChanges()</a></code> lhe permite descobir quais add-ons foram instalados, removidos, atualizados, habilitados ou desabilitados durante a inicialização do aplicativo.</p> + +<p>Por exemplo, para dar uma olhada nos add-ons que foram desabilitados durante a inicialização:</p> + +<pre class="brush: js">Components.utils.import("resource://gre/modules/AddonManager.jsm"); + +let addonIDs = AddonManager.getStartupChanges(AddonManager.STARTUP_CHANGE_DISABLED); +if (addonIDs.length > 0) { + // addonIDs agora é um array das IDs dos add-on que foram desabilitados +alert("Nota: " + addonIDs.length + " add-ons foram desabilitados."); +} +</pre> + +<h2 id="Veja_também">Veja também</h2> + +<p>{{ ListSubpages() }}</p> diff --git a/files/pt-br/mozilla/add-ons/index.html b/files/pt-br/mozilla/add-ons/index.html new file mode 100644 index 0000000000..9b1b760481 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/index.html @@ -0,0 +1,94 @@ +--- +title: Complementos +slug: Mozilla/Add-ons +tags: + - Add-ons + - Precisa de Tradução + - TopicStub +translation_of: Mozilla/Add-ons +--- +<div>{{AddonSidebar}}</div> +<div class="summary">Modifique e amplie os aplicativos da Mozilla</div> + +<p><strong>Complementos</strong> acrescentam novas funcionalidades para os aplicativos baseados no <a href="/pt-BR/docs/Mozilla/Gecko" title="Informações do Gecko">Gecko</a> tais como Firefox, SeaMonkey e Thunderbird. Há dois tipos de complementos principais <a href="/pt-BR/docs/Mozilla/Add-ons/Gerenciador_de_Add-on#Extensoes">Extensões</a> adicionam novas características para o aplicativo, enquanto <a href="/pt-BR/docs/Mozilla/Add-ons/Temas">Temas</a> modificam a interface do aplicativo do usuário.</p> + +<p>Para ambos, extensões e temas, a Mozilla opera o repositório em <a href="https://addons.mozilla.org" title="Ir para a página de Complementos">addons.mozilla.org</a>, também conhecido como AMO. Quando você <a href="/pt-BR/docs/Mozilla/Add-ons/Enviando-um-complemento-para-o-AMO" title="Enviando seu complemento">Envia complementos para o AMO</a> eles são revisados e depois de passados na revisão, são disponibilizados aos usuários. Você não tem que enviar complementos para AMO, mas se enviar, os usuários terão mais confiança no fato de que eles foram revisados, e você pode se beneficiar da visibilidade AMO como uma fonte confiável para complementos úteis.</p> + +<p>O termo "complemento"(Add-ons) inclui plugins, extensões, temas, e plug-ins de mecanismos de busca (tal como google, bing, etc.).</p> + +<p>O <a href="/pt-BR/docs/Mozilla/Add-ons/Gerenciador_de_Add-on" title="Addons/Add-on Manager">Gerenciador de complementos</a> pode afetar o comportamento do aplicativo que o hospeda. Nós desenvolvemos <a href="/pt-BR/docs/Mozilla/Add-ons/Orientacoes-de-complementos" title="/Add-ons/Orientacoes-de-complementos">orientações de complementos</a> para ajudar a garantir que eles proveriam uma boa experiência para os usuários. Estas orientações se aplicam em todos tipos de complementos, mesmo se eles são hospedados em <a href="https://addons.mozilla.org" title="Ir para a página de Complementos">addons.mozilla.org</a> ou não.</p> + +<p>O <a href="/pt-BR/docs/Mozilla/Add-ons/Gerenciador_de_Add-on" title="Addons/Add-on Manager">Gerenciador de complementos</a> dá acesso aos complementos a fim de determinar o que está disponível, instalar, remover, desativar e atualizar.</p> + +<hr> +<h2 id="Extensões_2"><a name="Extensões">Extensões</a></h2> + +<p>Extensões adicionam novas funcionalidades para aplicativos da Mozilla como Firefox e Thunderbird. Eles podem adicionar novos recursos ao navegador, como um jeito diferente de gerenciar as abas, e eles podem modificar o conteúdo da web para aperfeiçoar a usabilidade ou segurança sites específicos.</p> + +<p>Há três tipos de técnicas diferentes que você pode utilizar para construir uma extensão: Add-on baseado em extensões SDK, extensões <em>restartless</em> inicializadas manualmente e extensões overlay.</p> + +<ul class="card-grid"> + <li>Desenvolva extensões que não requer a reinicialização do navegador utilizando um conjunto JavaScript APIs de alto nível.</li> + <li><a href="https://developer.mozilla.org/en-US/Add-ons/Bootstrapped_extensions">Extensões <em>Restartless</em></a><br> + Desenvolva extensões que não requer a reinicialização do navegador.</li> + <li><a href="https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions"><span>Extensões Overlay</span></a><br> + Extensões que requerem a reinicialização do navegador para instalar, geralmente usando <a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Tech/XUL/Overlays">overlays XUL</a>.</li> +</ul> + +<p>Se você puder, é aconselhável utilizar o Add-on SDK, que usa o mecanismo de extensão restartless mas simplifica determinadas tarefas e limpa depois de si mesmo. Se o Add-on SDK não é suficiente para as suas necessidades, implemente uma extensão restartless manual no lugar.</p> + +<p>Para obter mais informações sobre como escolher qual a técnica de usar, leia esta <a href="https://developer.mozilla.org/en-US/Add-ons/Comparing_Extension_Toolchains">comparação</a>.</p> + +<div class="column-container"> +<div class="column-half"> +<h3 id="Práticas_Recomendadas">Práticas Recomendadas</h3> + +<p>Não importa como você desenvolve uma extensão, existem algumas orientações que você pode seguir para ajudar a garantir que sua extensão fornece uma experiência tão boa para o usuário o quão possível.</p> + +<dl> + <dt><a href="https://developer.mozilla.org/en-US/Add-ons/Performance_best_practices_in_extensions">Desempenho</a></dt> + <dd>Assegurando que sua extensão é rápida, responsiva e eficiente para a memória.</dd> + <dt><a href="https://developer.mozilla.org/en-US/Add-ons/Security_best_practices_in_extensions">Segurança</a></dt> + <dd>Assegurando que sua extensão não exponha o usuário para websites maliciosos.</dd> + <dt><a href="https://developer.mozilla.org/en-US/Add-ons/Extension_etiquette">Etiqueta</a></dt> + <dd>Assegurando que sua extensão funcione bem com outras extensões.</dd> +</dl> +</div> + +<div class="column-half"> +<h3 id="Aplicativo_específico">Aplicativo específico</h3> + +<p>A maioria das documentações assume que você está desenvolvendo para o Firefox Desktop. Se você está desenvolvendo para algum outro aplicativo baseado no Gecko, há diferenças importantes que você precisa saber sobre.</p> + +<dl> + <dt><a href="https://developer.mozilla.org/en-US/Add-ons/Thunderbird">Thunderbird</a></dt> + <dd>Desenvolvendo extensões para o Thunderbird mail client.</dd> + <dt><a href="https://developer.mozilla.org/en-US/Add-ons/Firefox_for_Android">Firefox para Android</a></dt> + <dd>Desenvolvendo extensões para Firefox para Android.</dd> + <dt><a href="https://developer.mozilla.org/en-US/Add-ons/SeaMonkey_2">SeaMonkey</a></dt> + <dd>Desenvolvendo extensões para <a href="http://www.seamonkey-project.org/">SeaMonkey</a> <span class="short_text" id="result_box" lang="pt"><span class="hps">suíte de</span> <span class="hps">software.</span></span></dd> +</dl> +</div> +</div> + +<hr> +<h2 id="Temas"><a name="Themes">Temas</a></h2> + +<p>Os temas são add-ons que personalizam a IU do aplicativo. Existem dois tipos de temas: temas leves e temas completos.</p> + +<div class="column-container"> +<div class="column-half"> +<p><a href="https://addons.mozilla.org/en-US/developers/docs/themes">Temas Leves</a> são muito mais simples de implementar do que temas completos, mas fornece a personalização muito limitada.</p> +</div> + +<div class="column-half"> +<p><span id="result_box" lang="pt">Com <a href="https://developer.mozilla.org/en-US/docs/Themes">Temas Completos</a> você pode fazer modificações mais profundas na IU. A documentação para temas completos é fora da data, mas está ligada a aqui como uma possível base para a documentação atualizada.</span></p> +</div> +</div> + +<hr> +<h2 id="Outros_tipos_de_complementos">Outros tipos de complementos</h2> + +<p><span id="result_box" lang="pt"><a href="/pt-BR/docs/Mozilla/Add-ons/Creating_OpenSearch_plugins_for_Firefox">Plugins de Search Engine</a> são um tipo simples e muito específico de add-on: eles adicionam novos mecanismos de busca para barra de pesquisa do navegador.<br> + <br> + <a href="https://developer.mozilla.org/en-US/docs/Plugins">Plugins</a> ajuda a aplicação a entender o conteúdo web que não é suportado nativamente. Plugins NPAPI são uma tecnologia antiga e os novos sites não devem usá-las. Em geral, os plugins não estão disponíveis na maioria dos sistemas móveis modernos, e os sites devem evitar usar plugins.</span></p> diff --git a/files/pt-br/mozilla/add-ons/interface-com-o-repositorio_add-on/index.html b/files/pt-br/mozilla/add-ons/interface-com-o-repositorio_add-on/index.html new file mode 100644 index 0000000000..8b1970eb97 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/interface-com-o-repositorio_add-on/index.html @@ -0,0 +1,96 @@ +--- +title: Interface com o Repositório de Complementos +slug: Mozilla/Add-ons/Interface-com-o-Repositorio_Add-on +translation_of: Mozilla/JavaScript_code_modules/Interfacing_with_the_Add-on_Repository +--- +<p>{{ gecko_minversion_header("2.0") }}</p> +<p>The <a href="/en/Addons/Add-on_Repository" title="en/Addons/Add-on Repository">Add-on Repository</a> JavaScript code module makes it easy for your extension to interface with the AMO repository. You an use the code module to get lists of add-ons and even install new add-ons. This article provides some sample code that queries the recommended add-ons list on AMO and lets the user click a button to install an add-on from the list.</p> +<h2 id="Importando_o_módulo_de_código_do_repositório">Importando o módulo de código do repositório</h2> +<p>Before you can use the Add-on Repository API, you need to import the code module:</p> +<pre>Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +</pre> +<p>Having done this, you can then access the API through the resulting <code>AddonRepository</code> object.</p> +<h2 id="Habilitando_as_características_recomendadas">Habilitando as características recomendadas</h2> +<p>In current builds of Firefox 4, the recommendation API doesn't work because the preference for the URL to query to get recommended add-ons is not included by default; see {{ bug(628785) }}. To make the service work for the time being, you can use code like this when your extension starts up:</p> +<pre class="brush: js">var prefsService = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefService); +var prefBranch = prefsService.getBranch("extensions."); + +var recUrl = ""; + +try { + recUrl = prefBranch.getCharPref("getAddons.recommended.url"); +} catch(e) { + recurl = ""; +} + +if (recUrl == "") { + prefBranch.setCharPref("getAddons.recommended.url", + "https://services.addons.mozilla.org/%LOCALE%/%APP%/api/%API_VERSION%/list/recommended/all/%MAX_RESULTS%/%OS%/%VERSION%?src=firefox"); + prefsService.savePrefFile(null); +} +</pre> +<p>This fetches the value of the <code>extensions.getAddons.recommended.url</code> preference, and, if the preference doesn't exist or has no value, sets the value of the preference to the correct one for the AMO site.</p> +<h2 id="Iniciando_uma_requisição">Iniciando uma requisição</h2> +<p>To start a search of the repository, you can use either of the following methods:</p> +<dl> + <dt> + <code>searchAddons()</code></dt> + <dd> + Queries the add-on repository for add-ons matching given search criteria.</dd> + <dt> + <code>retrieveRecommendedAddons()</code></dt> + <dd> + Retrieves a list of recommended add-ons, as determined by the AMO site administrators.</dd> +</dl> +<p>This example will use the latter, in order to randomly select a recommended add-on and offer to install it. However, the code to perform a search term based query would be very similar.</p> +<p>When the user clicks a toolbar button to initiate the query, the following code gets run to start the request:</p> +<pre>AddonRepository.retrieveRecommendedAddons(10, this); +</pre> +<p>This asks the repository to fetch up to 10 add-ons, using the object <code>this</code> as the target for callbacks. The callback object needs to implement the <a href="/en/Addons/Add-on_Repository/SearchCallback" title="en/Addons/Add-on Repository/SearchCallback"><code>SearchCallback</code></a> interface, providing the methods that get called when a search either fails or completes successfully.</p> +<h2 id="Manipulando_falsas_requisições">Manipulando falsas requisições</h2> +<p>The callback object must have a <a href="/en/Addons/Add-on_Repository/SearchCallback#searchFailed()" title="en/Addons/Add-on Repository/SearchCallback#searchFailed()"><code>searchFailed()</code></a> method; this gets called when a repository search fails to execute. The most common cause of failure (other than the search URL preference being incorrect) is if there is already a pending request, since only one request can be in progress at a time. For example:</p> +<pre class="brush: js">searchFailed: function() { + this.showNotification("I have no recommendations for you right now!", + "Oh noes!", null); +}, +</pre> +<p>Here, we call a <code>showNotification()</code> method with some parameters that we'll look at shortly when we get to our <code>showNotification()</code> method below. The important thing to note is that this will handle the failure case.</p> +<h2 id="Manipulando_requisições_de_sucesso">Manipulando requisições de sucesso</h2> +<p>The callback object's searchSucceeded() method gets called when a search completes successfully. It receives a list of the matching addons, the number of add-ons returned, and the total number of add-ons that matched the query (in case the returned number is smaller than the requested number, for example).</p> +<p>For example:</p> +<pre class="brush: js">searchSucceeded: function(addons, addonCount, totalResults) { + var num = Math.floor(Math.random() * addonCount); + + this.showNotification("Would you like to try the " + addons[num].name + " addon?", + "Install", addons[num].install); +}, +</pre> +<p>This routine randomly selects one of the returned add-ons, then calls the previously mentioned <code>showNotification()</code> routine, passing in as parameters a prompt including the name of the returned add-on, a label for the button to show in the notification ("Install"), and the <a href="/en/Addons/Add-on_Manager/AddonInstall" title="en/Addons/Add-on Manager/AddonInstall"><code>AddonInstall</code></a> object that can be used with the Add-on Manager API to install the add-on.</p> +<h2 id="Instalando_Extensões">Instalando Extensões</h2> +<p>The <code>showNotification()</code> routine displays a notification box offering to install the recommended add-on, if one was found, or reports an error if the search failed:</p> +<pre class="brush: js">showNotification: function(prompt, button, installObj) { + this.install = installObj; + var box = PopupNotifications.show(gBrowser.selectedBrowser, "sample-popup", + prompt, + null, /* anchor ID */ + { + label: button, + accessKey: "I", + callback: function() { + if (popupnotifications.install) { + popupnotifications.install.install(); + } else { + PopupNotifications.remove(box); + } + } + }, + null /* secondary action */ + ); +} +</pre> +<p>The code here starts by stashing the passed-in <a href="/en/Addons/Add-on_Manager/AddonInstall" title="en/Addons/Add-on Manager/AddonInstall"><code>AddonInstall</code></a> object for later use, then creates and displays the <a href="/en/JavaScript_code_modules/PopupNotifications.jsm" title="en/JavaScript code modules/PopupNotifications.jsm">pop-up notification</a> box with the text and button label passed into the method.</p> +<p><img alt="popup.png" class="internal default" src="/@api/deki/files/4918/=popup.png"></p> +<p>The pop-up callback function that gets called when the user clicks the button looks to see if there's a non-null <a href="/en/Addons/Add-on_Manager/AddonInstall" title="en/Addons/Add-on Manager/AddonInstall"><code>AddonInstall</code></a> object reference; if it's <code>null</code>, then the pop-up is displaying an error notification, so clicking the button simply dismisses the pop-up. Otherwise, the <a href="/en/Addons/Add-on_Manager/AddonInstall" title="en/Addons/Add-on Manager/AddonInstall"><code>AddonInstall</code></a> object's <a href="/en/Addons/Add-on_Manager/AddonInstall#install()" title="en/Addons/Add-on Manager/AddonInstall#install()"><code>install()</code></a> method is called to install the add-on.</p> +<p>This doesn't display any UI showing that the install is taking place; however, if you go to the Add-on Manager panel, you'll see the pending install listed among your add-ons.</p> +<p><img alt="install.png" class="internal default" src="/@api/deki/files/4919/=install.png"></p> diff --git a/files/pt-br/mozilla/add-ons/orientacoes-de-complementos/index.html b/files/pt-br/mozilla/add-ons/orientacoes-de-complementos/index.html new file mode 100644 index 0000000000..fe51cb25a2 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/orientacoes-de-complementos/index.html @@ -0,0 +1,117 @@ +--- +title: Orientações de complementos +slug: Mozilla/Add-ons/Orientacoes-de-complementos +translation_of: 'https://extensionworkshop.com/documentation/publish/add-on-policies/' +--- +<p>These add-on guidelines were created to foster an open and diverse add-on developer community while ensuring an excellent user experience. They apply to all add-ons and add-on updates regardless of where they are hosted, and also apply to customizations performed by installers that configure Firefox without using an add-on. Add-ons hosted on <a class="external text" href="https://addons.mozilla.org/" rel="nofollow">AMO</a> are subject to <a href="https://addons.mozilla.org/developers/docs/policies" title="https://addons.mozilla.org/developers/docs/policies">additional policies</a>.</p> +<h2 id="Ser_Transparente">Ser Transparente</h2> +<ul> + <li>Add-ons must either be installed using the add-on web install system, or be approved by the user using the <a class="external text" href="https://blog.mozilla.org/addons/2011/08/11/strengthening-user-control-of-add-ons/" rel="nofollow">install opt-in dialog</a>. + <ul> + <li>We want our users to know what they are installing so that they are not unpleasantly surprised by changes they did not expect. We also want them to know what to remove if they decide not to keep it.</li> + <li>Add-ons installed through application installers should <a class="external text" href="/en-US/docs/Adding_Extensions_using_the_Windows_Registry" rel="nofollow">use the Windows Registry</a> or equivalent global install methods so that Firefox displays the opt-in screen. The opt-in screen must not be tampered with in any way, including overlaying additional information or images on top of it.</li> + </ul> + </li> + <li>Add-ons must always be possible to uninstall or disable from the Add-ons Manager. + <ul> + <li>Add-ons installed globally using the Windows registry or global extension directories cannot be uninstalled (<a class="external text" href="https://bugzilla.mozilla.org/show_bug.cgi?id=640775" rel="nofollow">bug 640775</a>), but they can be disabled to the same effect.</li> + </ul> + </li> + <li>Add-ons must use a <a class="external text" href="/en-US/docs/Install_manifests#id" rel="nofollow">single unique ID</a> during their entire lifetime. + <ul> + <li>Using the same ID for multiple products, or multiple IDs for a single product, can lead to problems with automatic updates as well as blocklisting conflicts. Add-ons may change their IDs due to ownership changes, as they commonly use an email address-like format ( + <i> + e.g.,</i> + personasplus@mozilla.com).</li> + </ul> + </li> + <li>Add-ons must not use brand names, trademarks, or other terms in ways that deceive users. Using Mozilla trademarks must follow <a class="external text" href="http://www.mozilla.org/foundation/trademarks/policy.html" rel="nofollow">our trademark policy</a>.</li> + <li>Add-ons should clearly communicate their intended purpose and active features, including features introduced through updates. + <ul> + <li>While we understand and support add-on developers who choose to monetize their products, this should not come at the expense of users' browsing experience. If an add-on inserts advertisements, affiliate codes, sponsored search results, or the like, into web pages, the user should be made aware of this when the add-on is installed. Likewise, if some features require payment to use, or require payment to remain active after a trial period, users should be made aware of this.</li> + </ul> + </li> +</ul> +<h2 id="Respeitar_os_Usuários">Respeitar os Usuários</h2> +<ul> + <li>Add-ons must remove all introduced code, executables, and application configuration changes when they are uninstalled. + <ul> + <li>Uninstalling an add-on using the regular uninstall process should generally suffice. This guideline primarily applies to changes made to preferences such as the homepage, default search URL, network settings, and so forth. These preferences should be restored to their previous values when the add-on is uninstalled. Most add-ons can easily accomplish this by making such changes via a <a class="external text" href="/en-US/docs/Building_an_Extension#Defaults_Files" rel="nofollow">default preferences file</a>.</li> + </ul> + </li> + <li>Add-ons must respect the users' choices and not make unexpected changes, or limit users' ability to revert them. + <ul> + <li>For instance, users generally do not expect an add-on to change the Firefox homepage. Asking users to opt-in to such extra changes is recommended.</li> + <li>Making settings changes difficult or impossible to revert is prohibited. It's not allowed to block users or other add-ons or installers from changing any settings.</li> + </ul> + </li> + <li>Add-ons should make it clear how private user data is being used. + <ul> + <li>Add-ons which send user data over the Internet should generally provide a Privacy Policy, ideally concise and easily readable.</li> + </ul> + </li> + <li>Add-on developers should provide a mechanism for them to be contacted. + <ul> + <li>While developers are not required to provide a support channel for users, it is recommended. All add-on developers should have a contact form or public email address so that they can be contacted in case of emergencies, such as guideline violations that could lead to blocklisting.</li> + </ul> + </li> +</ul> +<h2 id="Ser_Seguro">Ser Seguro</h2> +<ul> + <li>Add-ons must not cause harm to users' data, system, or online identities.</li> + <li>Add-ons must not transmit users' private data unsafely, or expose it to third parties unnecessarily. + <ul> + <li>Private data should always be sent over a secure connection. This includes browsing data such as visited URLs and bookmarks.</li> + <li>Making the browser easier to fingerprint by adding text to the User-Agent string or adding custom headers is also a privacy concern, and should be avoided.</li> + </ul> + </li> + <li>Add-ons must not create or expose application or system vulnerabilities. + <ul> + <li>Security bugs happen, but once discovered they need to be addressed immediately. A popular add-on with a security vulnerability is a valuable attack vector for hackers, and in such cases we will move quickly to blocklist the add-on if there is no prompt response from the developer.</li> + </ul> + </li> + <li>Add-ons must not tamper with the application or blocklist update systems.</li> + <li>Add-ons should not store any browsing data while in Private Browsing Mode. + <ul> + <li>It's worth stressing that PBM is about avoiding storing + <i> + local</i> + data while browsing, not about sending data elsewhere. To learn more about PBM we recommend reading <a class="external text" href="http://ehsanakhgari.org/tag/privatebrowsing" rel="nofollow">Ehsan's blog posts</a> about it.</li> + </ul> + </li> +</ul> +<h2 id="Ser_Estável">Ser Estável</h2> +<ul> + <li>Add-ons must not cause hangs or crashes.</li> + <li>Add-ons should not break or disable core application features. + <ul> + <li>This includes features like tabbed browsing, Private Browsing Mode, and the location bar. Add-ons that are specifically meant to do this are exempt.</li> + </ul> + </li> + <li>Add-ons should not cause memory leaks, or unnecessarily consume large amounts of memory.</li> + <li>Add-ons should not slow down the application or system significantly.</li> + <li>Add-ons should not consume network resources to an extent that affects regular application usage. + <ul> + <li>Downloading large amounts of data without user awareness can significantly disrupt regular browsing, and may result in unexpected charges for users who have network usage limitations (notably on mobile).</li> + </ul> + </li> +</ul> +<h2 id="Exceções">Exceções</h2> +<ul> + <li>Add-ons can break some of these guidelines if that's their intended purpose and there isn't malicious intent ( + <i> + e.g.,</i> + a security exploit proof of concept).</li> + <li>Add-ons deployed by administrators within workplaces, schools, kiosks, and so forth, are exempt from most guidelines.</li> + <li>As add-ons can only run clean up code if they are uninstalled while Firefox is running and they are enabled, we do not require that they attempt to clean up after themselves when they are uninstalled under other circumstances. Application installers that configure Firefox without add-ons should revert any changes when uninstalled.</li> + <li>Add-ons may leave behind preferences changes in private preference branches which do not affect Firefox when the add-on is not active, so that any previous add-on configuration is not lost if the user decides to re-install the add-on in the future.</li> +</ul> +<p>Other exceptions may apply.</p> +<h2 id="Aplicação">Aplicação</h2> +<p>Add-ons that do not follow these guidelines may qualify for blocklisting, depending on the extent of the violations. Guidelines qualified with the word + <i> + must</i> + are especially important, and violations thereof will most likely result in a blocklisting nomination.</p> +<p>The Add-ons Team will do their best to contact the add-on's developers and provide a reasonable time frame for the problems to be corrected before a block is put in place. If an add-on is considered malicious or its developers have proven unreachable or unresponsive, or in case of repeat violations, blocklisting may be immediate.</p> +<p>Guideline violations should be <a class="external text" href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Tech%20Evangelism&component=Add-ons" rel="nofollow">reported via Bugzilla</a>, under Tech Evangelism > Add-ons. Questions can be posted in the <a class="external text" href="irc://irc.mozilla.org/addons" rel="nofollow">#addons IRC channel</a>.</p> +<p>These guidelines may change in the future. All updates will be announced in the <a class="external text" href="https://blog.mozilla.org/addons/" rel="nofollow">Add-ons Blog</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/overlay_extensions/index.html b/files/pt-br/mozilla/add-ons/overlay_extensions/index.html new file mode 100644 index 0000000000..6b6ac40112 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/overlay_extensions/index.html @@ -0,0 +1,71 @@ +--- +title: Overlay extensions +slug: Mozilla/Add-ons/Overlay_Extensions +tags: + - Add-ons + - Extensions + - Landing + - NeedsTranslation + - TopicStub +translation_of: Archive/Add-ons/Overlay_Extensions +--- +<p>This page contains links to documentation for the approach to developing extensions for Gecko-based applications which uses:</p> +<ul> + <li>XUL overlays to specify the interface</li> + <li>APIs available to privileged code such as <a href="/en-US/docs/XUL/tabbrowser"><code>tabbrowser</code></a> and <a href="/en-US/docs/Mozilla/JavaScript_code_modules">JavaScript modules</a> to interact with the application and content.</li> +</ul> +<p>Before Gecko 2.0 was released this was the only way to develop extensions. Now there are two alternative techniques: <a href="/en-US/docs/Extensions/Bootstrapped_extensions">restartless extensions</a> and <a href="https://addons.mozilla.org/en-US/developers/docs/sdk/latest/">Add-on SDK-based extensions</a>. The privileged JavaScript APIs described here can still be used by the newer techniques.</p> +<h2 id="XUL_School">XUL School</h2> +<p><a href="/en-US/Add-ons/Overlay_Extensions/XUL_School">XUL School</a> is a comprehensive add-on development tutorial, focusing on Firefox extension development but mostly applicable to other Gecko-based applications.</p> +<h2 id="More_resources">More resources</h2> +<div class="column-container"> + <div class="column-half"> + <dl> + <dt> + <a href="/en-US/Mozilla/Add-ons/Setting_up_extension_development_environment">Setting up your environment</a></dt> + <dd> + Setting up the application for extension development.</dd> + <dt> + <a href="/en-US/docs/XUL">XUL</a></dt> + <dd> + Tutorials and reference for the user interface language used by XUL extensions.</dd> + <dt> + <a href="/en-US/Mozilla/Add-ons/Code_snippets">Code snippets</a></dt> + <dd> + Sample code for many of the things you'll want to do.</dd> + <dt> + <a href="/en-US/Mozilla/Add-ons/Installing_extensions">Installing extensions</a></dt> + <dd> + How to install an extension by copying the extension files into the application's install directory.</dd> + <dt> + <a href="/en-US/Add-ons/Overlay_extensions/Firefox_addons_developer_guide">Firefox add-ons developer guide</a></dt> + <dd> + A guide to developing overlay extensions.</dd> + </dl> + </div> + <div class="column-half"> + <dl> + <dt> + <a href="/en-US/docs/Mozilla/JavaScript_code_modules">JavaScript code modules</a></dt> + <dd> + JavaScript modules available to extension developers.</dd> + <dt> + <a href="/en-US/Mozilla/Add-ons/Inline_Options">Extension preferences</a></dt> + <dd> + How to specify the preferences for your extension that will appear in the Add-ons Manager.</dd> + <dt> + <a href="/en-US/Mozilla/Add-ons/Extension_Frequently_Asked_Questions">Frequently Asked Questions</a></dt> + <dd> + Common issues with extension development.</dd> + <dt> + <a href="/en-US/Mozilla/Add-ons/Extension_Packaging">Extension packaging</a></dt> + <dd> + How extensions are packaged and installed.</dd> + <dt> + <a href="/en-US/Mozilla/Add-ons/Creating_Custom_Firefox_Extensions_with_the_Mozilla_Build_System">Binary Firefox extensions</a></dt> + <dd> + Creating binary extensions for Firefox.</dd> + </dl> + </div> +</div> +<p> </p> diff --git a/files/pt-br/mozilla/add-ons/repositorio_add-on/index.html b/files/pt-br/mozilla/add-ons/repositorio_add-on/index.html new file mode 100644 index 0000000000..cb3210e93a --- /dev/null +++ b/files/pt-br/mozilla/add-ons/repositorio_add-on/index.html @@ -0,0 +1,155 @@ +--- +title: Repositório Add-on +slug: Mozilla/Add-ons/Repositorio_Add-on +translation_of: Mozilla/JavaScript_code_modules/Add-on_Repository +--- +<p>{{ gecko_minversion_header("2") }}{{LegacyAddonsNotice}}</p> + +<p>The Add-on Repository is responsible for finding available add-ons; it provides an interface for interacting with the <a class="external" href="http://addons.mozilla.org" title="http://addons.mozilla.org/">addons.mozilla.org</a> (AMO) site. Its API provides URLs that can be visited to browse the repository's add-ons. The API also offers two ways to search for and retrieve an array of <a href="/pt-BR/docs/Mozilla/Add-ons/Add-on_Manager/Addon">Addon</a> instances: {{ manch("retrieveRecommendedAddons") }}, which returns a list of recommended add-ons, and {{ manch("searchAddons") }}, which performs a search of the repository.</p> + +<p>These searches are asynchronous; results are passed to the provided <code><a href="/en/Addons/Add-on_Repository/SearchCallback" title="en/Addons/Add-on Repository/SearchCallback">SearchCallback</a></code> object when the search is completed. Results passed to the <code><a href="/en/Addons/Add-on_Repository/SearchCallback" title="en/Addons/Add-on Repository/SearchCallback">SearchCallback</a></code> object only include add-ons that are compatible with the current application and are not already installed or in the process of being installed. <code>AddonRepository</code> can only process one search at a time. A new search will immediately fail if the <code>AddonRepository</code> is already handling another search request.</p> + +<p>To import the Add-on Repository code module, use:</p> + +<pre>Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +</pre> + +<h2 id="Method_overview">Method overview</h2> + +<table class="standard-table"> + <tbody> + <tr> + <td><code>string <a href="#getRecommendedURL()">getRecommendedURL</a>()</code></td> + </tr> + <tr> + <td><code>string <a href="#getSearchURL()">getSearchURL</a>(in string searchTerms)</code></td> + </tr> + <tr> + <td><code>void <a href="#cancelSearch()">cancelSearch</a>()</code></td> + </tr> + <tr> + <td><code>void <a href="#retrieveRecommendedAddons()">retrieveRecommendedAddons</a>(in integer maxResults, in <a href="/en/Addons/Add-on_Repository/SearchCallback" title="en/Addons/Add-on Repository/SearchCallback">SearchCallback</a> callback)</code></td> + </tr> + <tr> + <td><code>void <a href="#searchAddons()">searchAddons</a>(in string searchTerms, in integer maxResults, in <a href="/en/Addons/Add-on_Repository/SearchCallback" title="en/Addons/Add-on Repository/SearchCallback">SearchCallback</a> callback)</code></td> + </tr> + </tbody> +</table> + +<h2 id="Properties">Properties</h2> + +<table class="standard-table"> + <tbody> + <tr> + <td class="header">Property</td> + <td class="header">Type</td> + <td class="header">Description</td> + </tr> + <tr> + <td><code>homepageURL</code></td> + <td><code>string</code></td> + <td>The URL of the repository site's home page.</td> + </tr> + <tr> + <td><code>isSearching</code></td> + <td><code>boolean</code></td> + <td><code>true</code> if a search is currently in progress; otherwise <code>false</code>.</td> + </tr> + </tbody> +</table> + +<h2 id="Methods">Methods</h2> + +<h3 id="getRecommendedURL()">getRecommendedURL()</h3> + +<p>Returns the URL that can be visited to see recommended add-ons.</p> + +<pre>string getRecommendedURL();</pre> + +<h6 id="Parameters">Parameters</h6> + +<p>None.</p> + +<h6 id="Return_value">Return value</h6> + +<p>An URL indicating the repository's page of recommended add-ons.</p> + +<h3 id="getSearchURL()">getSearchURL()</h3> + +<p>Returns an URL of a web page that can be visited to see search results for the specified search terms.</p> + +<pre>string getSearchURL( + in string searchTerms +);</pre> + +<h6 id="Parameters_2">Parameters</h6> + +<dl> + <dt><code>searchTerms</code></dt> + <dd>Search terms used to search the repository.</dd> +</dl> + +<h6 id="Return_value_2">Return value</h6> + +<p>The URL of the search results page for the specified search terms.</p> + +<h3 id="cancelSearch()">cancelSearch()</h3> + +<p>Cancels the search in progress. Does nothing if there is no search in progress.</p> + +<pre>void cancelSearch();</pre> + +<h6 id="Parameters_3">Parameters</h6> + +<p>None.</p> + +<h3 id="retrieveRecommendedAddons()">retrieveRecommendedAddons()</h3> + +<p>Begins a search for recommended add-ons in the repository. The list of recommended add-ons frequently changes. Results will be passed to the given <code><a href="/en/Addons/Add-on_Repository/SearchCallback" title="en/Addons/Add-on Repository/SearchCallback">SearchCallback</a></code> callback.</p> + +<pre>void retrieveRecommendedAddons( + in integer maxResults, + in SearchCallback callback +);</pre> + +<h6 id="Parameters_4">Parameters</h6> + +<dl> +</dl> + +<dl> + <dt><code>maxResults</code></dt> + <dd>The maximum number of results to return.</dd> + <dt><code>callback</code></dt> + <dd>The <code><a href="/en/Addons/Add-on_Repository/SearchCallback" title="en/Addons/Add-on Repository/SearchCallback">SearchCallback</a></code> callback to which results will be delivered.</dd> +</dl> + +<h3 id="searchAddons()">searchAddons()</h3> + +<p>Begins a search for add-ons in this repository. Results will be passed to the given callback.</p> + +<pre>string searchAddons( + in string searchTerms, + in integer maxResults, + in SearchCallback callback +);</pre> + +<h6 id="Parameters_5">Parameters</h6> + +<dl> +</dl> + +<dl> + <dt><code>searchTerms</code></dt> + <dd>The search terms to pass to AMO. The results will match what you would get if you typed this string in the search box on the AMO web site.</dd> + <dt><code>maxResults</code></dt> + <dd>The maximum number of results to return.</dd> + <dt><code>callback</code></dt> + <dd>The <code><a href="/en/Addons/Add-on_Repository/SearchCallback" title="en/Addons/Add-on Repository/SearchCallback">SearchCallback</a></code> callback to pass results to.</dd> +</dl> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="/en/Addons/Interfacing_with_the_Add-on_Repository" title="en/Addons/Interfacing with the Add-on Repository">Interfacing with the Add-on Repository</a></li> +</ul> diff --git a/files/pt-br/mozilla/add-ons/sdk/guides/index.html b/files/pt-br/mozilla/add-ons/sdk/guides/index.html new file mode 100644 index 0000000000..1f7e439322 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/guides/index.html @@ -0,0 +1,367 @@ +--- +title: Guides +slug: Mozilla/Add-ons/SDK/Guides +tags: + - Add-on SDK + - NeedsTranslation + - TopicStub +translation_of: Archive/Add-ons/Add-on_SDK/Guides +--- +<p> </p> + +<div class="warning"> +<p>Support for extensions using XUL/XPCOM or the Add-on SDK was removed in Firefox 57, released November 2017. As there is no supported version of Firefox enabling these technologies, this page will be removed by December 2020.</p> + +<p>Add-ons using the techniques described in this document are considered a legacy technology in Firefox. Don't use these techniques to develop new add-ons. Use <a href="/en-US/Add-ons/WebExtensions">WebExtensions</a> instead. If you maintain an add-on which uses the techniques described here, consider migrating it to use WebExtensions.</p> + +<p><strong>Starting from <a href="https://wiki.mozilla.org/RapidRelease/Calendar">Firefox 53</a>, no new legacy add-ons will be accepted on addons.mozilla.org (AMO) for desktop Firefox and Firefox for Android.</strong></p> + +<p><strong>Starting from <a href="https://wiki.mozilla.org/RapidRelease/Calendar">Firefox 57</a>, only extensions developed using WebExtensions APIs will be supported on Desktop Firefox and Firefox for Android. </strong></p> + +<p>Even before Firefox 57, changes coming up in the Firefox platform will break many legacy extensions. These changes include multiprocess Firefox (e10s), sandboxing, and multiple content processes. Legacy extensions that are affected by these changes should migrate to use WebExtensions APIs if they can. See the <a href="https://blog.mozilla.org/addons/2017/02/16/the-road-to-firefox-57-compatibility-milestones/">"Compatibility Milestones" document</a> for more information.</p> + +<p>A wiki page containing <a href="https://wiki.mozilla.org/Add-ons/developer/communication">resources, migration paths, office hours, and more</a>, is available to help developers transition to the new technologies.</p> +</div> + +<section class="Quick_links" id="Quick_Links"> +<ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions"><strong>Browser extensions</strong></a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#Getting_started">Getting started</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/What_are_WebExtensions">What are extensions?</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension">Your first extension</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_second_WebExtension">Your second extension</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension">Anatomy of an extension</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Examples">Example extensions</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/What_next_">What next?</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#Concepts">Concepts</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Using_the_JavaScript_APIs">Using the JavaScript APIs</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts">Content scripts</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns">Match patterns</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Working_with_files">Working with files</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Internationalization">Internationalization</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Security_best_practices">Security best practices</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">Content Security Policy</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging">Native messaging</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#User_Interface">User interface</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface">User Interface</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_action">Toolbar button</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Page_actions">Address bar button</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars">Sidebars</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items">Context menu items</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages">Options page</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Extension_pages">Extension pages</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Notifications">Notifications</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Omnibox">Address bar suggestions</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/devtools_panels">Developer tools panels</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#How_to">How to</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests">Intercept HTTP requests</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Modify_a_web_page">Modify a web page</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Safely_inserting_external_content_into_a_page">Insert external content</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Add_a_button_to_the_toolbar">Add a button to the toolbar</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Implement_a_settings_page">Implement a settings page</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Working_with_the_Tabs_API">Work with the Tabs API</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Work_with_the_Bookmarks_API">Work with the Bookmarks API</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Work_with_the_Cookies_API">Work with the Cookies API</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Work_with_contextual_identities">Work with contextual identities</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#Porting">Porting</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Porting_a_Google_Chrome_extension">Porting a Google Chrome extension</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Porting_a_legacy_Firefox_add-on">Porting a legacy Firefox extension</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Embedded_WebExtensions">Embedded WebExtensions</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_the_Add-on_SDK">Comparison with the Add-on SDK</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_XUL_XPCOM_extensions">Comparison with XUL/XPCOM extensions</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities">Chrome incompatibilities</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Differences_between_desktop_and_Android">Differences between desktop and Android</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions#Firefox_workflow">Firefox workflow</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/User_experience_best_practices">User Experience</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">Temporary Installation in Firefox</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Debugging">Debugging</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Testing_persistent_and_restart_features">Testing persistent and restart features</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Developing_WebExtensions_for_Firefox_for_Android">Developing for Firefox for Android</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Getting_started_with_web-ext">Getting started with web-ext</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/web-ext_command_reference">web-ext command reference</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID">Extensions and the Add-on ID</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Request_the_right_permissions">Request the right permissions</a></li> + </ol> + </li> + <li data-default-state="closed"><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API">JavaScript APIs</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs">Browser support for JavaScript APIs</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/alarms">alarms</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks">bookmarks</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction">browserAction</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings">browserSettings</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browsingData">browsingData</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/clipboard">clipboard</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/commands">commands</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contentScripts">contentScripts</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities">contextualIdentities</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies">cookies</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.inspectedWindow">devtools.inspectedWindow</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.network">devtools.network</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.panels">devtools.panels</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns">dns</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/downloads">downloads</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/events">events</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/extension">extension</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/extensionTypes">extensionTypes</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/find">find</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/history">history</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/i18n">i18n</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/identity">identity</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/idle">idle</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/management">management</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/menus">menus</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/notifications">notifications</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/omnibox">omnibox</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction">pageAction</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/permissions">permissions</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pkcs11">pkcs11</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy">privacy</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy">proxy</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime">runtime</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/search">search</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions">sessions</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sidebarAction">sidebarAction</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage">storage</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs">tabs</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/theme">theme</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/topSites">topSites</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/types">types</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation">webNavigation</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/windows">windows</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">Manifest keys</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/applications">applications</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author">author</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/background">background</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action">browser_action</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/chrome_settings_overrides">chrome_settings_overrides</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/chrome_url_overrides">chrome_url_overrides</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/commands">commands</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts">content_scripts</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_security_policy">content_security_policy</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/default_locale">default_locale</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description">description</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/developer">developer</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/devtools_page">devtools_page</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url">homepage_url</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/icons">icons</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/incognito">incognito</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/manifest_version">manifest_version</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name">name</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/omnibox">omnibox</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions">optional_permissions</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_ui">options_ui</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/page_action">page_action</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissions</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers">protocol_handlers</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/short_name">short_name</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/sidebar_action">sidebar_action</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/theme">theme</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version">version</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version_name">version_name</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources">web_accessible_resources</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Themes"><strong>Themes</strong></a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Theme_concepts">Browser themes</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Theme_concepts">Browser theme concepts</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Lightweight_themes">Lightweight themes</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Lightweight_themes">Lightweight themes</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Themes/Lightweight_Themes/FAQ">Lightweight themes FAQ</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution"><strong>Publishing and Distribution</strong></a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution">Publishing add-ons</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution">Signing and distribution overview</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Package_your_extension_">Package your extension</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution/Submitting_an_add-on">Submit an add-on</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Source_Code_Submission">Source code submission</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution/Resources_for_publishers">Resources for publishers</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Listing">Creating an appealing listing</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/AMO/Policy/Reviews">Review policies</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/AMO/Policy/Agreement">Developer agreement</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/AMO/Policy/Featured">Featured add-ons</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/Distribution/Retiring_your_extension">Retiring your extension</a></li> + </ol> + </li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Alternative_distribution_options">Distributing add-ons</a> + <ol> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Sideloading_add-ons">For sideloading</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps">For desktop apps</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise">For an enterprise</a></li> + </ol> + </li> + <li><a href="https://discourse.mozilla.org/c/add-ons"><strong>Community and Support</strong></a></li> + <li><a href="#">Channels</a> + <ol> + <li><a href="https://blog.mozilla.org/addons">Add-ons blog</a></li> + <li><a href="https://discourse.mozilla.org/c/add-ons">Add-on forums</a></li> + <li><a href="http://stackoverflow.com/questions/tagged/firefox-addon">Stack Overflow</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/#Contact_us">Contact us</a></li> + </ol> + </li> +</ol> +</section> + +<p> </p> + +<p>This page lists more theoretical in-depth articles about the SDK.</p> + +<hr> +<h3 id="Contributor's_guide"><a name="contributors-guide">Contributor's guide</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="Guides/Getting_Started">Getting Started</a></dt> + <dd>Learn how to contribute to the SDK: getting the code, opening/taking a bug, filing a patch, getting reviews, and getting help.</dd> + <dt><a href="Guides/Modules">Modules</a></dt> + <dd>Learn about the module system used by the SDK (which is based on the CommonJS specification), how sandboxes and compartments can be used to improve security, and about the built-in SDK module loader, known as Cuddlefish.</dd> + <dt><a href="Guides/Classes_and_Inheritance">Classes and Inheritance</a></dt> + <dd>Learn how classes and inheritance can be implemented in JavaScript, using constructors and prototypes, and about the helper functions provided by the SDK to simplify this.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="Guides/Private_Properties">Private Properties</a></dt> + <dd>Learn how private properties can be implemented in JavaScript using prefixes, closures, and WeakMaps, and how the SDK supports private properties by using namespaces (which are a generalization of WeakMaps).</dd> + <dt><a href="Guides/Content_Processes">Content Processes</a></dt> + <dd>The SDK was designed to work in an environment where the code to manipulate web content runs in a different process from the main add-on code. This article highlights the main features of that design.</dd> + <dt><a href="Guides/Testing_the_Add-on_SDK">Testing the Add-on SDK</a></dt> + <dd>Learn how to run the Add-on SDK test suites.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="SDK_infrastructure"><a name="sdk-infrastructure">SDK infrastructure</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="Guides/Module_structure_of_the_SDK">Module structure of the SDK</a></dt> + <dd>The SDK, and add-ons built using it, are of composed from reusable JavaScript modules. This explains what these modules are, how to load modules, and how the SDK's module tree is structured.</dd> + <dt><a href="Guides/SDK_API_Lifecycle">SDK API lifecycle</a></dt> + <dd>Definition of the lifecycle for the SDK's APIs, including the stability ratings for APIs.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="Guides/Program_ID">Program ID</a></dt> + <dd>The Program ID is a unique identifier for your add-on. This guide explains how it's created, what it's used for and how to define your own.</dd> + <dt><a href="Guides/Firefox_Compatibility">Firefox compatibility</a></dt> + <dd>Working out which Firefox releases a given SDK release is compatible with, and dealing with compatibility problems.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="SDK_idioms"><a name="sdk-idioms">SDK idioms</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="Guides/Working_with_Events">Working With Events</a></dt> + <dd>Write event-driven code using the the SDK's event emitting framework.</dd> + <dt><a href="Guides/Content_Scripts">Content scripts guide</a></dt> + <dd>An overview of content scripts, including: what they are, what they can do, how to load them, how to communicate with them.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="Guides/Two_Types_of_Scripts">Two Types of Scripts</a></dt> + <dd>This article explains the differences between the APIs available to your main add-on code and those available to content scripts.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="XUL_migration"><a name="xul-migration">XUL migration</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="Guides/XUL_Migration_Guide">XUL Migration Guide</a></dt> + <dd>Techniques to help port a XUL add-on to the SDK.</dd> + <dt><a href="Guides/XUL_vs_SDK">XUL versus the SDK</a></dt> + <dd>A comparison of the strengths and weaknesses of the SDK, compared to traditional XUL-based add-ons.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="Guides/Porting_the_Library_Detector">Porting Example</a></dt> + <dd>A walkthrough of porting a relatively simple XUL-based add-on to the SDK.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="Multiprocess_Firefox"><a name="multiprocess-firefox">Multiprocess Firefox</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="Guides/Multiprocess_Firefox_and_the_SDK">Multiprocess Firefox and the SDK</a></dt> + <dd>How to check whether your add-on is compatible with multiprocess Firefox, and fix it if it isn't.</dd> +</dl> +</div> + +<div class="column-half"> </div> +</div> + +<hr> +<div> +<div class="overheadIndicator communitybox" dir="ltr"> +<div class="column-container"> +<h2 id="Join_the_Add-on_SDK_community">Join the Add-on SDK community</h2> + +<div class="column-half"> +<div class="communitysubhead">Choose your preferred method for joining the discussion:</div> + +<ul class="communitymailinglist"> + <li><a href="https://lists.mozilla.org/listinfo/">Mailing list</a></li> + <li><a href="https://twitter.com/mozillajetpack">Twitter</a></li> + <li><a href="http://stackoverflow.com/questions/tagged/firefox-addon-sdk">Stack Overflow</a></li> + <li><a href="http://groups.google.com/group/mozilla-labs-jetpack">Newsgroup</a></li> + <li><a href="http://groups.google.com/group/mozilla-labs-jetpack/feeds">RSS feed</a></li> +</ul> +</div> + +<div class="column-half"> +<ul class="communitycontact"> + <li><strong>IRC: </strong><a href="irc://irc.mozilla.org/jetpack">#jetpack</a> <span class="smaller">(<a href="https://wiki.mozilla.org/IRC">learn more</a>)</span></li> + <li><strong>Team info: </strong><a href="https://wiki.mozilla.org/Jetpack" title="Designs and plans for the SDK tools">Jetpack Wiki</a></li> +</ul> +</div> +</div> +</div> +</div> diff --git a/files/pt-br/mozilla/add-ons/sdk/guides/working_with_events/index.html b/files/pt-br/mozilla/add-ons/sdk/guides/working_with_events/index.html new file mode 100644 index 0000000000..9c51d1328f --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/guides/working_with_events/index.html @@ -0,0 +1,154 @@ +--- +title: Trabalhando com Eventos +slug: Mozilla/Add-ons/SDK/Guides/Working_with_Events +translation_of: Archive/Add-ons/Add-on_SDK/Guides/Working_with_Events +--- +<p>O Add-on SDK suporta programação dirigida a evento.</p> + +<p>Objetos emitem eventos sobre mudança de estados que devem ser interessantes ao código do add-on, tais como abertura de janelas, carregamento de páginas, requisições de rede completas, e cliques de mouse. Pelo registro de uma função de escuta para um emissor de evento um add-on pode receber notificações destes eventos.</p> + +<p><span>Nós falamos sobre scripts de conteúdo em mais detalhes no guia <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Working with Content Scripts</a>.</span></p> + +<p>Adicionalmente, se você está usando scripts de conteúdo para interagir com o conteúdo web, você pode definir seus próprios eventos e usá-los para comunicar entre o código principal do add-on e os scripts de conteúdo. <span id="result_box" lang="pt"><span class="hps">Neste caso,</span> <span class="hps">uma extremidade</span> <span class="hps">da conversa</span> <span class="hps">emite</span> <span class="hps">os</span> <span class="hps">eventos</span><span>,</span> <span class="hps">e</span> <span class="hps">a outra extremidade</span> <span class="hps">ouve</span></span>.</p> + +<p>Portanto, há dois modos principais que você interagirá com o framework emissor de eventos:</p> + +<ul> + <li> + <p><strong>escutando eventos embutidos</strong> emitidos pelos objetos no SDK, tais como abertura de tab, carregamento de páginas, cliques de mouse</p> + </li> + <li> + <p><strong>enviando e recebendo eventos definidos pelos usuários</strong> entre scripts de conteúdo e o código do add-on</p> + </li> +</ul> + +<p>Este guia cobre somente o primeiro destes; o segundo é explicado no guia <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Working with Content Scripts</a>.</p> + +<h2 id="Adicionando_Escutadores">Adicionando Escutadores</h2> + +<p>Você pode adicionar um escutador para um emissor de evento pela chamada ao seu método<code> on(type, listener)</code>.</p> + +<p>Ele leva dois parâmetros:</p> + +<ul> + <li> + <p><strong><code>type</code></strong>: o tipo de evento que nós estamos interessado, identificado por uma string. Muitos emissores de evento devem emitir mais do que um tipo de evento: por exemplo, a janela do navegador deve emitir ambos os eventos <code>open</code> e <code>close</code>. A lista de tipos de eventos válidos é específica a cada emissor de evento e é incluída em sua documentação.</p> + </li> + <li> + <p><strong><code>listener</code></strong>: o escutador em si. Esta é uma função que será chamada sempre que o evento ocorrer. O argumento que será passado para o escutador é específico a um tipo de evento e é documentado com o emissor de evento.</p> + </li> +</ul> + +<p>Por exemplo, o seguinte add-on registra uma escuta com o módulo <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a> para esperar pelo evento <code>ready</code>, e registra uma string no console reportando o evento:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); + +tabs.on("ready", function () { + console.log("tab loaded"); +}); +</pre> + +<p>Não é possível enumerar o conjunto de escutas para um dado evento.</p> + +<p>O valor de <code>this</code> na função de escuta é o objeto que emitiu o evento.</p> + +<h3 id="Escutando_Todos_os_Eventos">Escutando Todos os Eventos</h3> + +<p>Você pode passar o curinga "*" como o argumento <code>type</code>. Se você fizer isso, a escuta será chamada para qualquer evento emitido por qualquer objeto, e seu argumento será o nome do evento:</p> + +<pre class="brush: js">var ui = require("sdk/ui"); +var panels = require("sdk/panel"); +var self = require("sdk/self"); + +var panel = panels.Panel({ + contentURL: self.data.url("panel.html") +}); + +panel.on("*", function(e) { + console.log("event " + e + " was emitted"); +}); + +var button = ui.ActionButton({ + id: "my-button", + label: "my button", + icon: "./icon-16.png", + onClick: handleClick +}); + +function handleClick(state) { + panel.show({ + position: button + }); +}</pre> + +<p>Esta característica do curinga não funciona ainda nos módulos<a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code> tabs</code></a> ou <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows"><code>window</code></a>.</p> + +<h3 id="Adicionando_escutas_em_construtores">Adicionando escutas em construtores</h3> + +<p>Emissores de evento podem ser módulos como no caso do evento <code>ready</code> acima, ou eles podem ser objetos retornados pelos construtores.</p> + +<p>No último caso o objeto <code>options</code> passado para o construtor tipicamente define propriedades cujos nomes são nomes de tipos de eventos suportados prefixados com "on": por exemplo, "onOpen", "onReady" e assim por diante. Então o construtor pode atribuir uma função de escuta para aquela propriedade como uma alternativa a chamada do método do objeto <code>on()</code>.</p> + +<p>Por exemplo: o objeto <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action"><code>ActionButton</code></a> emite um evento quando o botão é clicado.</p> + +<p>O add-on a seguir cria um botão e atribui uma escuta para a propriedade <code>onClick</code> do objeto fornecida no <code>options</code> do construtor do objeto botão. A escuta carrega https://developer.mozilla.org/:</p> + +<pre class="brush: js">require("sdk/ui/button/action").ActionButton({ + id: "visit-mozilla", + label: "Visit Mozilla", + icon: "./icon-16.png", + onClick: function() { + require("sdk/tabs").open("https://developer.mozilla.org/"); + } +}); +</pre> + +<p>Isto é exatamente equivalente a construir o botão e então chamar o método <code>on()</code> do botão</p> + +<pre class="brush: js">var button = require("sdk/ui/button/action").ActionButton({ + id: "visit-mozilla", + label: "Visit Mozilla", + icon: "./icon-16.png" +}); + +button.on("click", function() { + require("sdk/tabs").open("https://developer.mozilla.org/"); +}); +</pre> + +<h2 id="Removendo_Escutas_de_Evento">Removendo Escutas de Evento</h2> + +<p>Escutas de evento pode ser removidos pela chamada de <code>removeListener(type, listener)</code>, fornecendo o tipo do evento e escuta a remover.</p> + +<p>A escuta deve ter sido previamente adicionada usando um dos métodos descritos acima.</p> + +<p>No add-on a seguir, nós adicionamos duas escutas para o <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/tabs#ready">evento <code>ready</code> do módulo<code> tab</code></a>. Uma das funções de manipulação remove a escuta.</p> + +<p>Então nós abrimos duas abas.</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); + +function listener1() { + console.log("Listener 1"); + tabs.removeListener("ready", listener1); +} + +function listener2() { + console.log("Listener 2"); +} + +tabs.on("ready", listener1); +tabs.on("ready", listener2); + +tabs.open("https://www.mozilla.org"); +tabs.open("https://www.mozilla.org"); +</pre> + +<p>Nós devemos ver a saída como esta:</p> + +<pre>info: tabevents: Listener 1 +info: tabevents: Listener 2 +info: tabevents: Listener 2 +</pre> + +<p>As escutas serão removidas automaticamente quando o add-on for descarregado.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/high-level_apis/index.html b/files/pt-br/mozilla/add-ons/sdk/high-level_apis/index.html new file mode 100644 index 0000000000..2537723562 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/high-level_apis/index.html @@ -0,0 +1,11 @@ +--- +title: High-Level APIs +slug: Mozilla/Add-ons/SDK/High-Level_APIs +tags: + - Add-on SDK + - NeedsTranslation + - TopicStub +translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs +--- +<p>Modules listed on this page implement high-level APIs for building add-ons: creating user interfaces, interacting with the web, and interacting with the browser.</p> +<p>Unless the documentation explicitly says otherwise, all these modules are "Stable": we'll avoid making incompatible changes to them. {{ LandingPageListSubpages ("/en-US/Add-ons/SDK/High-Level_APIs", 5) }}</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/high-level_apis/request/index.html b/files/pt-br/mozilla/add-ons/sdk/high-level_apis/request/index.html new file mode 100644 index 0000000000..01937e2036 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/high-level_apis/request/index.html @@ -0,0 +1,214 @@ +--- +title: request +slug: Mozilla/Add-ons/SDK/High-Level_APIs/request +translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/request +--- +<div class="note"> +<p>Stable</p> +</div> + +<p><span class="seoSummary">Faça requesições simples de rede. Para uso mais avançado, cheque os módulos</span> <a href="/en-US/Add-ons/SDK/Low-Level_APIs/net_xhr">net/xhr</a>, baseado no objeto <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a> do navegador.</p> + +<h2 id="Globals">Globals</h2> + +<h3 id="Constructors">Constructors</h3> + +<h4 class="addon-sdk-api-name" id="Request(options)"><code>Request(options)</code></h4> + +<p>Este construtor cria um objeto request que pode ser usado para fazer requisições de rede. O construtor leva um único parâmetro <code>options</code> que é usado para configurar várias propriedades no resultado do <code>Request</code>.</p> + +<h5 id="Parâmetros">Parâmetros</h5> + +<p><strong>options : object</strong><br> + Opções opcionais:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>url</td> + <td>string,url</td> + <td> + <p>This is the url to which the request will be made. Can either be a <a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String">String</a> or an instance of the SDK's <a href="/en-US/Add-ons/SDK/High-Level_APIs/url">URL</a>.</p> + </td> + </tr> + <tr> + <td>onComplete</td> + <td>function</td> + <td> + <p>This function will be called when the request has received a response (or in terms of XHR, when <code>readyState == 4</code>). The function is passed a <code>Response</code> object.</p> + </td> + </tr> + <tr> + <td>headers</td> + <td>object</td> + <td> + <p>An unordered collection of name/value pairs representing headers to send with the request.</p> + </td> + </tr> + <tr> + <td>content</td> + <td>string,object</td> + <td> + <p>The content to send to the server. If <code>content</code> is a string, it should be URL-encoded (use <code>encodeURIComponent</code>). If <code>content</code> is an object, it should be a collection of name/value pairs. Nested objects & arrays should encode safely.</p> + + <p>For <code>GET</code> <span style="line-height: 1.5;">and </span><code style="font-style: normal; line-height: 1.5;">HEAD</code><span style="line-height: 1.5;"> requests, the query string (</span><code style="font-style: normal; line-height: 1.5;">content</code><span style="line-height: 1.5;">) will be appended to the URL. For </span><code style="font-style: normal; line-height: 1.5;">POST</code><span style="line-height: 1.5;"> and </span><code style="font-style: normal; line-height: 1.5;">PUT</code><span style="line-height: 1.5;"> requests, it will be sent as the body of the request.</span></p> + </td> + </tr> + <tr> + <td>contentType</td> + <td>string</td> + <td> + <p>The type of content to send to the server. This explicitly sets the <code>Content-Type</code> header. The default value is <code>application/x-www-form-urlencoded</code>.</p> + </td> + </tr> + <tr> + <td>overrideMimeType</td> + <td>string</td> + <td> + <p>Use this string to override the MIME type returned by the server in the response's Content-Type header. You can use this to treat the content as a different MIME type, or to force text to be interpreted using a specific character.</p> + + <p>For example, if you're retrieving text content which was encoded as ISO-8859-1 (Latin 1), it will be given a content type of "utf-8" and certain characters will not display correctly. To force the response to be interpreted as Latin-1, use <code>overrideMimeType</code>:</p> + + <pre class="brush: js"> +var Request = require("sdk/request").Request; +var quijote = Request({ + url: "http://www.latin1files.org/quijote.txt", + overrideMimeType: "text/plain; charset=latin1", + onComplete: function (response) { + console.log(response.text); + } +}); + +quijote.get();</pre> + </td> + </tr> + <tr> + <td>anonymous</td> + <td>boolean</td> + <td>If <code>true</code>, the request will be sent without cookies or authentication headers. This option sets the <a href="/en/docs/Web/API/XMLHttpRequest#Non-standard_properties"><code>mozAnon</code></a> property in the underlying XMLHttpRequest object. Defaults to <code>false</code>.</td> + </tr> + </tbody> +</table> + +<h2 id="Request">Request</h2> + +<p>The <code>Request</code> object is used to make <code>GET</code>, <code style="font-style: normal; line-height: 1.5;"><code style="font-style: normal;">HEAD</code></code>, <code style="font-style: normal; line-height: 1.5;"><code style="font-style: normal;">POST</code></code><span style="line-height: 1.5;">, </span><code style="font-style: normal; line-height: 1.5;">PUT</code><span style="line-height: 1.5;">,</span><span style="line-height: 1.5;"> </span><span style="line-height: 1.5;">or </span><code style="font-style: normal; line-height: 1.5;">DELETE</code><span style="line-height: 1.5;"> network requests. It is constructed with a URL to which the request is sent. Optionally the user may specify a collection of headers and content to send alongside the request and a callback which will be executed once the request completes.</span></p> + +<p>Once a <code>Request</code> object has been created a <code>GET</code> request can be executed by calling its <code>get()</code> method, a <code>POST</code> request by calling its <code>post()</code> method, and so on.</p> + +<p>When the server completes the request, the <code>Request</code> object emits a "complete" event. Registered event listeners are passed a <code>Response</code> object.</p> + +<p>Each <code>Request</code> object is designed to be used once. Attempts to reuse them will throw an error.</p> + +<p>Since the request is not being made by any particular website, requests made here are not subject to the same-domain restriction that requests made in web pages are subject to.</p> + +<p>With the exception of <code>response</code>, all of a <code>Request</code> object's properties correspond with the options in the constructor. Each can be set by simply performing an assignment. However, keep in mind that the same validation rules that apply to <code>options</code> in the constructor will apply during assignment. Thus, each can throw if given an invalid value.</p> + +<p>The example below shows how to use Request to get the most recent tweet from the <a href="https://twitter.com/mozhacks">@mozhacks</a> account:</p> + +<pre class="brush: js">var Request = require("sdk/request").Request; +var latestTweetRequest = Request({ + url: "https://api.twitter.com/1/statuses/user_timeline.json?screen_name=mozhacks&count=1", + onComplete: function (response) { + var tweet = response.json[0]; + console.log("User: " + tweet.user.screen_name); + console.log("Tweet: " + tweet.text); + } +}); + +// Be a good consumer and check for rate limiting before doing more. +Request({ + url: "http://api.twitter.com/1/account/rate_limit_status.json", + onComplete: function (response) { + if (response.json.remaining_hits) { + latestTweetRequest.get(); + } else { + console.log("You have been rate limited!"); + } + } +}).get();</pre> + +<h3 id="Methods">Methods</h3> + +<h4 class="addon-sdk-api-name" id="get()"><code>get()</code></h4> + +<p>Make a <code>GET</code> request.</p> + +<h4 class="addon-sdk-api-name" id="head()" style="line-height: 18px; font-size: 1.28571428571429rem;"><code>head()</code></h4> + +<p>Make a <code>HEAD</code> request.</p> + +<h4 class="addon-sdk-api-name" id="post()"><code>post()</code></h4> + +<p>Make a <code>POST</code> request.</p> + +<h4 class="addon-sdk-api-name" id="put()"><code>put()</code></h4> + +<p>Make a <code>PUT</code> request.</p> + +<h4 class="addon-sdk-api-name" id="delete()"><span style="font-family: courier new,andale mono,monospace; font-size: 1.28571428571429rem; font-style: inherit; font-weight: inherit;">delete()</span></h4> + +<p>Make a <code>DELETE</code> request.</p> + +<h3 id="Properties">Properties</h3> + +<h4 class="addon-sdk-api-name" id="url"><code>url</code></h4> + +<h4 class="addon-sdk-api-name" id="headers"><code>headers</code></h4> + +<h4 class="addon-sdk-api-name" id="content"><code>content</code></h4> + +<h4 class="addon-sdk-api-name" id="contentType"><code>contentType</code></h4> + +<h4 class="addon-sdk-api-name" id="response"><code>response</code></h4> + +<h3 id="Events">Events</h3> + +<h4 class="addon-sdk-api-name" id="complete"><code>complete</code></h4> + +<p>The <code>Request</code> object emits this event when the request has completed and a response has been received.</p> + +<h5 id="Arguments">Arguments</h5> + +<p><strong>Response</strong> : Listener functions are passed the response to the request as a <code>Response</code> object.</p> + +<h2 id="Response">Response</h2> + +<p>The Response object contains the response to a network request issued using a <code>Request</code> object. It is returned by the <code>get()</code>, <code style="font-style: normal; line-height: 1.5;">head()</code><span style="line-height: 1.5;">, </span><code style="font-style: normal; line-height: 1.5;">post()</code><span style="line-height: 1.5;">, </span><code style="font-style: normal; line-height: 1.5;">put()</code><span style="line-height: 1.5;"> </span><span style="line-height: 1.5;">or </span><code style="font-style: normal; line-height: 1.5;">delete()</code><span style="line-height: 1.5;"> method of a </span><code style="font-style: normal; line-height: 1.5;">Request</code><span style="line-height: 1.5;"> object.</span></p> + +<p>All members of a <code>Response</code> object are read-only.</p> + +<h3 id="Properties_2">Properties</h3> + +<h4 class="addon-sdk-api-name" id="text"><code>text</code></h4> + +<p>The content of the response as plain text.</p> + +<h4 class="addon-sdk-api-name" id="json"><code>json</code></h4> + +<p>The content of the response as a JavaScript object. The value will be <code>null</code> if the document cannot be processed by <code>JSON.parse</code>.</p> + +<h4 class="addon-sdk-api-name" id="status"><code>status</code></h4> + +<p>The HTTP response status code (e.g. <em>200</em>).</p> + +<h4 class="addon-sdk-api-name" id="statusText"><code>statusText</code></h4> + +<p>The HTTP response status line (e.g. <em>OK</em>).</p> + +<h4 class="addon-sdk-api-name" id="headers_2"><code>headers</code></h4> + +<p>The HTTP response headers represented as key/value pairs.</p> + +<p>To print all the headers you can do something like this:</p> + +<pre class="brush: js">for (var headerName in response.headers) { + console.log(headerName + " : " + response.headers[headerName]); +}</pre> diff --git a/files/pt-br/mozilla/add-ons/sdk/high-level_apis/tabs/index.html b/files/pt-br/mozilla/add-ons/sdk/high-level_apis/tabs/index.html new file mode 100644 index 0000000000..22493dce1d --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/high-level_apis/tabs/index.html @@ -0,0 +1,671 @@ +--- +title: tabs +slug: Mozilla/Add-ons/SDK/High-Level_APIs/tabs +tags: + - Guías + - Tab +translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/tabs +--- +<div class="note"> +<p>Stable</p> +</div> + +<p><span class="seoSummary">Abre, manipula, e acessa tabs, e recebe eventos de tabs</span></p> + +<h2 id="Uso">Uso</h2> + +<h3 id="Abrir_uma_tab">Abrir uma tab</h3> + +<p>Você pode abrir uma nova tab, especificando várias propriedades incluindo localização:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); +tabs.open("http://www.Exemplo.com");</pre> + +<h3 id="Rastrear_tabs">Rastrear tabs</h3> + +<p>Você pode registrar eventos de escuta para ser notificado quando a tabs abre, fecha, termina o carregamento de conteúdo DOM, ou tornam-se ativa ou inativa:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); + +// Listen for tab openings. +tabs.on('open', function onOpen(tab) { + myOpenTabs.push(tab); +}); + +// Listen for tab content loads. +tabs.on('ready', function(tab) { + console.log('tab is loaded', tab.title, tab.url); +});</pre> + +<h3 id="Accessar_tabs">Accessar tabs</h3> + +<p>O módulo por ele mesmo pode ser usado como uma lista de todas as tabs abertas em todos os navegadores. Em particular, você pode enumerá-las:</p> + +<pre class="brush: js">var tabs = require('sdk/tabs'); +for (let tab of tabs) + console.log(tab.title);</pre> + +<p>Você também pode acessar tabs individual pelo índice:</p> + +<pre class="brush: js">var tabs = require('sdk/tabs'); + +tabs.on('ready', function () { + console.log('first: ' + tabs[0].title); + console.log('last: ' + tabs[tabs.length-1].title); +});</pre> + +<p>Você pode acessar a tab ativa atualmente:</p> + +<pre class="brush: js">var tabs = require('sdk/tabs'); + +tabs.on('activate', function () { + console.log('active: ' + tabs.activeTab.url); +});</pre> + +<h3 id="Rastrear_uma_única_tab">Rastrear uma única tab</h3> + +<p>Dada uma tab, você pode registrar escutas para eventos serem notificados quando a tab é fechada, ativada ou desativada, ou quando a página hospedad pela tab é carregada ou recuperada do <a href="https://developer.mozilla.org/en-US/docs/Working_with_BFCache">"back-forward cache"</a>:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); + +function onOpen(tab) { + console.log(tab.url + " is open"); + tab.on("pageshow", logShow); + tab.on("activate", logActivate); + tab.on("deactivate", logDeactivate); + tab.on("close", logClose); +} + +function logShow(tab) { + console.log(tab.url + " is loaded"); +} + +function logActivate(tab) { + console.log(tab.url + " is activated"); +} + +function logDeactivate(tab) { + console.log(tab.url + " is deactivated"); +} + +function logClose(tab) { + console.log(tab.url + " is closed"); +} + +tabs.on('open', onOpen);</pre> + +<h3 id="Manipular_uma_tab">Manipular uma tab</h3> + +<p>Você pode conseguir e configurar várias propriedades de tabs (mas note que propriedades relacionadas ao conteúdo da tab, tal como URL, não conterão valores válidos até depois do evento <code>ready</code> disparar). Pela configuração da propriedade <code>url</code> você pode carregar uma nova página na tab:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); +tabs.on('activate', function(tab) { + tab.url = "http://www.Exemplo.com"; +});</pre> + +<h3 id="Execute_scripts_em_um_tab">Execute scripts em um tab</h3> + +<p>Você pode anexar um script de <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts">conteúdo a página</a> hospedad na tab, e usar aquele para acessar e manipular o conteúdo da página (veja o tutorial <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">Modifying the Page Hosted by a Tab</a>):</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); + +tabs.on('activate', function(tab) { + var worker = tab.attach({ + contentScript: 'self.port.emit("html", document.body.innerHTML);' + }); + worker.port.on("html", function(message) { + console.log(message) + }) +});</pre> + +<p>Observe que <code>tab.attach</code> é centrado na tab: se o usuário navegar para uma nova página na mesma tab, então o trabalho e scripts de conteúdo serão reanexados á nova página.</p> + +<h3 id="Anexação_de_stylesheets">Anexação de stylesheets</h3> + +<div class="geckoVersionNote"> +<p>Novo no Firefox 34.</p> +</div> + +<p>Você não pode anexar folhas de estilo para uma tab usando <code>tab.attach()</code>, mas do Firefox 34 em diante você pode anexar e desanexa-los usando APIs de baixo nível <a href="/en-US/Add-ons/SDK/Low-Level_APIs/stylesheet_style">stylesheet/style</a> e <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_mod">content/mod</a>. Aqui está um add-on que usa botões alternados para anexar uma folha de estilo a tab ativa, e desanexar novamente. A folha de estilo é chamada "style.css" e está localizada no diretório "data":</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); +var { attach, detach } = require('sdk/content/mod'); +var { Style } = require('sdk/stylesheet/style'); +var { ToggleButton } = require("sdk/ui/button/toggle"); + +var style = Style({ + uri: './style.css' +}); + +var button = ToggleButton({ + id: "stylist", + label: "stylist", + icon: "./icon-16.png", + onChange: function(state) { + if (state.checked) { + attach(style, tabs.activeTab); + } + else { + detach(style, tabs.activeTab); + } + } +});</pre> + +<h3 id="Janelas_Privadas">Janelas Privadas</h3> + +<p>Se o seu add-on não optou por entrar em navegação privada, então você não verá quaisquer tabs pela janela de navegação privada.</p> + +<p>Tabs hospedadas por janelas em navegação privada não serão vista se você enumerar o módulo <code>tab</code> por si mesmo, e você não receberá quaisquer eventos deles.</p> + +<p>Para aprender mais sobre janelas privadas, como optar por entrar em navegação privada, e como suportar navegação privada, dirija-se à <a href="/en-US/Add-ons/SDK/High-Level_APIs/private-browsing">documentação do módulo para <code>private-browsing</code></a>.</p> + +<h3 id="Converção_para_XUL_tabs">Converção para XUL tabs</h3> + +<p>Para converter de um objeto <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#Tab"><code>Tab</code></a> de alto nível usando esta API para um objeto <a href="/en-US/docs/Mozilla/Tech/XUL/tab">XUL <code>tab</code></a> de baixo nível usado na API <a href="/en-US/Add-ons/SDK/Low-Level_APIs/tabs_utils"><code>tabs/utils</code></a> e por add-ons tradicionais, use a função <code>viewFor()</code> exportada pelo móduloa <code>viewFor</code>.</p> + +<p>Para converter de volta, de uma <code>tab</code> XUL para um objeto <code>Tab</code> de alto nível, use a função <code>modelFor(),</code> exportada pelo módulo <code>modelFor</code>.</p> + +<p>Aqui está um exemplo covertendo de uma <code>Tab </code>de alto nível para uma <code>tab XUL</code> e então converte de volta:</p> + +<pre class="brush: js">var { modelFor } = require("sdk/model/core"); +var { viewFor } = require("sdk/view/core"); + +var tabs = require("sdk/tabs"); +var tab_utils = require("sdk/tabs/utils"); + +function mapHighLevelToLowLevel(tab) { + // get the XUL tab that corresponds to this high-level tab + var lowLevelTab = viewFor(tab); + // now we can, for Exemplo, access the tab's content directly + var browser = tab_utils.getBrowserForTab(lowLevelTab); + console.log(browser.contentDocument.body.innerHTML); + // get the high-level tab back from the XUL tab + var highLevelTab = modelFor(lowLevelTab); + console.log(highLevelTab.url); +} + +tabs.on("ready", mapHighLevelToLowLevel); +</pre> + +<p>Observe que acessar objetos XUL diretamente e conteúdo web como este significa que você não está protegido pelas garantias de compatibilidades feitas pelas APIs de alto nível do SDK. Em particular, seu código não deve trabalhar com <a href="http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/">multiprocess Firefox</a>.</p> + +<h2 id="Globais">Globais</h2> + +<h3 id="Funções">Funções</h3> + +<h4 class="addon-sdk-api-name" id="open(opções)"><code>open(opções)</code></h4> + +<p>Abre uma nova tab. A nova tab abrirá na janela ativa ou na nova janela, dependendo da opção <code>inNewWindow</code>.</p> + +<p><strong>Examplo</strong></p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); + +// Open a new tab on active window and make tab active. +tabs.open("http://www.mysite.com"); + +// Open a new tab in a new window and make it active. +tabs.open({ + url: "http://www.mysite.com", + inNewWindow: true +}); + +// Open a new tab on active window in the background. +tabs.open({ + url: "http://www.mysite.com", + inBackground: true +}); + +// Open a new tab as an app tab and do something once it's open. +tabs.open({ + url: "http://www.mysite.com", + isPinned: true, + onOpen: function onOpen(tab) { + // do stuff like listen for content + // loading. + } +});</pre> + +<h5 id="Parâmetros">Parâmetros</h5> + +<p><strong>opção: object</strong><br> + Opções necessárias:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>url</td> + <td>string</td> + <td> + <p>URL a ser aberta na nova tab. Esta é uma propriedade necessária.</p> + </td> + </tr> + </tbody> +</table> + +<p>Opções opcionais:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>isPrivate</td> + <td>boolean</td> + <td> + <p>Boolean que determinará se a nova tab deve ser privada ou não. Se seu add-on não suporta navegação privada isto não terá efeito. Veja a documentação de <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/private-browsing">navegação privada</a> para mais informação. O padrão é <code>false</code>.</p> + </td> + </tr> + <tr> + <td>inNewWindow</td> + <td>boolean</td> + <td> + <p>Se presente e true, uma nova janela de navegação será aberta e na primeira tab naquela janela. Esta é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>inBackground</td> + <td>boolean</td> + <td> + <p>Se presente e true, a nova tab será aberta à direita da tab ativa e não estará ativa. Esta é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>isPinned</td> + <td>boolean</td> + <td> + <p>Se presente e true, a nova tab será anexada como um <a href="http://support.mozilla.com/en-US/kb/what-are-app-tabs">app tab</a>.</p> + </td> + </tr> + <tr> + <td>onOpen</td> + <td>function</td> + <td> + <p>Uma função que será registrada para o evento 'open'. Esta é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onClose</td> + <td>function</td> + <td> + <p>Uma função de callback que será registrada para o evento 'close'. Esta é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onReady</td> + <td>function</td> + <td> + <p>Uma função de callback que será registrada para o evento 'ready'. Esta é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onLoad</td> + <td>function</td> + <td> + <p>Uma função de callback que será registrada para o evento 'load'. Esta é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onPageShow</td> + <td>function</td> + <td> + <p>Uma função de callback que será registrada para o evento 'pageshow'. Esta é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onActivate</td> + <td>function</td> + <td> + <p>Uma função de callback que será registrada para o evento 'activate'. Esta é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onDeactivate</td> + <td>function</td> + <td> + <p>Uma função de callback que será registrada para o evento 'deactivate'. Esta é uma propriedade opcional.</p> + </td> + </tr> + </tbody> +</table> + +<h3 id="Propriedades">Propriedades</h3> + +<h4 class="addon-sdk-api-name" id="activeTab"><code>activeTab</code></h4> + +<p>A tab ativa na janela ativa. Esta propriedade é somente leitura. Para ativar um objeto<code> Tab</code>, chame seu método <code>activate</code>.</p> + +<p><strong>Exemplo</strong></p> + +<pre class="brush: js">// Get the active tab's title. +var tabs = require("sdk/tabs"); +console.log("title of active tab is " + tabs.activeTab.title);</pre> + +<h4 class="addon-sdk-api-name" id="length"><code>length</code></h4> + +<p>O número de tabs abertas em todas as janelas.</p> + +<h3 id="Eventos">Eventos</h3> + +<h4 class="addon-sdk-api-name" id="open"><code>open</code></h4> + +<p>Este evento é emitido quando uma nova tab é aberta. Isto não significa que o conteúdo carregou, somente que o navegador está inteiramente visível para o usuário.</p> + +<p>Propriedades relacionadas à conteúdo da tab (por exemplo: <code>title</code>, <code>favicon</code>, e <code>url</code>) não serão corrigidas neste ponto. Se você precisar acessar estas propriedades, escute o evento <code>ready</code>:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); +tabs.on('open', function(tab){ + tab.on('ready', function(tab){ + console.log(tab.url); + }); +});</pre> + +<h5 id="Argumentos">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas ao objeto tab que acaba de abrir.</p> + +<h4 class="addon-sdk-api-name" id="close"><code>close</code></h4> + +<p>Este evento é emitido quando a tab é fechada. Quando a janela é fechada este evento será emitido para cada uma das tabs abertas naquela janela.</p> + +<h5 id="Argumentos_2">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas ao objeto tab que fechou.</p> + +<h4 class="addon-sdk-api-name" id="ready"><code>ready</code></h4> + +<p>Este evento é emitido quando o DOM para o conteúdo da página estiver preparado. É equivalmente ao evento <code>DOMContentLoaded</code> para conteúdo da página dada.</p> + +<p>Um única tab emitirá este evento toda vez todas às vezes que o DOM for carregado: então será emitido novamente se o endereço da página mudar ou o conteúdo for recarregado.</p> + +<p>Depois que este evento for emitido, todas as propriedades relacionadas ao conteúdo da página poderão ser usadas.</p> + +<h5 id="Argumentos_3">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas ao objeto tab que carregou.</p> + +<h4 class="addon-sdk-api-name" id="activate"><code>activate</code></h4> + +<p>Este evento é emitido quando uma tab inativa torna-se ativa.</p> + +<h5 id="Argumentos_4">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas para o objeto tab que torna-se ativa.</p> + +<h4 class="addon-sdk-api-name" id="deactivate"><code>deactivate</code></h4> + +<p>Este evento é emitido quando a tab ativa torna-se inativa.</p> + +<h5 id="Argumentos_5">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas para o objeto tab que tornou-se inativo.</p> + +<h2 id="Tab">Tab</h2> + +<p>Uma instância Tab representa um única tab aberta. Ele contém várias propriedades, vários métodos para manipulação, assim como registração de evento por tab.</p> + +<p>Tabs emitem todos os eventos descritos na seção de Eventos. Escutas são passadas ao objeto <code>Tab</code> que lança eventos.</p> + +<h3 id="Métodos">Métodos</h3> + +<h4 class="addon-sdk-api-name" id="pin()"><code>pin()</code></h4> + +<p>Anexa a tab como uma <a href="http://support.mozilla.com/en-US/kb/what-are-app-tabs">app tab</a>.</p> + +<h4 class="addon-sdk-api-name" id="unpin()"><code>unpin()</code></h4> + +<p>Desanexa esta tab.</p> + +<h4 class="addon-sdk-api-name" id="close(callback)"><code>close(callback)</code></h4> + +<p>Fecha esta tab.</p> + +<h5 id="Parâmetros_2">Parâmetros</h5> + +<p><strong>callback : function</strong><br> + Uma função será chamada quanto a tab termine seu processo de fechamento. Este é uma argumento opcional.</p> + +<h4 class="addon-sdk-api-name" id="reload()"><code>reload()</code></h4> + +<p>Recarrega esta tab.</p> + +<h4 class="addon-sdk-api-name" id="activate()"><code>activate()</code></h4> + +<p>Torna esta tab ativa, que trará esta tab para o primeiro plano.</p> + +<h4 class="addon-sdk-api-name" id="getThumbnail()"><code>getThumbnail()</code></h4> + +<p>Retorna o dado thumbnail da URI da página atualmente carregada nesta tab.</p> + +<h4 class="addon-sdk-api-name" id="attach(options)"><code>attach(options)</code></h4> + +<p>Anexa um ou mais scripts ao documento carregado na tab. Observe que este é centrado na tab: se o usuário navega para uma nova página na mesma tab, então o script de conteúdo será reanexado à nova página.</p> + +<p><strong>Exemplo</strong></p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); + +tabs.on('ready', function(tab) { + var worker = tab.attach({ + contentScript: + 'document.body.style.border = "5px solid red";' + }); +});</pre> + +<h5 id="Parâmetros_3">Parâmetros</h5> + +<p><strong>options : objeto</strong><br> + Opções opcionais:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>contentScriptFile</td> + <td>string,array</td> + <td> + <p>As URLs dos arquivos locais dos scripts de conteúdo carregados. Scripts de conteúdo especificados por esta opção são carregados <em>antes </em>daqueles especificados pela opção <code>contentScript</code>. Opcional.</p> + </td> + </tr> + <tr> + <td>contentScript</td> + <td>string,array</td> + <td> + <p>Uma string ou uma array de strings do código para ser avaliado no contexto. Scripts de conteúdo especificados por esta opção são carregados <em>depois</em> daqueles especificados pela opção <code>contentScriptFile</code>. Opcional.</p> + </td> + </tr> + <tr> + <td>contentScriptOptions</td> + <td>object</td> + <td> + <p>Você pode usar esta opção para definir valores somente leitura para seus scripts de conteúdo.</p> + + <p>A opção consiste de uma listagem de objetos literais no formato pares <code>name:value</code> para os valores que você quer fornecer para o script de conteúdo. Por exemplo:</p> + + <pre class="brush: js"> +// main.js + +const tabs = require("sdk/tabs"); + +tabs.open({ + url: "./page.html", + onReady: function(tab) { + tab.attach({ + contentScriptFile: "./content-script.js", + contentScriptOptions: { + a: "blah" + } + }); + } +});</pre> + + <p>Os valores são acessíveis ao script de conteúdo via propriedade <code>self.options</code>:</p> + + <pre class="brush: js"> +// content-script.js + +alert(self.options.a);</pre> + </td> + </tr> + <tr> + <td>onMessage</td> + <td>function</td> + <td> + <p>Uma função chamada quando o conteúdo de trabalho recebe uma mensagem dos scripts de conteúdo. Escutas são passadas como um único argumento, a mensagem postada do script de conteúdo.</p> + </td> + </tr> + <tr> + <td>onError</td> + <td>function</td> + <td> + <p>Uma função chamada quando o trabalhador de conteúdo recebe um erro dos scripts de conteúdo. Escutas são passar como um único argumento, <code>error</code>, que é erro postado do script de conteúdo e um objeto do tipo <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error">Error</a>. Opcional.</p> + </td> + </tr> + </tbody> +</table> + +<h5 id="Retorno">Retorno</h5> + +<p><strong>Worker</strong> : O objeto <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker">Worker</a> pode ser usado para comunicar com o script de conteúdo. Veja o <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">guia de scripts de conteúdo</a> para aprender os detalhes.</p> + +<h3 id="Propriedades_2">Propriedades</h3> + +<h4 class="addon-sdk-api-name" id="id"><code>id</code></h4> + +<p>O único id para a tab. Esta propriedade é somente leitura.</p> + +<h4 class="addon-sdk-api-name" id="title"><code>title</code></h4> + +<p>O título da tab (normalmente o título da página atualmente carregada na tab). Esta propriedade pode ser configurada para mudar o título da tab.</p> + +<h4 class="addon-sdk-api-name" id="url"><code>url</code></h4> + +<p>A URL da página atualmente carregada na tab. Esta propriedade pode ser configurada para carregar uma URL diferente na tab.</p> + +<h4 class="addon-sdk-api-name" id="favicon"><code>favicon</code></h4> + +<p>A URL do favicon para a página atualmente carregada na tab. Esta propriedade é somente para leitura.</p> + +<div class="warning">Esta propriedade está desatualizada. Da versão 1.15, use a função <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_favicon">getFavicon() do módulo favicon</a> ao invés.</div> + +<h4 class="addon-sdk-api-name" id="contentType"><code>contentType</code></h4> + +<div class="experimental"><strong>Esta é uma API experimental atualmente, então nós devemos mudar ele em lançamentos futuros. </strong> + +<p>Retorna o tipo MIME que o documento atualmente tem carregado na tab sendo desenhada. Ele deve vir do cabeçalho do HTTP ou outra fonte de informação MIME, e deve ser afetado pela conversão de tipo automática executada pelo navegador ou extensão. Esta propriedade é somente leitura.</p> +</div> + +<h4 class="addon-sdk-api-name" id="index"><code>index</code></h4> + +<p>O índice da tab relativa a outras tabs na janela da aplicação. Esta propriedade pode ser configurada para mudar sua posição relativa.</p> + +<h4 class="addon-sdk-api-name" id="isPinned"><code>isPinned</code></h4> + +<p>Se ou não esta tab é anexável como uma <a href="http://support.mozilla.com/en-US/kb/what-are-app-tabs">app tab</a>. Esta propriedade é somente leitura.</p> + +<h4 class="addon-sdk-api-name" id="window"><code>window</code></h4> + +<p>O objeto <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#BrowserWindow"><code>window</code></a> para esta tab.</p> + +<h4 class="addon-sdk-api-name" id="readyState"><code>readyState</code></h4> + +<div class="geckoVersionNote"> +<p>Novo no Firefox 33.</p> +</div> + +<p>Uma string dizendo a você qual o estado de carga do documento hospedado por esta tab. Isto corresponde diretamente ao <a href="/en-US/docs/Web/API/document.readyState"><code>Document.readyState</code></a>. Ele tem um de quatro valores possíveis:</p> + +<ul> + <li>"uninitialized": o documento da tab não está ainda carregado</li> + <li>"loading": o documento da tab está ainda em processo de carga</li> + <li>"interactive": o documento da tab carregou e está analisado, mas os recursos tais como imagens e folhas de escilo devem ainda ser carregados</li> + <li>"complete": o documento da tab e todos os recursos estão inteiramente carregados</li> +</ul> + +<p>Uma vez que o <code>readyState</code> da tab entrou no "interactive", você pode pegar as propriedades tais como a URL do documento.</p> + +<h3 id="Eventos_2">Eventos</h3> + +<h4 class="addon-sdk-api-name" id="close_2"><code>close</code></h4> + +<p>Este evento é emitido quando a tab é fechada. Ele também é emitido quando a janela da tab é fechada.</p> + +<h5 id="Argumentos_6">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas ao objeto tab.</p> + +<h4 class="addon-sdk-api-name" id="ready_2"><code>ready</code></h4> + +<p>Este evento é emitido quando o DOM para o conteúdo da tab estiver preparado. Ele é equivalente ao evento <a href="https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded"><code>DOMContentLoaded</code></a> para o dado conteúdo da página. Neste ponto o documento por si só está inteiramente carreado e analisado, mas recursos tais como folhas de estilo e imagens devem estar ainda carregando.</p> + +<p>Uma única tab emitirá este evento todas às vezes que o DOM estiver carregado: então ela será emitida novamente se o endereço da tab mudar ou o conteúdo for recarregado. Depois deste evento ser emitido, todas as propriedades relacionadas ao conteúdo da tab podem ser usadas.</p> + +<h5 id="Argumentos_7">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas ao objeto tab.</p> + +<h4 class="addon-sdk-api-name" id="load"><code>load</code></h4> + +<p>Este evento é emitido quando a página do conteúdo da tab estiver carregada. É equivalente ao evento <a href="https://developer.mozilla.org/en-US/docs/Web/Reference/Events/load"><code>load</code></a> para o dado conteúdo da página. Neste ponto o documento e seus recursos, tais como imagens e folhas de estilo, terminaram o carregamento.</p> + +<p>Este evento pode ser usado por páginas que não tem um evento <code>DOMContentLoaded</code>, como imagens. Para páginas que tem um evento<code> DOMContentLoaded</code>, <code>load</code> é disparado depois do <code>ready</code>.</p> + +<p>Uma única tab emitirá este evento toda vez que a página for carregada: então ele será emitido novamente se o endereço da tab mudar ou o conteúdo for recarregado. Depois deste evento ser emitido, todas as propriedades relacionadas ao conteúdo da tab podem ser usados</p> + +<h5 id="Argumentos_8">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas para o objeto tab.</p> + +<h4 class="addon-sdk-api-name" id="pageshow"><code>pageshow</code></h4> + +<p>O evento <code>pageshow</code> é emitido quando a página para o conteúdo da tab for carregado. É equivalente ao evento <a href="https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/pageshow"><code>pageshow</code></a> para um dado conteúdo da página.</p> + +<p>Este evento é similar aos eventos <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#load"><code>load</code></a> e <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#ready"><code>ready</code></a>, exceto que diferente de <code>load</code> e <code>ready</code>, <code>pageshow</code> é lançado se a página for recuperada do <a href="https://developer.mozilla.org/en-US/docs/Working_with_BFCache">bfcache.</a> Isto significa que se o usuário carrega a página, carrega uma nova página, então se move para a página anterior usando o botão "Back", o evento <code>pageshow</code> é emitido quando o usuário volta a página, enquanto os eventos <code>load</code> e <code>ready</code> não são.</p> + +<p>Este evento <em>não</em> é emitido quando a tab fica ativa: para conseguir ser notificado sobre isso, você precisa escutar o evento <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#activate"><code>activate</code></a>.</p> + +<p>Depois que este evento foi emitido, todas as propriedades relacionadas ao conteúdo da tab podem ser usadas. Ele é emitido depois do <code>load</code> e <code>ready</code>.</p> + +<h5 id="Argumentos_9">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas ao objeto tab.</p> + +<p><strong>persisted</strong> : Escutas são passadas um valor booleano indicando se ou não a página foi carregada do <a href="https://developer.mozilla.org/en-US/docs/Working_with_BFCache">bfcache</a>.</p> + +<h4 class="addon-sdk-api-name" id="activate_2"><code>activate</code></h4> + +<p>Este evento é emitido quando a tab torna-se ativa.</p> + +<p>Observe que você não pode garantir que o conteúdo da tab, ou mesmo sua <code>url</code>, estão inicializados na hora que o <code>activate</code> foi emitido. Isto porque quando uma nova tab é aberta, seu evento activate pode ser emitido antes do conteúdo ser carregado.</p> + +<p>Você pode usar a propriedade <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#readyState"><code>readyState</code></a> da tab para determinar se o conteúdo da tab e <code>url</code> estão disponíveis: se o <code>readyState</code> está <code>uninitialized</code> ou <code>loading</code>, então você não pode acessar as propriedades da tab e deve esperar pelo evento <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#ready_2"><code>ready</code></a> da tab.</p> + +<h5 id="Argumentos_10">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas ao objeto.</p> + +<h4 class="addon-sdk-api-name" id="deactivate_2"><code>deactivate</code></h4> + +<p>Este evento é emitido quando a tab torna-se inativa.</p> + +<h5 id="Argumentos_11">Argumentos</h5> + +<p><strong>Tab</strong> : Escutas são passadas ao objeto tab.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/high-level_apis/windows/index.html b/files/pt-br/mozilla/add-ons/sdk/high-level_apis/windows/index.html new file mode 100644 index 0000000000..35c0b6bdb3 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/high-level_apis/windows/index.html @@ -0,0 +1,303 @@ +--- +title: Janelas +slug: Mozilla/Add-ons/SDK/High-Level_APIs/windows +tags: + - Add-on SDK +translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/windows +--- +<div class="note"> +<p>Stable</p> +</div> + +<p><span class="seoSummary">Enumera e examina janelas do navegador abertas, abre novas janelas, e escuta por eventos de janela.</span></p> + +<h2 id="Uso">Uso</h2> + +<p>O módulo <code>windows</code> fornece funções básicas para trabalhar janelas de navegador. Com este módulo, você pode:</p> + +<ul> + <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#open(options)">enumerar as janeals abertas atualmente</a></li> + <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#open(options)">abrir novas janelas do navegador</a></li> + <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#Events">criar escutas para eventos comuns de janela tais como open e close</a></li> +</ul> + +<h3 id="Janelas_Privadas">Janelas Privadas</h3> + +<p>Se seu add-on não optou pela navegação privada, então você não verá qualquer janela de navegação privada. Janelas de navegação privada não aparecerão na propriedade <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#browserWindows"><code>browserWindows</code></a>, você não receberá qualquer evento de janela, e você não será capaz de abrir janelas privadas.</p> + +<p>Para aprender mais sobre navegação privada, como optar pela navegação privada, e como suportar navegação privada dirija-se à <a href="/en-US/Add-ons/SDK/High-Level_APIs/private-browsing">documentação para o módulo <code>private-browsing</code></a>.</p> + +<h3 id="Converção_para_as_Janelas_Chrome">Converção para as Janelas Chrome</h3> + +<p>Para converter do objeto <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#BrowserWindow"><code>BrowserWindow</code></a> usando nesta API para o objeto chrome <a href="/en-US/docs/Web/API/Window"><code>window</code></a> usado na API <a href="/en-US/Add-ons/SDK/Low-Level_APIs/window_utils"><code>window/utils</code></a>, use a função <code>viewFor()</code> expotada pelo módulo <code>viewFor()</code>.</p> + +<p>Para converter de vola, de uma janela chrome para um objeto <code>BrowserWindow</code>, use a função <code>modelFor()</code>, exportada pelo módulo <code>modelFor</code>.</p> + +<p>Aqui está um exemplo convertendo do alto nível <code>BrowserWindow</code> para uma janela chrome, e então voltando para o outro modo:</p> + +<pre class="brush: js">var { modelFor } = require("sdk/model/core"); +var { viewFor } = require("sdk/view/core"); + +var browserWindows = require("sdk/windows").browserWindows; + +function convertToChromeAndBack(browserWindow) { + // get the chrome window for this BrowserWindow + var chromeWindow = viewFor(browserWindow); + // now we can use the chrome window API + console.log(chromeWindow.document.location.href); + // -> "chrome://browser/content/browser.xul" + + // convert back to the high-level window + var highLevelWindow = modelFor(chromeWindow); + // now we can use the SDK's high-level window API + console.log(highLevelWindow.title); +} + +browserWindows.on("open", convertToChromeAndBack);</pre> + +<p>Note que acessar diretamente os objetos chrome de baixo nível significa que você não está protegido pelas garantias de compatibilidade das APIs de alto nível do SDK. Em particular, dependendo de o que você faz com estes objetos, seu código não deve trabalhar com <a href="http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/">multiprocess Firefox</a>.</p> + +<h2 id="Globais">Globais</h2> + +<h3 id="Funções">Funções</h3> + +<h4 class="addon-sdk-api-name" id="open(options)"><code>open(options)</code></h4> + +<p>Abre uma nova janela.</p> + +<pre class="brush: js">var windows = require("sdk/windows").browserWindows; + +// Open a new window. +windows.open("http://www.example.com"); + +// Open a new window and set a listener for "open" event. +windows.open({ + url: "http://www.example.com", + onOpen: function(window) { + // do stuff like listen for content + // loading. + } +});</pre> + +<p>Retorna a janela que foi aberta:</p> + +<pre class="brush: js">var windows = require("sdk/windows").browserWindows; +var example = windows.open("http://www.example.com"); + +require("sdk/ui/button/action").ActionButton({ + id: "read", + label: "Read", + icon: "./read.png", + onClick: function() { + example.close(); + } +}); +</pre> + +<div class="note"> +<p>Este exemplo usa a API <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a>, que está disponível somente do Firefox 29 em frente.</p> +</div> + +<h5 id="Parâmetros">Parâmetros</h5> + +<p><strong>options : object</strong><br> + Opções requeridas:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>url</td> + <td>string</td> + <td> + <p>String com a URL a ser aberta na nova janela. É uma propriedade necessária.</p> + </td> + </tr> + <tr> + <td>isPrivate</td> + <td>boolean</td> + <td> + <p>Boleano que determinará se a nova janela seria privada ou não. Se seus add-ons não suportam navegação privada isto não terá efeito. Veja a documentação sobre <a href="/en-US/Add-ons/SDK/High-Level_APIs/private-browsing">private-browsing</a> para mais informação.</p> + </td> + </tr> + </tbody> +</table> + +<p>Opções opcionais:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>onOpen</td> + <td>function</td> + <td> + <p>Uma função de retorno que é chamada quando a janela está aberta. Isto não significa que o conteúdo da URL foi carregado, somente que a janela por si está inteiramente funcional e suas propriedades podem ser acessadas. Isto é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onClose</td> + <td>function</td> + <td> + <p>Uma função de retorno que é chamada quando a janela será chamada. Isto é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onActivate</td> + <td>function</td> + <td> + <p>Uma função de retorno que é chamada quando a janela está ativa. Isto é uma propriedade opcional.</p> + </td> + </tr> + <tr> + <td>onDeactivate</td> + <td>function</td> + <td> + <p>Uma função de retorno que é chamada quando a janela não está ativa. Isto é uma propriedade opcional.</p> + </td> + </tr> + </tbody> +</table> + +<h5 id="Retorna">Retorna</h5> + +<p><strong>BrowserWindow</strong> :</p> + +<h3 id="Properties">Properties</h3> + +<h4 class="addon-sdk-api-name" id="browserWindows"><code>browserWindows</code></h4> + +<p><code>browserWindows</code> fornece acesso a todas as janelas de navegadores abertas com os objetos <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#BrowserWindow">BrowserWindow</a>.</p> + +<pre class="brush: js">var windows = require("sdk/windows"); +for (let window of windows.browserWindows) { + console.log(window.title); +} + +console.log(windows.browserWindows.length);</pre> + +<p>Este objeto emite todos os eventos listados na seção "Eventos':</p> + +<pre class="brush: js">var windows = require("sdk/windows").browserWindows; + +// add a listener to the 'open' event +windows.on('open', function(window) { + myOpenWindows.push(window); +}); + +// add a listener to the 'close' event +windows.on('close', function(window) { + console.log("A window was closed."); +}); + +// add a listener to the 'activate' event +windows.on('activate', function(window) { + console.log("A window was activated."); +}); + +// add a listener to the 'deactivate' event +windows.on('deactivate', function(window) { + console.log("A window was deactivated."); +});</pre> + +<p>A janela ativa atual é data pelo <code>BrowserWindows.activeWindow</code>:</p> + +<pre class="brush: js">var windows = require("sdk/windows").browserWindows; + +windows.on('activate', function(window) { + console.log("A window was activated."); + var activeWindowTitle = windows.activeWindow.title; + console.log("Active window title is: " + activeWindowTitle); +});</pre> + +<h3 id="Eventos">Eventos</h3> + +<h4 class="addon-sdk-api-name" id="open"><code>open</code></h4> + +<p>Evento emitido quando uma nova janela é aberta. Isso não significa que o conteúdo foi carregado, somente que a janela do navegador por si só está inteiramente visível ao usuário.</p> + +<h5 id="Argumentos">Argumentos</h5> + +<p><strong>Window</strong> : Escutas são passadas para o objeto <code>window</code> que desencadeou o evento.</p> + +<h4 class="addon-sdk-api-name" id="close"><code>close</code></h4> + +<p>Evento emitido quando uma janela é fechada. Você não pode sempre confiar na recepção do evento close para todas as janelas abertas. Em particular, se o usuário fechar o navegador de forma preciptada o que pode fechar o add-on antes das janelas serem fechadas.</p> + +<h5 id="Argumentos_2">Argumentos</h5> + +<p><strong>Window</strong> : escutas são passadas para o objeto <code>window</code> lançou o evento.</p> + +<h4 class="addon-sdk-api-name" id="activate"><code>activate</code></h4> + +<p>Evento emitido quando uma janela inativa é tornada ativa.</p> + +<h5 id="Argumentos_3">Argumentos</h5> + +<p><strong>Window</strong> : Escutas são passadas para o objeto <code>window</code> que torna ativa.</p> + +<h4 class="addon-sdk-api-name" id="deactivate"><code>deactivate</code></h4> + +<p>Evento emitido quando a janela ativa se torna inativa.</p> + +<h5 id="Arguments">Arguments</h5> + +<p><strong>Window</strong> : Escutas são passadas para o objeto<code> window</code> que se tornou inativa.</p> + +<h2 id="BrowserWindow">BrowserWindow</h2> + +<p>Uma instância <code>BrowserWindow</code> representa uma única janela aberta. Elas podem ser recuperadas da propriedade <code>browserWindows</code> exportadas pelo módulo.</p> + +<pre class="brush: js">var windows = require("sdk/windows").browserWindows; + +//Print how many tabs the current window has +console.log("The active window has " + + windows.activeWindow.tabs.length + + " tabs."); + +// Print the title of all browser windows +for (let window of windows) { + console.log(window.title); +} + +// close the active window +windows.activeWindow.close(function() { + console.log("The active window was closed"); +});</pre> + +<h3 id="Métodos">Métodos</h3> + +<h4 class="addon-sdk-api-name" id="activate()"><code>activate()</code></h4> + +<p>Torna a janela ativa, que focará aquela janela e trará ela para o primeiro plano.</p> + +<h4 class="addon-sdk-api-name" id="close(callback)"><code>close(callback)</code></h4> + +<p>Fecha a janela.</p> + +<h5 id="Parâmetros_2">Parâmetros</h5> + +<p><strong>callback : function</strong><br> + Uma função chamada quando a janela termina seu processo de fechamento. É um argumento opcional.</p> + +<h3 id="Propriedades">Propriedades</h3> + +<h4 class="addon-sdk-api-name" id="title"><code>title</code></h4> + +<p>O título atual da janela. Normalmente o título da tab ativa, mais um identificador da app. Esta propriedade é somente leitura.</p> + +<h4 class="addon-sdk-api-name" id="tabs"><code>tabs</code></h4> + +<p>Uma lista ao vivo das tabs na janela. Esse objeto tem as mesma interface da API <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a>, exceto que ele contem somente as tabs nesta janela, não todas as tabs em todas as janelas. Esta propriedade é somente leitura.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/index.html b/files/pt-br/mozilla/add-ons/sdk/index.html new file mode 100644 index 0000000000..88ed15ad16 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/index.html @@ -0,0 +1,102 @@ +--- +title: Add-on SDK +slug: Mozilla/Add-ons/SDK +tags: + - Add-on SDK + - Extensões +translation_of: Archive/Add-ons/Add-on_SDK +--- +<p>Usando a SDK de Add-ons você pode criar add-ons para Firefox usando tecnologias web padrão: Javascript, HTML e CSS. A SDK inclui APIs Javascript as quais você pode utilizar para criar add-ons, além de ferramentas para rodar, testar e empacotar os mesmos.</p> +<hr> +<h3 id="Tutoriais">Tutoriais</h3> +<div class="column-container"> + <div class="column-half"> + <dl> + <dt> + <a href="/en-US/Add-ons/SDK/Tutorials#getting-started">Começando</a></dt> + <dd> + Como <a href="/en-US/Add-ons/SDK/Tutorials/Installation">instalar a SDK</a> e <a href="/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">usar a ferramenta cfx</a> para desenvolver, testar e empacotar add-ons.</dd> + <dt> + <a href="/en-US/Add-ons/SDK/Tutorials#interact-with-the-browser">Interagindo com o Navegador</a></dt> + <dd> + <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Open_a_Web_Page">Abrir páginas web</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Listen_For_Page_Load">escutar por carregamento de páginas</a> e <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/List_Open_Tabs">listar páginas abertas.</a></dd> + <dt> + <a href="/en-US/Add-ons/SDK/Tutorials#development-techniques">Técnicas de Desenvolvimento</a></dt> + <dd> + Aprenda técnicas comúns de desenvolvimento, tal como <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Unit_testing">testes unitários</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Logging">registramento</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Creating_Reusable_Modules">criando módulos reutilizáveis</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/l10n">localização</a> e <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Mobile_development">desenvolvimento mobile</a>.</dd> + </dl> + </div> + <div class="column-half"> + <dl> + <dt> + <a href="/en-US/Add-ons/SDK/Tutorials#create-user-interfaces">Crie componentes de Interface de Usuário</a></dt> + <dd> + Crie componentes de interface de usuário tais como <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar">botões de toolbar</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item">menus de contexto</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">itens de menu</a> e <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Display_a_Popup">dialogs</a>.</dd> + <dt> + <a href="/en-US/Add-ons/SDK/Tutorials#modify-web-pages">Modifique páginas Web</a></dt> + <dd> + Modifique páginas que <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">verificam um padrão de URL</a> ou dinamicamente <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">modifique uma aba em particular</a>.</dd> + <dt> + <a href="/en-US/Add-ons/SDK/Tutorials/Annotator">Juntando Tudo</a></dt> + <dd> + Um guia sobre o exemplo do add-on Annotator</dd> + </dl> + </div> +</div> +<hr> +<h3 id="Guia">Guia</h3> +<div class="column-container"> + <div class="column-half"> + <dl> + <dt> + <a href="/en-US/Add-ons/SDK/Guides#contributors-guide">Guia do Contribuidor</a></dt> + <dd> + Aprenda sobre <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Getting_Started">como começar a contribuir</a> para a SDK e sobre os idiomas mais importantes utilizados no código da SDK, tal como <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Modules">módulos</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Classes_and_Inheritance">classes e herança</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Private_Properties">propriedades privadas</a> e <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Processes">processos de conteúdo</a>.</dd> + <dt> + <a href="/en-US/Add-ons/SDK/Guides#sdk-infrastructure">Infraestrutura da SDK</a></dt> + <dd> + Aspectos da tecnologia fundamental da SDK: <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Module_structure_of_the_SDK">módulos</a>, o <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Program_ID">ID de Programa</a> e regras que definem <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Firefox_Compatibility">compatibilidade do Firefox</a>.</dd> + <dt> + <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Content scripts</a></dt> + <dd> + Um guia detalhado sobre <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts">trabalhar com content scripts</a>, incluindo: <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Loading_content_scripts">como carregar content scripts</a>, <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Accessing_the_DOM">que objetos content scripts podem acessar</a> e <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Communicating_with_other_scripts">como comunicar entre content scripts e o resto do add-on</a>.</dd> + </dl> + </div> + <div class="column-half"> + <dl> + <dt> + <a href="/en-US/Add-ons/SDK/Guides#sdk-idioms">Idiomas da SDK</a></dt> + <dd> + O <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Working_with_Events">event framework</a> da SDK e uma <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Two_Types_of_Scripts">distinção entre scripts add-on e content scripts</a>.</dd> + <dt> + <a href="/en-US/Add-ons/SDK/Guides/XUL_Migration_Guide">Migração de XUL</a></dt> + <dd> + Um guia sobre <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/XUL_Migration_Guide">como portar add-ons XUL para a SDK</a>. Este guia inclui uma <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/XUL_vs_SDK">comparação das duas ferramentas</a> e um <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Porting_the_Library_Detector">exemplo funcionando</a> de como portal um add-on XUL.</dd> + </dl> + </div> +</div> +<hr> +<h3 id="Referência">Referência</h3> +<div class="column-container"> + <div class="column-half"> + <dl> + <dt> + <a href="/en-US/Add-ons/SDK/High-Level_APIs">APIs Alto Nível</a></dt> + <dd> + Documentação referência para as APIs de Alto nível da SDK.</dd> + <dt> + <a href="/en-US/Add-ons/SDK/Tools">Referência de Ferramentas</a></dt> + <dd> + Documentação referência para a <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/cfx">ferramenta cfx</a> usada para desenvolver, testar e empacotar add-ons, o <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/console">console</a> global usado para registro e o arquivo <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json">package.json</a>.</dd> + </dl> + </div> + <div class="column-half"> + <dl> + <dt> + <a href="/en-US/Add-ons/SDK/Low-Level_APIs">APIs Baixo Nível</a></dt> + <dd> + Documentação referência para as APIs baixo nível.</dd> + </dl> + </div> +</div> +<p> </p> diff --git a/files/pt-br/mozilla/add-ons/sdk/low-level_apis/index.html b/files/pt-br/mozilla/add-ons/sdk/low-level_apis/index.html new file mode 100644 index 0000000000..8cd08458f0 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/low-level_apis/index.html @@ -0,0 +1,23 @@ +--- +title: Low-Level APIs +slug: Mozilla/Add-ons/SDK/Low-Level_APIs +tags: + - NeedsTranslation + - TopicStub +translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs +--- +<p>Modules in this section implement low-level APIs. These modules fall roughly into three categories:</p> +<ul> + <li> + <p>fundamental utilities such as <a href="/en-US/Add-ons/SDK/Low-Level_APIs/util_collection">collection</a>. Many add-ons are likely to want to use modules from this category.</p> + </li> + <li> + <p>building blocks for higher level modules, such as <a href="/en-US/Add-ons/SDK/Low-Level_APIs/event_core">events</a> and <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker">worker</a>. You're more likely to use these if you are building your own modules that implement new APIs, thus extending the SDK itself.</p> + </li> + <li> + <p>privileged modules that expose powerful low-level capabilities such as <a href="/en-US/Add-ons/SDK/Low-Level_APIs/window_utils">window/utils</a> and <a href="/en-US/Add-ons/SDK/Low-Level_APIs/net_xhr">net/xhr</a>. You can use these modules in your add-on if you need to, but should be aware that the cost of privileged access is the need to take more elaborate security precautions. In many cases these modules have simpler, more restricted analogs among the "High-Level APIs" (for example, <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows">windows</a> or <a href="/en-US/Add-ons/SDK/High-Level_APIs/request">request</a>).</p> + </li> +</ul> +<p>These modules are still in active development, and we expect to make incompatible changes to them in future releases.</p> +<p>{{ LandingPageListSubpages ("/en-US/Add-ons/SDK/Low-Level_APIs", 5) }}</p> +<p> </p> diff --git a/files/pt-br/mozilla/add-ons/sdk/low-level_apis/ui_sidebar/index.html b/files/pt-br/mozilla/add-ons/sdk/low-level_apis/ui_sidebar/index.html new file mode 100644 index 0000000000..a8bd2be2eb --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/low-level_apis/ui_sidebar/index.html @@ -0,0 +1,455 @@ +--- +title: ui/sidebar +slug: Mozilla/Add-ons/SDK/Low-Level_APIs/ui_sidebar +translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/ui_sidebar +--- +<p>{{AddonSidebar}}</p> + +<div class="note"> +<p>Experimental</p> +</div> + +<p><span class="seoSummary">Enables you to create sidebars.</span> A sidebar is a vertical strip of user interface real estate for your add-on that's attached to the left-hand side of the browser window. You specify its content using HTML, CSS, and JavaScript, and the user can show or hide it in the same way they can show or hide the built-in sidebars.</p> + +<h2 id="Usage">Usage</h2> + +<h3 id="Creating_showing_and_hiding_sidebars">Creating, showing, and hiding sidebars</h3> + +<p>You construct a <code>Sidebar</code> object using the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#Sidebar(options)"><code>Sidebar()</code></a> constructor.</p> + +<p>Once you've done that, you can show the sidebar by calling the Sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#show()"><code>show()</code></a> method. If a new window is opened from a window that has a sidebar visible, the new window gets a sidebar, too.</p> + +<p>You can hide the sidebar by calling its <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#hide()"><code>hide()</code></a> method.</p> + +<p>Called with no arguments, <code>show()</code> and <code>hide()</code> will operate on the currently active window. From Firefox 33 onwards you can pass a <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#BrowserWindow"><code>BrowserWindow</code></a> into these methods, and they will then operate on the specified window.</p> + +<p>Alternatively, the View->Sidebar submenu in Firefox will contain a new item which the user can use to show or hide the sidebar:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/6667/sidebar-menu.png" style="display: block; height: 229px; margin-left: auto; margin-right: auto; width: 518px;">The sidebar generates a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#show"><code>show</code></a> event when it is shown and a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#hide"><code>hide</code></a> event when it is hidden.</p> + +<p>Once you've finished using the sidebar you can destroy it by calling its <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#dispose()"><code>dispose()</code></a> method.</p> + +<p>To show what a sidebar looks like, here's a sidebar that displays the results of running the <a href="http://validator.w3.org/">W3C Validator</a> on the current page:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/6669/sidebar.png" style="display: block; margin-left: auto; margin-right: auto;"></p> + +<h3 id="Specifying_sidebar_content">Specifying sidebar content</h3> + +<p>O conteúdo de uma barra lateral é especificado usando HTML, que é carregado a partir da URL fornecida na opção url do construtor da barra lateral. Ao contrário de módulos como <a href="/en-US/Add-ons/SDK/High-Level_APIs/panel"><code>panel</code></a>, o conteúdo deve ser local, normalmente carregado do diretório de dados ('data') da extensão, através de um URL contruída usando <a href="/en-US/Add-ons/SDK/High-Level_APIs/self#data"><code>self.data.url()</code></a>:</p> + +<pre class="brush: js">var sidebar = require("sdk/ui/sidebar").Sidebar({ + id: 'my-sidebar', + title: 'My sidebar', + url: require("sdk/self").data.url("sidebar.html") +});</pre> + +<div class="note"> +<p>From Firefox 34, you can use <code>"./sidebar.html"</code> as an alias for <code>self.data.url("sidebar.html")</code>. So you can rewrite the above code like this:</p> + +<pre class="brush: js">var sidebar = require("sdk/ui/sidebar").Sidebar({ + id: 'my-sidebar', + title: 'My sidebar', + url: "./sidebar.html" +});</pre> +</div> + +<p>Você pode incluir JavaScript e CSS no HTML como faria com qualquer página da web, por exemplo, usando tags <script> e <link> contendo o caminho relativo ao próprio arquivo HTML.</p> + +<pre class="brush: html"><!DOCTYPE HTML> +<html> + <head> + <link href="stuff.css" type="text/css" rel="stylesheet"> + </head> + <body> + <script type="text/javascript" src="stuff.js"></script> + </body> +</html> + +</pre> + +<p>You can update the sidebar's content by setting the sidebar's <code>url</code> property. This will change the sidebar's content across all windows.</p> + +<h3 id="Communicating_with_sidebar_scripts">Communicating with sidebar scripts</h3> + +<p>You can't directly access your sidebar's content from your main add-on code, but you can send messages between your main add-on code and scripts loaded into your sidebar.</p> + +<p>On the sidebar end of the conversation, sidebar scripts get a global variable <code>addon</code> that contains a <code>port</code> for sending and receiving messages.</p> + +<p>On the add-on side, you need to get a <code>worker</code> object for the sidebar before you can send or receive messages. There are two events emitted by the sidebar which will give you a worker: <code>attach</code> and <code>ready</code>. Listen to <code>attach</code> if the first message in your add-on goes from the sidebar scripts to the main add-on code, and listen to <code>ready</code> if the first message goes from the main add-on code to the sidebar script.</p> + +<h4 id="Using_attach">Using attach</h4> + +<p>The <code>attach</code> event is triggered whenever the DOM for a new sidebar instance is loaded and its scripts are attached. The sidebar script may not be initialized yet, so you can't reliably send messages to the sidebar script right away: however, you can start listening to messages from the script.</p> + +<p>Here's a simple but complete add-on that shows how to set up communication between main.js and a script in a sidebar, in the case where the sidebar script initiates communication:</p> + +<p>The HTML file includes just a script, "sidebar.js":</p> + +<pre class="brush: html"><!DOCTYPE HTML> +<html> + <body> + Content for my sidebar + <script type="text/javascript" src="sidebar.js"></script> + </body> +</html> + +</pre> + +<p>The "sidebar.js" file sends a <code>ping</code> message to main.js using <code>port.emit()</code> as soon as it loads, and adds a listener to the <code>pong</code> message.</p> + +<pre class="brush: js">addon.port.emit("ping"); + +addon.port.on("pong", function() { + console.log("sidebar script got the reply"); +});</pre> + +<p>The "main.js" file creates a sidebar object and adds a listener to its <code>attach</code> event. On attach, "main.js" starts listening to the <code>ping</code> message, and responds with a <code>pong</code>:</p> + +<pre class="brush: js">var sidebar = require("sdk/ui/sidebar").Sidebar({ + id: 'my-sidebar', + title: 'My sidebar', + url: require("sdk/self").data.url("sidebar.html"), + onAttach: function (worker) { + worker.port.on("ping", function() { + console.log("add-on script got the message"); + worker.port.emit("pong"); + }); + } +});</pre> + +<p>Try running the add-on, and showing the sidebar using the "View->Sidebar->My sidebar" menu item. You should see console output like:</p> + +<pre>console.log: add-on: add-on script got the message +console.log: add-on: sidebar script got the reply +</pre> + +<h4 id="Using_ready">Using ready</h4> + +<p>The <code>ready</code> event is emitted when the DOM for the sidebar's content is ready. It is equivalent to the <code>DOMContentLoaded</code> event. At this point the sidebar script is initialized, so you can send messages to the sidebar script and be confident that they will not be lost. Listen to this event if your add-on initiates the conversation.</p> + +<p>Here's a simple but complete add-on that shows how to set up communication between main.js and a script in a sidebar, in the case where the main.js script initiates communication:</p> + +<p>The HTML file includes just a script, "sidebar.js":</p> + +<pre class="brush: html"><!DOCTYPE HTML> +<html> + <body> + Content for my sidebar + <script type="text/javascript" src="sidebar.js"></script> + </body> +</html> + +</pre> + +<p>The "sidebar.js" file listens to the <code>ping</code> message from main.js, and responds with a <code>pong</code> message.</p> + +<pre class="brush: js">addon.port.on("ping", function() { + console.log("sidebar script got the message"); + addon.port.emit("pong"); +});</pre> + +<p>The "main.js" file creates a sidebar object and adds a listener to its <code>attach</code> event. On attach, "main.js" sends the <code>ping</code> message, and starts listening for the <code>pong</code>:</p> + +<pre class="brush: js">var sidebar = require("sdk/ui/sidebar").Sidebar({ + id: 'my-sidebar', + title: 'My sidebar', + url: require("sdk/self").data.url("sidebar.html"), + onReady: function (worker) { + worker.port.emit("ping"); + worker.port.on("pong", function() { + console.log("add-on script got the reply"); + }); + } +});</pre> + +<p>Try running the add-on, and showing the sidebar using the "View->Sidebar->My sidebar" menu item. You should see console output like:</p> + +<pre>console.log: add-on: sidebar script got the message +console.log: add-on: add-on script got the reply +</pre> + +<p> </p> + +<h2 id="Globals">Globals</h2> + +<h3 id="Constructors">Constructors</h3> + +<h4 class="addon-sdk-api-name" id="Sidebar(options)"><code>Sidebar(options)</code></h4> + +<p>Creates a sidebar.</p> + +<pre class="brush: js">var sidebar = require("sdk/ui/sidebar").Sidebar({ + id: 'my-sidebar', + title: 'My sidebar', + url: require("sdk/self").data.url("sidebar.html"), + onAttach: function (worker) { + console.log("attaching"); + }, + onShow: function () { + console.log("showing"); + }, + onHide: function () { + console.log("hiding"); + }, + onDetach: function () { + console.log("detaching"); + } +});</pre> + +<h5 id="Parameters">Parameters</h5> + +<p><strong>options : object</strong><br> + Required options:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>title</td> + <td>string</td> + <td> + <p>A title for the sidebar. This will be used for the label for your sidebar in the "Sidebar" submenu in Firefox, and will be shown at the top of your sidebar when it is open.</p> + </td> + </tr> + <tr> + <td>url</td> + <td>string</td> + <td> + <p>The URL of the content to load in the sidebar. This must be a local URL (typically, loaded from the "data" folder using <code>self.data.url()</code>).</p> + + <div class="note"> + <p>From Firefox 34, you can use <code>"./myFile.html"</code> as an alias for <code>self.data.url("myFile.html")</code>.</p> + </div> + </td> + </tr> + </tbody> +</table> + +<p>Optional options:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>id</td> + <td>string</td> + <td> + <p>The <code>id</code> of the sidebar. This used to identify this sidebar in its chrome window. It must be unique.</p> + + <div class="geckoVersionNote"> + <p>This option was mandatory before Firefox 28.</p> + </div> + </td> + </tr> + <tr> + <td>onAttach</td> + <td>function</td> + <td> + <p>Listener for the sidebar's <code>attach</code> event.</p> + </td> + </tr> + <tr> + <td>onDetach</td> + <td>function</td> + <td> + <p>Listener for the sidebar's <code>detach</code> event.</p> + </td> + </tr> + <tr> + <td>onShow</td> + <td>function</td> + <td> + <p>Listener for the sidebar's <code>show</code> event.</p> + </td> + </tr> + <tr> + <td>onHide</td> + <td>function</td> + <td> + <p>Listener for the sidebar's <code>hide</code> event.</p> + </td> + </tr> + </tbody> +</table> + +<h2 id="Sidebar">Sidebar</h2> + +<p>The Sidebar object. Once a sidebar has been created it can be shown and hidden in the active window using its <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#show()"><code>show()</code></a> and <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#hide()"><code>hide()</code></a> methods. Once a sidebar is no longer needed it can be destroyed using <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#dispose()"><code>dispose()</code></a>.</p> + +<h3 id="Methods">Methods</h3> + +<h4 class="addon-sdk-api-name" id="dispose()"><code>dispose()</code></h4> + +<p>Destroys the sidebar. Once destroyed, the sidebar can no longer be used.</p> + +<h4 class="addon-sdk-api-name" id="show(window)"><code>show(window)</code></h4> + +<p>Displays the sidebar.</p> + +<h5 id="Parameters_2">Parameters</h5> + +<p><strong>window : BrowserWindow</strong><br> + The window in which to show the sidebar, specified as a <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#BrowserWindow"><code>BrowserWindow</code></a>. This parameter is optional. If it is omitted, then the sidebar will be shown in the currently active window. This parameter is new in Firefox 33.</p> + +<h4 class="addon-sdk-api-name" id="hide(window)"><code>hide(window)</code></h4> + +<p>Hides the sidebar.</p> + +<h5 id="Parameters_3">Parameters</h5> + +<p><strong>window : BrowserWindow</strong><br> + The window for which to hide the sidebar, specified as a <a href="/en-US/Add-ons/SDK/High-Level_APIs/windows#BrowserWindow"><code>BrowserWindow</code></a>. This parameter is optional. If it is omitted, then the sidebar will be hidden for the currently active window. This parameter is new in Firefox 33.</p> + +<h4 class="addon-sdk-api-name" id="on(type_listener)"><code>on(type, listener)</code></h4> + +<p>Registers an event listener with the sidebar.</p> + +<h5 id="Parameters_4">Parameters</h5> + +<p><strong>type : string</strong><br> + The type of event to listen for.</p> + +<p><strong>listener : function</strong><br> + The listener function that handles the event.</p> + +<h4 class="addon-sdk-api-name" id="once(type_listener)"><code>once(type, listener)</code></h4> + +<p>Registers an event listener with the sidebar. The difference between <code>on</code> and <code>once</code> is that <code>on</code> will continue listening until it is removed, whereas <code>once</code> is removed automatically upon the first event it catches.</p> + +<h5 id="Parameters_5">Parameters</h5> + +<p><strong>type : string</strong><br> + The type of event to listen for.</p> + +<p><strong>listener : function</strong><br> + The listener function that handles the event.</p> + +<h4 class="addon-sdk-api-name" id="removeListener(type_listener)"><code>removeListener(type, listener)</code></h4> + +<p>Unregisters/removes an event listener from the sidebar.</p> + +<h5 id="Parameters_6">Parameters</h5> + +<p><strong>type : string</strong><br> + The type of event for which <code>listener</code> was registered.</p> + +<p><strong>listener : function</strong><br> + The listener function that was registered.</p> + +<h3 id="Properties">Properties</h3> + +<h4 class="addon-sdk-api-name" id="id"><code>id</code></h4> + +<p>The id of the sidebar. This used to identify this sidebar in its chrome window. It must be unique.</p> + +<h4 class="addon-sdk-api-name" id="title"><code>title</code></h4> + +<p>The title of the sidebar. This will be used for the label for your sidebar in the "Sidebar" submenu in Firefox, and will be shown at the top of your sidebar when it is open.</p> + +<h4 class="addon-sdk-api-name" id="url"><code>url</code></h4> + +<p>The URL of the content to load in the sidebar. This must be a local URL (typically, loaded from the "data" folder using <code>self.data.url()</code>).</p> + +<h3 id="Events">Events</h3> + +<h4 class="addon-sdk-api-name" id="attach"><code>attach</code></h4> + +<p>This event is emitted when a worker is attached to a sidebar, as a result of any of the following:</p> + +<ul> + <li>calling the sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#show()"><code>show()</code></a> method, when the sidebar is not shown in the currently active window</li> + <li>changing the sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#url"><code>url</code></a> property</li> + <li>the user switching the sidebar on using the "Sidebar" submenu in Firefox, when the sidebar is not shown in the currently active window</li> + <li>the user opening a new window from a window that has the sidebar showing</li> +</ul> + +<p>It is passed a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker"><code>worker</code></a> as an argument, which defines <code>port.emit()</code> and <code>port.on()</code> methods that you can use to send messages to, and receive messages from, scripts loaded into the sidebar.</p> + +<p>This is the event you should listen to if your main add-on code needs to communicate with the scripts loaded into the sidebar, and the sidebar scripts start the conversation.</p> + +<p>See <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#Using_attach">Using attach</a> for an example.</p> + +<h4 class="addon-sdk-api-name" id="ready"><code>ready</code></h4> + +<p>This event is emitted after the DOM content for a sidebar has been loaded, as a result of any of:</p> + +<ul> + <li>calling the sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#show()"><code>show()</code></a> method, when the sidebar is not shown in the currently active window</li> + <li>changing the sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#url"><code>url</code></a> property</li> + <li>the user switching the sidebar on using the "Sidebar" submenu in Firefox, when the sidebar is not shown in the currently active window</li> + <li>the user opening a new window from a window that has the sidebar showing</li> +</ul> + +<p>It is passed a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker"><code>worker</code></a> as an argument, which defines <code>port.emit()</code> and <code>port.on()</code> methods that you can use to send messages to, and receive messages from, scripts loaded into the sidebar.</p> + +<p>This is the event you should listen to if your main add-on code needs to communicate with the scripts loaded into the sidebar and the main add-on code starts the conversation.</p> + +<p>See <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#Using_ready">Using ready</a> for an example.</p> + +<h4 class="addon-sdk-api-name" id="detach"><code>detach</code></h4> + +<p>This event is emitted when a worker is detached from a sidebar, as a result of either of the following:</p> + +<ul> + <li>calling the sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#hide()"><code>hide()</code></a> method, when the sidebar is being shown in the currently active window</li> + <li>the user switching the sidebar off using the "Sidebar" submenu in Firefox, when the sidebar is being shown in the currently active window</li> +</ul> + +<p>The <code>detach</code> listener receives a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker"><code>worker</code></a> object as a parameter. This object is the same as the worker passed into the corresponding <code>attach</code> event. After <code>detach</code>, this worker can no longer be used to communicate with the scripts in that sidebar instance, because it has been unloaded.</p> + +<p>If you listen to <code>attach</code>, and in the listener take a reference to the worker object that's passed into it, so you can send it messages later on, then you should probably listen to <code>detach</code>, and in its handler, remove your reference to the worker.</p> + +<p>Here's an add-on that adds each worker to an array in the <code>attach</code> handler, and makes sure that its references are cleaned up by listening to <code>detach</code> and removing workers as they are detached:</p> + +<pre class="brush: js">var workerArray = []; + +function attachWorker(worker) { + workerArray.push(worker); +} + +function detachWorker(worker) { + var index = workerArray.indexOf(worker); + if(index != -1) { + workerArray.splice(index, 1); + } +} + +var sidebar = require("sdk/ui/sidebar").Sidebar({ + id: 'my-sidebar', + title: 'My Sidebar', + url: require("sdk/self").data.url("sidebar.html"), + onAttach: attachWorker, + onDetach: detachWorker +});</pre> + +<h4 class="addon-sdk-api-name" id="show"><code>show</code></h4> + +<p>This event is emitted when the sidebar is shown, as a result of any of the following:</p> + +<ul> + <li>calling the sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#show()"><code>show()</code></a> method, when the sidebar is not shown in the currently active window</li> + <li>changing the sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#url"><code>url</code></a> property</li> + <li>the user switching the sidebar on using the "Sidebar" submenu in Firefox, when the sidebar is not shown in the currently active window</li> + <li>the user opening a new window from a window that has the sidebar showing</li> +</ul> + +<h4 class="addon-sdk-api-name" id="hide"><code>hide</code></h4> + +<p>This event is emitted when the sidebar is hidden, as a result of either of the following:</p> + +<ul> + <li>calling the sidebar's <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar#hide()"><code>hide()</code></a> method, when the sidebar is being shown in the currently active window</li> + <li>the user switching the sidebar off using the "Sidebar" submenu in Firefox, when the sidebar is being shown in the currently active window</li> +</ul> diff --git a/files/pt-br/mozilla/add-ons/sdk/low-level_apis/window_utils/index.html b/files/pt-br/mozilla/add-ons/sdk/low-level_apis/window_utils/index.html new file mode 100644 index 0000000000..5ceef79058 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/low-level_apis/window_utils/index.html @@ -0,0 +1,386 @@ +--- +title: window/utils +slug: Mozilla/Add-ons/SDK/Low-Level_APIs/window_utils +translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/window_utils +--- +<div class="note"> +<p>Unstable</p> +</div> + +<div class="note"> +<p>Note that this module includes functions that give you direct access to web content. These functions are not safe to call in multiprocess Firefox. See <a href="/en-US/Add-ons/SDK/Guides/Multiprocess_Firefox_and_the_SDK">Multiprocess Firefox and the SDK</a> for more details.</p> +</div> + +<p><span class="seoSummary">Functions for working with browser windows.</span></p> + +<h2 id="Usage">Usage</h2> + +<h3 id="Private_windows">Private windows</h3> + +<p>With this module your add-on will see private browser windows even if it has not explicitly opted into private browsing, so you need to take care not to store any user data derived from private browser windows.<br> + <br> + The exception is the windows() function which returns an array of currently opened windows. Private windows will not be included in this list if your add-on has not opted into private browsing.<br> + <br> + To learn more about private windows, how to opt into private browsing, and how to support private browsing, refer to the documentation for the private-browsing module.</p> + +<h2 id="Globals">Globals</h2> + +<h3 id="Functions">Functions</h3> + +<h4 class="addon-sdk-api-name" id="getMostRecentBrowserWindow()"><code>getMostRecentBrowserWindow()</code></h4> + +<p>Get the topmost browser window, as an nsIDOMWindow instance.</p> + +<h5 id="Returns">Returns</h5> + +<p><strong>nsIDOMWindow</strong>: the topmost browser window.</p> + +<h4 class="addon-sdk-api-name" id="getInnerId(window)"><code>getInnerId(window)</code></h4> + +<p>Returns the ID of the specified window's current inner window. This function wraps nsIDOMWindowUtils.currentInnerWindowID.</p> + +<h5 id="Parameters">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong><br> + The window whose inner window we are interested in.</p> + +<h5 id="Returns_2">Returns</h5> + +<p><strong>ID</strong>: the given window's ID.</p> + +<h4 class="addon-sdk-api-name" id="getOuterId(window)"><code>getOuterId(window)</code></h4> + +<p>Returns the ID of the specified window's outer window. This function wraps nsIDOMWindowUtils.outerWindowID.</p> + +<h5 class="addon-sdk-api-name" id="Parameters_2">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong><br> + The window whose outer window we are interested in.</p> + +<h5 id="Returns_3">Returns</h5> + +<p><strong>ID</strong>: the outer window's ID.</p> + +<h4 class="addon-sdk-api-name" id="getXULWindow(window)"><code>getXULWindow(window)</code></h4> + +<p>Returns the nsIXULWindow for the given nsIDOMWindow:</p> + +<pre class="brush: js">var { Ci } = require('chrome'); +var utils = require('sdk/window/utils'); +var active = utils.getMostRecentBrowserWindow(); +active instanceof Ci.nsIXULWindow // => false +utils.getXULWindow(active) instanceof Ci.nsIXULWindow // => true</pre> + +<h5 id="Parameters_3">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_4">Returns</h5> + +<p><strong>nsIXULWindow</strong></p> + +<h4 class="addon-sdk-api-name" id="getBaseWindow(window)"><code>getBaseWindow(window)</code></h4> + +<p>Returns the nsIBaseWindow for the given nsIDOMWindow:</p> + +<pre class="brush: js">var { Ci } = require('chrome'); +var utils = require('sdk/window/utils'); +var active = utils.getMostRecentBrowserWindow(); +active instanceof Ci.nsIBaseWindow // => false +utils.getBaseWindow(active) instanceof Ci.nsIBaseWindow // => true</pre> + +<h5 id="Parameters_4">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_5">Returns</h5> + +<p><strong>nsIBaseWindow</strong></p> + +<h4 class="addon-sdk-api-name" id="getToplevelWindow(window)"><code>getToplevelWindow(window)</code></h4> + +<p>Returns the toplevel nsIDOMWindow for the given child nsIDOMWindow:</p> + +<pre class="brush: js">var { Ci } = require('chrome'); +var utils = require('sdk/window/utils'); +var browserWindow = utils.getMostRecentBrowserWindow(); +var window = browserWindow.content; // `window` object for the current webpage +utils.getToplevelWindow(window) == browserWindow // => true</pre> + +<h5 id="Parameters_5">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_6">Returns</h5> + +<p><strong>nsIDOMWindow</strong></p> + +<h4 class="addon-sdk-api-name" id="getWindowDocShell(window)"><code>getWindowDocShell(window)</code></h4> + +<p>Returns the nsIDocShell for the tabbrowser element.</p> + +<h5 id="Parameters_6">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_7">Returns</h5> + +<p><strong>nsIDocShell</strong></p> + +<h4 class="addon-sdk-api-name" id="getWindowLoadingContext(window)"><code>getWindowLoadingContext(window)</code></h4> + +<p>Returns the nsILoadContext.</p> + +<h5 id="Parameters_7">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_8">Returns</h5> + +<p><strong>nsILoadContext</strong></p> + +<h4 class="addon-sdk-api-name" id="open(uri_options)"><code>open(uri, options)</code></h4> + +<p>This function is used to open top level (application) windows. It takes the uri of the window document as its first argument and an optional hash of options as its second argument.</p> + +<pre class="brush: js">var { open } = require('sdk/window/utils'); +var window = open('data:text/html,Hello Window');</pre> + +<p>This function wraps <a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWindowWatcher">nsIWindowWatcher</a>.openWindow.</p> + +<h5 id="Parameters_8">Parameters</h5> + +<p><strong>uri : string</strong><br> + URI of the document to be loaded into the window. Only chrome, resource, and data schemes are accepted.</p> + +<p><strong>options : object</strong><br> + Options for the function, with the following properties:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>parent</td> + <td>nsIDOMWindow</td> + <td>Parent for the new window. Optional, defaults to null.</td> + </tr> + <tr> + <td>name</td> + <td>string</td> + <td>Name that is assigned to the window. Optional, defaults to null.</td> + </tr> + <tr> + <td>features</td> + <td>object</td> + <td> + <p>Map of features to set for the window, defined like this: { width: 10, height: 15, chrome: true }.</p> + + <p>See the window.open features documentation for more details.</p> + + <p>Optional, defaults to an empty map: {}.</p> + + <pre class="brush: js"> +var { open } = require('sdk/window/utils'); +var window = open('data:text/html,Hello Window', { + name: 'jetpack window', + features: { + width: 200, + height: 50, + popup: true + } +});</pre> + </td> + </tr> + <tr> + <td>args</td> + <td>object</td> + <td>Extra argument(s) to be attached to the new window as the window.arguments property.</td> + </tr> + </tbody> +</table> + +<h5 id="Returns_9"><br> + Returns</h5> + +<p><strong>nsIDOMWindow</strong></p> + +<h4 class="addon-sdk-api-name" id="openDialog(options)"><code>openDialog(options)</code></h4> + +<p>Opens a top level window and returns its nsIDOMWindow representation. This is the same as open, but you can supply more features. It wraps window.openDialog.</p> + +<h5 id="Parameters_9">Parameters</h5> + +<p><strong>options : object</strong><br> + Options for the function, with the following properties:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>url</td> + <td>string</td> + <td>URI of the document to be loaded into the window. Defaults to "chrome://browser/content/browser.xul".</td> + </tr> + <tr> + <td>name</td> + <td>string</td> + <td>Optional name that is assigned to the window. Defaults to "_blank".</td> + </tr> + <tr> + <td>features</td> + <td>string</td> + <td> + <p>Map of features to set for the window, defined like: { width: 10, height: 15, chrome: true }.</p> + + <p>For the set of features you can set, see the window.openDialog documentation.</p> + + <p>Optional, defaults to: 'chrome,all,dialog=no'.</p> + </td> + </tr> + <tr> + <td>args</td> + <td>object</td> + <td>Extra argument(s) to be attached to the new window as the window.arguments property.</td> + </tr> + </tbody> +</table> + +<h5 id="Returns_10">Returns</h5> + +<p><strong>nsIDOMWindow</strong></p> + +<h4 class="addon-sdk-api-name" id="windows()"><code>windows()</code></h4> + +<p>Returns an array of all currently opened windows. Note that these windows may still be loading.</p> + +<p>In order to see private windows in this list, your add-on must have <a href="/en-US/Add-ons/SDK/High-Level_APIs/private-browsing#Opting_into_private_browsing">opted into private browsing</a> and you must include the <code>includePrivate</code> key in the list of options:</p> + +<pre class="brush: js"> var allWindows = window_utils.windows(null, {includePrivate:true}); +</pre> + +<h5 id="Parameters_10">Parameters</h5> + +<p><strong>type : string</strong><br> + String identifying the type of window to return. This is passed directly into <a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWindowMediator#getEnumerator()"><code>nsIWindowMediator.getEnumerator()</code></a>, so its possible values are the same as those expected by that function. In particular:</p> + +<ul> + <li><code>null</code>: get all window types</li> + <li><code>navigator:browser</code>: get "normal" browser windows</li> + <li><code>devtools:scratchpad</code>: get <a href="/en-US/docs/Tools/Scratchpad">Scratchpad</a> windows</li> + <li><code>navigator:view-source</code>: get <a href="/en-US/docs/View_source">view source</a> windows</li> +</ul> + +<p>If you're not also passing options, you can omit this, and it's the same as passing <code>null</code>.</p> + +<p><strong>options : object</strong><br> + Options object containing the following property:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Name</th> + <th scope="col">Type</th> + <th scope="col"> </th> + </tr> + </thead> + <tbody> + <tr> + <td>includePrivate</td> + <td>boolean</td> + <td>Whether to include private windows. Defaults to false. The add-on must also have opted into private windows for this to have an effect.</td> + </tr> + </tbody> +</table> + +<h5 id="Returns_11">Returns</h5> + +<p><strong>Array</strong>: array of nsIDOMWindow instances.</p> + +<h4 class="addon-sdk-api-name" id="isDocumentLoaded(window)"><code>isDocumentLoaded(window)</code></h4> + +<p>Check if the given window's document is completely loaded. This means that its "load" event has been fired and all content is loaded, including the whole DOM document, images, and any other sub-resources.</p> + +<h5 id="Parameters_11">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_12">Returns</h5> + +<p><strong>boolean</strong>: true if the document is completely loaded.</p> + +<h4 class="addon-sdk-api-name" id="isBrowser(window)"><code>isBrowser(window)</code></h4> + +<p>Returns true if the given window is a Firefox browser window: that is, its document has a "windowtype" of "chrome://browser/content/browser.xul".</p> + +<h5 id="Parameters_12">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_13">Returns</h5> + +<p><strong>boolean</strong></p> + +<h4 class="addon-sdk-api-name" id="getWindowTitle(window)"><code>getWindowTitle(window)</code></h4> + +<p>Get the title of the document hosted by the given window</p> + +<h5 id="Parameters_13">Parameters</h5> + +<p><strong>window: nsIDOMWindow</strong></p> + +<h5 id="Returns_14">Returns</h5> + +<p><strong>string</strong>: this document's title.</p> + +<h4 class="addon-sdk-api-name" id="isXULBrowser(window)"><code>isXULBrowser(window)</code></h4> + +<p>Returns true if the given window is a XUL window.</p> + +<h5 id="Parameters_14">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_15">Returns</h5> + +<p><strong>boolean</strong></p> + +<h4 class="addon-sdk-api-name" id="getFocusedWindow()"><code>getFocusedWindow()</code></h4> + +<p>Gets the child window within the topmost browser window that is focused. See nsIFocusManager for more details.</p> + +<h5 id="Returns_16">Returns</h5> + +<p><strong>nsIDOMWindow</strong></p> + +<h4 class="addon-sdk-api-name" id="getFocusedElement()"><code>getFocusedElement()</code></h4> + +<p>Get the element that is currently focused. This will always be an element within the document loaded in the focused window, or null if no element in that document is focused.</p> + +<h5 id="Returns_17">Returns</h5> + +<p><strong>nsIDOMElement</strong></p> + +<h4 class="addon-sdk-api-name" id="getFrames(window)"><code>getFrames(window)</code></h4> + +<p>Get the frames contained by the given window.</p> + +<h5 id="Parameters_15">Parameters</h5> + +<p><strong>window : nsIDOMWindow</strong></p> + +<h5 id="Returns_18">Returns</h5> + +<p><strong>array</strong>: array of frames.<br> + </p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/abra_uma_página_web/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/abra_uma_página_web/index.html new file mode 100644 index 0000000000..defcedcee2 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/abra_uma_página_web/index.html @@ -0,0 +1,51 @@ +--- +title: Abra uma Página Web +slug: Mozilla/Add-ons/SDK/Tutorials/Abra_uma_Página_Web +tags: + - Add-on SDK + - Tab + - runScript + - tab.attach +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Open_a_Web_Page +--- +<div class="note">Para seguir este tutorial você precisará ter <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation">instalado o SDK</a> e ter conhecimento básico <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">sobre cfx</a>.</div> + +<p>Para abrir uma página web, você pode usar o módulo <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a>:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); +tabs.open("http://www.example.com"); +</pre> + +<p>Esta função é <span class="short_text" id="result_box" lang="pt"><span class="hps">assíncrona</span></span>, então você não recebe imediatamente um objeto <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#Tab"><code>tab</code></a> que você possa examinar. Faça isto, passe uma função de retorno para <code>open()</code>. A função de retorno é atribuída a propriedade <code>onReady</code>, e será passada a tab como argumento:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); +tabs.open({ + url: "http://www.example.com", + onReady: function onReady(tab) { + console.log(tab.title); + } +}); +</pre> + +<p>Mesmo assim, você não consegue acesso direto a qualquer conteúdo hospedado na tab.</p> + +<p>Para acessar conteúdo da tab você precisa anexar um script à tab usando o <code>tab.attach()</code>. Este add-on carrega uma página, então anexa um script à página que adiciona uma borda vermelha nela:</p> + +<pre class="brush: js">var tabs = require("sdk/tabs"); +tabs.open({ + url: "http://www.example.com", + onReady: runScript +}); + +function runScript(tab) { + tab.attach({ + contentScript: "document.body.style.border = '5px solid red';" + }); +} +</pre> + +<h2 id="Aprendendo_Mais">Aprendendo Mais</h2> + +<p>Para aprender mais sobre uso de tabs no SDK, veja a referência da API <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a>.</p> + +<p>Para aprender mais sobre execução de scripts em tabs, veja o tutorial sobre uso de <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab"><code>tab.attach()</code></a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/adding_a_button_to_the_toolbar/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/adding_a_button_to_the_toolbar/index.html new file mode 100644 index 0000000000..83b2f61907 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/adding_a_button_to_the_toolbar/index.html @@ -0,0 +1,83 @@ +--- +title: Adicionando um botão à barra de ferramentas +slug: Mozilla/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Adding_a_Button_to_the_Toolbar +--- +<div class="note"> +<p>Para seguir este tutorial você precisará ter <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation">instalado o SDK</a> e ter conhecimento <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">básico do cfx</a>.</p> + +<p>Este tutorial usa a API <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a>, que está disponível somente do Firefox 29 em diante.</p> +</div> + +<p>Para adicionar um botão à barra de ferramentas, use os módulos <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> ou <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">toggle button</a>.</p> + +<p>Crie um novo diretório, navegue até ele, e execute <code>cfx init</code>.</p> + +<p>Então salve estes três ícones no diretório "data":</p> + +<table class="standard-table"> + <tbody> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7635/icon-16.png" style="height: 16px; width: 16px;"></td> + <td>icon-16.png</td> + </tr> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7637/icon-32.png" style="height: 32px; width: 32px;"></td> + <td>icon-32.png</td> + </tr> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7639/icon-64.png" style="height: 64px; width: 64px;"></td> + <td>icon-64.png</td> + </tr> + </tbody> +</table> + +<p>Então abra o arquivo chamado "main.js" no diretório "lib" e adicione o seguinte código a ele:</p> + +<pre class="brush: js">var buttons = require('sdk/ui/button/action'); +var tabs = require("sdk/tabs"); + +var button = buttons.ActionButton({ + id: "mozilla-link", + label: "Visit Mozilla", + icon: { + "16": "./icon-16.png", + "32": "./icon-32.png", + "64": "./icon-64.png" + }, + onClick: handleClick +}); + +function handleClick(state) { + tabs.open("https://www.mozilla.org/"); +}</pre> + +<p>Agora execute o add-on com <code>cfx run</code>. O botão é adicionado à barra de ferramentas no topo da janela do navegador:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/7641/mozilla-button.png" style="display: block; height: 221px; margin-left: auto; margin-right: auto; width: 382px;">Você não pode configurar a localização inicial para o botão, mas o usuário pode mover ele usando as características de personalização do navegador. O <code>id</code> é obrigatório, e é usado para lembrar a posição do botão, então você não deve mudá-lo em versões subsequentes do add-on.</p> + +<p>Clicando no botão carrega <a href="https://www.mozilla.org/en-US/">https://www.mozilla.org/</a> em uma nova tab.</p> + +<h2 id="Especificando_o_ícone">Especificando o ícone</h2> + +<p>A propriedade ícone pode especificar um único ícone ou uma coleção de ícones em diferentes tamanhos, como o exemplo acima. Se você especificar uma coleção de ícones em diferentes tamanhos o navegador automaticamente escolherá o melhor para a resolução de tela em uso e coloca na interface de usuário do navegador que hospeda o botão. <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#ActionButton(options)">Leia mais sobre especificar múltiplos ícones</a>.</p> + +<p>O arquivo de ícone deve ser empacotado com seu add-on: ele não pode referenciar um arquivo remoto.</p> + +<p>Você pode mudar o ícone a qualquer hora configurando a propriedade <code>icon</code> do botão. Você pode mudar o ícone, e os outros atributos de estado, ou globalmente, para uma janela específica, ou para uma tab específica. <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Updating_state">Leia mais sobre atualização de estado.</a></p> + +<h2 id="Anexando_um_painel">Anexando um painel</h2> + +<p>Se você precisar anexar um panel a um botão, use a API <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">toggle button</a>. É como a API do action button exceto que ele adiciona uma propriedade boleana <code>checked </code>que é alternada sempre que o botão é checado. Para anexar o painel, passe o método <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel#show(options)"><code>show()</code></a> do painel. Para mais detalhes sobre isso, veja a <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle#Attaching_panels_to_buttons">documentação do toggle button</a>.</p> + +<h2 id="Mostrando_conteúdo_mais_rico">Mostrando conteúdo mais rico</h2> + +<p>Para criar conteúdo mais complexo para a interface do usuário do que é possível com apenas um botão, use a API <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_toolbar">toolbar</a>. Com a API toolbar você consegue uma faixa horizontal da interface do usuário. Você pode adicionar botões à barra de ferramentas e também <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_frame">frames</a>, que podem ter HTML, CSS, e JavaScript.</p> + +<h2 id="Aprendendo_mais">Aprendendo mais</h2> + +<ul> + <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">Referência action button</a></li> + <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">Referência </a><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">toggle button</a></li> + <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">Referência </a><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_toolbar">toolbar</a></li> +</ul> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/adicionar_uma_item_de_menu_ao_firefox/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/adicionar_uma_item_de_menu_ao_firefox/index.html new file mode 100644 index 0000000000..ebc4e41846 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/adicionar_uma_item_de_menu_ao_firefox/index.html @@ -0,0 +1,115 @@ +--- +title: Adicionar um item de menu ao Firefox +slug: Mozilla/Add-ons/SDK/Tutorials/Adicionar_uma_item_de_menu_ao_Firefox +tags: + - Add-on SDK + - Menu Item +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Add_a_Menu_Item_to_Firefox +--- +<div class="note"> +<p>Para seguir este tutorial você precisará ter <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Installation">instalado o SDK</a> e aprendido o <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Getting_Started_With_cfx">básico do cfx</a>.</p> +</div> + +<div class="note"> +<p>Se vocé estiver usando <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/jpm">jpm</a> ao invés de cfx, o método para usar módulos de terceiros é diferente, e você deve ler a <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Using_third-party_modules_%28jpm%29">versão jpm</a> ao invés deste guia.</p> +</div> + +<p>O SDK não tem ainda uma API para adicionar novos itens de menu ao Firefox. Mas é extensível por design, então qualquer um pode construir e publicar módulos para desenvolvedores de add-on usar. Felizmente, Erik Vold escreveu um módulo <a href="https://github.com/mykmelez/menuitems-jplib"><code>menuitems</code></a> que nos permite adicionar itens de menu.</p> + +<p>Este tutorial tem dupla função. Ele descreve o método geral para usar um externo, módulo de terceiro em seu add-on, e ele descreve como adicionar um item de menu usando o módulo <code>menuitems</code> em especial.</p> + +<p>Primeiro, crie um novo add-on. Crie um diretório chamado "clickme" onde você quiser, navegue para ele e execute <code>cfx init</code>.</p> + +<pre>mkdir clickme +cd clickme +cfx init +</pre> + +<p>A estrutura de diretório de costume será criada:</p> + +<ul> + <li>clickme + <ul> + <li>data</li> + <li>lib + <ul> + <li>main.js</li> + </ul> + </li> + <li>package.json</li> + <li>tests + <ul> + <li>test-main.js</li> + </ul> + </li> + </ul> + </li> +</ul> + +<div> </div> + +<h2 id="Inslatando_menuitems">Inslatando menuitems</h2> + +<p>Crie um diretório em "clickme" chamado "packages". Baixe o pacote <code>menuitems</code> de <a href="https://github.com/mykmelez/menuitems-jplib/zipball/4d6ae5b410d79cc16c9c76920fbaa8a367e44ca7">https://github.com/mykmelez/menuitems-jplib</a> e extrai ele dentro do diretório "packages" que você criou:</p> + +<pre>mkdir packages +cd packages +tar -xf ../erikvold-menuitems-jplib-d80630c.zip +</pre> + +<h2 id="Dependências_de_Módulo">Dependências de Módulo</h2> + +<p>Se os módulos de terceiros dependem de módulos SDK, você pode usá-los imediatamente, mas se eles dependem de módulos de terceiros, você terá de instalar essas dependências também.</p> + +<p>No diretório principal do pacote (menuitems) você encontrará um arquivo chamado "package.json". Abra ele e procure por uma entrada chamada "dependencies". A entrada para o pacote <code>menuitems</code> é:</p> + +<pre>"dependencies": ["api-utils", "vold-utils"] +</pre> + +<p>Isso nos diz que nós precisamos instalar o pacote <code>vold-utils</code>, que nós podemos fazer baixando ele de <a href="https://github.com/mykmelez/vold-utils-jplib/zipball/a321447dc5d613df33023165854957c181dc3174">https://github.com/mykmelez/vold-utils-jplib </a>e adicionando ele ao diretório packages com <code>menuitems</code>. Veja também <a href="/en-US/docs/Mozilla/QA/Mozmill_tests/Shared_Modules/UtilsAPI">api-utils Docs</a>(UtilsAPI).</p> + +<h2 id="Usando_menuitems">Usando <code>menuitems</code></h2> + +<p>A documentação para o módulo <a href="https://github.com/mykmelez/menuitems-jplib/blob/master/docs/menuitems.md"><code>menuitems</code></a> nos diz para criar um item de menu usando <code>MenuItem()</code>. Das opções aceitas pelo <code>MenuItem()</code>, nós usaremos este conjunto mínimo:</p> + +<ul> + <li><code>id</code>: identificado para este item de menu</li> + <li><code>label</code>: texto para mostrar no item</li> + <li><code>command</code>: função chamada quando o usuário seleciona o item</li> + <li><code>menuid</code>: identificador para o elemento pai do item</li> + <li><code>insertbefore</code>: identificador para o item anterior àquele que nós queremos que o item apareça</li> +</ul> + +<div> +<div> +<pre class="brush: js">var menuitem = require("menuitems").Menuitem({ + id: "clickme", + menuid: "menu_ToolsPopup", + label: "Click Me!", + onCommand: function() { + console.log("clicked"); + }, + insertbefore: "menu_pageInfo" +});</pre> + +<div> </div> +</div> +</div> + +<p>Próximo, nós temos que declarar nossa dependência do pacote <code>menuitems</code>. No <code>package.json</code> de nosso add-on adicionamos a linha:</p> + +<pre>"dependencies": "menuitems" +</pre> + +<p>Observe que devido ao <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=663480">bug 663480</a>, se você adicionar uma linha <code>dependencies </code>ao <code>package.json</code>, e você usar qualquer módulo do SDK, então você deve também declarar sua dependência naquele pacote embutido, como isto:</p> + +<pre>"dependencies": ["menuitems", "addon-sdk"] +</pre> + +<p>Agora terminamos. Execute o add-on e você verá o novo item aparecer no menu de Ferramentas: selecione ele e você verá a <code>info: clicked </code>aparecer no console.</p> + +<h2 id="Cuidados">Cuidados</h2> + +<p>Módulos de terceiros são uma ótima forma de usar características não suportadas diretamente pelo SDK, mas porque módulos de terceiros usam APIs de nível baixo, eles podem quebrar quando forem lançadas novas versões do Firefox.</p> + +<p> </p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/adicione_um_item_ao_menu_de_contexto/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/adicione_um_item_ao_menu_de_contexto/index.html new file mode 100644 index 0000000000..d864cd3029 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/adicione_um_item_ao_menu_de_contexto/index.html @@ -0,0 +1,120 @@ +--- +title: Adicione um Item ao Menu de Contexto +slug: Mozilla/Add-ons/SDK/Tutorials/Adicione_um_Item_ao_Menu_de_Contexto +tags: + - Add-on SDK + - Firefox + - Guide + - context-menu +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Add_a_Context_Menu_Item +--- +<div class="note"> +<p>Para seguir este tutorial você precisará ter <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Installation">instalado o SDK</a> e ter conhecimento <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Getting_Started_With_cfx">básico sobre cfx</a>.</p> +</div> + +<p>Para adicionar itens e submenus ao menu de contexto do Firetox, use o módulo <a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu"><code>context-menu</code></a>.</p> + +<p>Aqui está um add-on que adiciona um novo item ao menu de contexto. O item é mostrado sempre que alguma coisa na página é selecionada. Quando é clicado, a seleção é enviada para o código principal do add-on, que apenas registra ele:</p> + +<pre class="brush: js">var contextMenu = require("sdk/context-menu"); + var menuItem = contextMenu.Item({ + label: "Log Selection", + context: contextMenu.SelectionContext(), + contentScript: 'self.on("click", function () {' + + ' var text = window.getSelection().toString();' + + ' self.postMessage(text);' + + '});', + onMessage: function (selectionText) { + console.log(selectionText); + } +});</pre> + +<p>Teste: execute o add-on, carregue uma página web, selecione algum texto e clique com o botão direito. Você verá o novo item aparecer:</p> + +<p><img src="https://mdn.mozillademos.org/files/6513/context-menu-selection.png" style="display: block; margin-left: auto; margin-right: auto;"></p> + +<p>Clique nele, e a seleção é <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Logging">registrada no console</a> (ou na shell, se você estiver executando uma instância do Firefox na linha de comando):</p> + +<pre>info: elephantine lizard +</pre> + +<h2 id="Detalhes">Detalhes</h2> + +<p>Tudo que este add-on faz é criar um item no menu de contexto. Você não precisa adicioná-lo: uma vez que você criou o item, ele é automaticamente adicionado no contexto correto. O construtor nesse caso possui quatro opções: <code>label</code>, <code>context</code>, <code>contentScript</code>, e <code>onMessage</code>.</p> + +<h3 id="label">label</h3> + +<p>O <code>label</code> é tão somente a string que será mostrada.</p> + +<h3 id="context">context</h3> + +<p>O <code>context</code> descreve a circunstância em que o item será mostrado. O módulo <code>context-menu</code> oferece uma série de contextos embutidos, incluindo este <code>SelectionContext()</code>, que significa: mostrar o item quando alguma coisa na página for selecionada.</p> + +<p>Se estes simples contextos não forem suficiente, você pode definir contextos mais sofisticados usando scripts.</p> + +<h3 id="contentScript">contentScript</h3> + +<p>Este anexa um script ao item. Nesse caso o script espera pelo clique do usuário no item, então envia uma mensagem para o add-on contendo do texto selecionado.</p> + +<h3 id="onMessage">onMessage</h3> + +<p>A propriedade <code>onMessage</code> oferece um modo para o código do add-on responder mensagens do script anexado ao item do menu de contexto. Nesse caso é apenas registrado o texto selecionado.</p> + +<p>Então:</p> + +<ol> + <li>O usuário clica no item</li> + <li>o conteúdo do script do evento <code>click</code> dispara, e o conteúdo do script recupera o texto selecionado e envia a mensagem para o add-on</li> + <li>o evento <code>message</code> do add-on dispara, e ao código manipulador da função é passado o texto selecionado, que é registrado</li> +</ol> + +<h2 id="Mais_opções">Mais opções</h2> + +<h3 id="Adicionando_uma_imagem">Adicionando uma imagem</h3> + +<p>Você pode adicionar uma imagem ao menu de contexto por meio da opção <code>image</code>. Isto é uma URL apontando para um ícone 16x16 que é mostrado do lado esquerdo do item do menu de contexto. Geralmente você armazenaria sua imagem no diretório "data" do seu add-on, e construiria a URL usando <code>self.data.url()</code>:</p> + +<pre class="brush: js">var self = require("sdk/self"); + +var contextMenu = require("sdk/context-menu"); +var menuItem = contextMenu.Item({ + label: "Log Selection", + context: contextMenu.SelectionContext(), + contentScript: 'self.on("click", function () {' + + ' var text = window.getSelection().toString();' + + ' self.postMessage(text);' + + '});', + image: self.data.url("icon-16.png"), + onMessage: function (selectionText) { + console.log(selectionText); + } +});</pre> + +<h3 id="Adicione_uma_tecla_de_atalho">Adicione uma tecla de atalho</h3> + +<div class="geckoVersionNote"> +<p>Novo no Firefox 35.</p> +</div> + +<p>A partir do Firefox 35 você pode especificar uma tecla de atalho usando a opção <code>accessKey</code>. Deve ser somente um caracter. Pressione a tecla selecionada na opção quando o menu de contexto estiver aberto:</p> + +<pre class="brush: js">var contextMenu = require("sdk/context-menu"); +var menuItem = contextMenu.Item({ + label: "Log Selection", + context: contextMenu.SelectionContext(), + contentScript: 'self.on("click", function () {' + + ' var text = window.getSelection().toString();' + + ' self.postMessage(text);' + + '});', + accessKey: "l", + onMessage: function (selectionText) { + console.log(selectionText); + } +}); +</pre> + +<p> </p> + +<h2 id="Aprendendo_mais">Aprendendo mais</h2> + +<p>Aprendendo mais sobre o módulo <code>context-menu</code>, veja a referência da API <a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu"><code>context-menu</code></a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/captura_de_carregamento_da_pagina/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/captura_de_carregamento_da_pagina/index.html new file mode 100644 index 0000000000..1fa1ae81d6 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/captura_de_carregamento_da_pagina/index.html @@ -0,0 +1,28 @@ +--- +title: Captura de carregamento da página +slug: Mozilla/Add-ons/SDK/Tutorials/captura_de_carregamento_da_pagina +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Listen_for_Page_Load +--- +<div class="note"> + Para seguir esse tutorial você necessita ter <a href="/en-US/Add-ons/SDK/Tutorials/Installation">instalado o SDK</a> e aprendido <a href="/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">o básico do <code>cfx</code></a>.</div> +<p>Você pode capturar notificações sobre novas páginas em carregamento usando o módulo <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a>. <span id="result_box" lang="pt"><span class="hps">O</span> <span class="hps">seguinte complemento</span> captura o evento ready <span class="hps">da</span> aba <span class="hps">e</span> mostra no console <span class="hps">a</span> <span class="hps">URL</span> <span class="hps">da</span><span class="hps"> mesma, carregada pelo usuário</span><span>:</span></span></p> +<pre class="brush: js">require("sdk/tabs").on("ready", logURL); + +function logURL(tab) { + console.log(tab.url); +} +</pre> +<p><span id="result_box" lang="pt"><span class="hps">Você não</span> <span class="hps">tem acesso direto</span> <span class="hps">a qualquer</span> <span class="hps">conteúdo hospedado</span> <span class="hps">na guia</span><span>.</span></span></p> +<p><span id="result_box" lang="pt"><span class="hps">Para acessar o conteúdo</span> <span class="hps">da aba </span><span class="hps">você precisa anexar</span> <span class="hps">um script</span> <span class="hps">usando</span> <code>tab.attach()</code><span class="hps">.</span> <span class="hps">Este</span> <span class="hps">add</span><span>-on</span> <span class="hps">atribui</span> <span class="hps">um script para</span> <span class="hps">todas as</span> <span class="hps">abas abertas</span><span>.</span> <span class="hps">O</span> <span class="hps">script adiciona</span> <span class="hps">uma borda vermelha</span> <span class="hps">ao</span> <span class="hps">documento</span> <span class="hps">da aba</span><span>:</span></span></p> +<pre class="brush: js">require("sdk/tabs").on("ready", runScript); + +function runScript(tab) { + tab.attach({ + contentScript: "if (document.body) document.body.style.border = '5px solid red';" + }); +} +</pre> +<p><span id="result_box" lang="pt"><span class="hps">(Este exemplo é</span> <span class="hps">apenas para mostrar</span> <span class="hps">a idéia</span><span>:</span> <span class="hps">para implementar</span> <span class="hps">algo como isso,</span> <span class="hps">você deve usar</span> <a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod"><code>page-mod</code></a><span>,</span> <span class="hps">e especificar</span> <span class="hps">"*" como</span> <span class="hps">o match-pattern</span><span class="hps">.</span></span>)</p> +<h2 id="Aprendendo_Mais">Aprendendo Mais</h2> +<p>Para aprender mais sobre o trabalho com abas no SDK, veja a <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs">referência de tab da API</a>. <span id="result_box" lang="pt"><span class="hps">Você</span> <span class="hps">pode capturar </span><span class="hps">uma série de</span> <span class="hps">outros eventos</span> <span class="hps">da aba</span><span>, incluindo</span> <code>open</code><span class="hps">, <code>close </code></span><span class="hps">e <code>activate</code>.</span></span></p> +<p>Para ler mais sobre rodar scripts nas abas, veja o <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">tutorial sobre como usar <code>tab.attach()</code></a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/chrome_authority/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/chrome_authority/index.html new file mode 100644 index 0000000000..0e09ecdc02 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/chrome_authority/index.html @@ -0,0 +1,65 @@ +--- +title: Autoridade Chrome +slug: Mozilla/Add-ons/SDK/Tutorials/Chrome_Authority +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Chrome_Authority +--- +<div class="warning"> +<p>A API usada para ganhar acesso ao Chrome atualmente é uma característica experimental do SDK, e deve mudar em lançamentos futuros.</p> +</div> + +<h2 id="Usando_Autoridade_Chrome">Usando Autoridade Chrome</h2> + +<p>Os módulos de baixo-nível mais poderosos são executados com "chrome privileges", que nos dão acesso ao infame <a href="/en-US/docs/Components_object"><code>Objeto Components</code></a>, que concede acesso irrestrito ao host. A partir daí, <span id="result_box" lang="pt"><span class="hps">o módulo</span> <span class="hps">pode fazer praticamente</span> <span class="hps">qualquer coisa que o</span> <span class="hps">navegador</span> <span class="hps">é capaz.</span> <span class="hps">Para obter estes</span> <span class="hps">privilégios</span><span>, o módulo</span> <span class="hps">deve declarar</span> <span class="hps">sua intenção</span> <span class="hps">com</span> <span class="hps">uma declaração como</span> <span class="hps">a seguinte</span></span>:</p> + +<pre class="brush: js">var {Cc, Ci} = require("chrome");</pre> + +<p>O objeto retornado pelo <code>require("chrome")</code>, quando desempacotado com a característica <a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#Destructuring_assignment_(Merge_into_own_page.2Fsection)">destructuring assignment</a> disponível no ambiente JS do Mozilla, fornecerá os redutores comuns dos <code>Components.*</code>:</p> + +<p><code><strong>Cc</strong></code></p> + +<p>Um redutor para <code>Components.classes</code>.</p> + +<p><code><strong>Ci</strong></code></p> + +<p>Um redutor para <code>Components.interfaces</code>.</p> + +<p><code><strong>Cu</strong></code></p> + +<p>Um redutor para <code>Components.utils</code>.</p> + +<p><code><strong>Cr</strong></code></p> + +<p>Um redutor para <code>Components.results</code>.</p> + +<p><code><strong>Cm</strong></code></p> + +<p>Um redutor para <code>Components.manager</code>.</p> + +<p><code><strong>components</strong></code></p> + +<p>Uma outra forma de chamar <code>Components</code> por si mesmo (note as letras minúsculas). A partir daí você pode acessar propriedade de uso menos frequente como <code>Components.stack</code> e <code>Components.isSuccessCode</code>.</p> + +<p>Nota: a declaração <code>require("chrome")</code> é o <strong>único</strong> modo para acessar as funcionalidades do chrome e da API <code>Components</code>. O objeto <code>Components</code> <strong>não</strong> deve ser acessado de módulos. A ferramenta SDK emitira um aviso se ela vir código em móduo que referencie o <code>Components</code> diretamente.</p> + +<p>Seu módulo deve evitar usar privilégios do chrome a menos que seja absolutamente necessário. Uso da Autoridade do Chrome deve receber revisão extra de segurança, e a maioria dos bugs nestes módulos são críticos a segurança.</p> + +<h2 id="Geração_do_Manifesto">Geração do Manifesto</h2> + +<p>O <strong>manifesto</strong> é uma lista, incluída no XPI gerado, que especifica quais módulos requisitação accesso <code>require()</code> para quais outros módulos. Ele também grava quais módulos requisitam acesso chrome. Esta lista é gerada pelo mapeamento de todos os módulos incluído pela declaração <code>require(XYZ)</code> e grava a string "XYZ" que eles referênciam.</p> + +<p>Quando a implementação do manifesto estiver completa o carregador do programa vai impedir os módulos de usar <code>require() </code>para solicitar módulos que não estão listados no manifesto. Também, evitará que os módulos consiga autoridade chrome a menos que o manifesto indique que eles pediram para ele.<span id="result_box" lang="pt"><span class="hps"> Isto irá assegurar que</span> <span class="hps">os revisores enxerguem</span> <span class="hps">as mesmas restrições</span> <span class="hps">de autoridade</span> <span class="hps">que são aplicadas</span> <span class="hps">sobre o</span> <span class="hps">código em execução, aumentando efetivamente o tempo gasto revendo o add-on. (até que</span> <span class="hps">este trabalho</span> <span class="hps">seja concluído,</span> <span class="hps">os módulos</span> <span class="hps">podem ser capazes de</span> <span class="hps">burlar</span> <span class="hps">essas restrições).</span></span></p> + +<p>O manifesto é construído com um mapeador baseado em expressão regular, não um análisador Javascript. Os desenvolvedores devem manter as declarações <code>require</code> simples, com uma única string estática, uma por linha de código. Se o mapeador falhar para enxergar a entrada <code>require</code>, o manifesto não incluirá aquela entrada, e (uma vez que a implementação esteja completa) o código em execução lança uma exceção.</p> + +<p>Por exemplo, nenhum dos códigos a seguir serão encontrados pelo mapeamento do manifesto, levando a uma exceção em tempo de execução, quando a chamada <code>require()</code> é proibida de importar os módulos chamados:</p> + +<pre class="brush: js">// todos estes falharão +var xhr = require("x"+"hr"); +var modname = "xpcom"; +var xpcom = require(modname); +var one = require("one"); var two = require("two"); +</pre> + +<p>A intenção é que os desenvolvedores usem a declaração <code>require() </code>para dois propósitos: declarar (ao revisores de segurança) qual a classificação dos poderes que os modulos querem usar, e controlar como estes poderes serão mapeados dentro do namespace do módulo local. Suas declarações devem então ser claras e fáceis de analisar. Um formato de manifesto futuro deve mover a porção de declaração para um arquivo separado, para permitir expressões mais granuladas de autorização.</p> + +<p>Comandos que constroem um manifesto, como "<code>jpm xpi</code>" ou "<code>jpm run</code>", mapearão todos os módulos incluídos pelo uso dos atalhos <code>Cc</code>/<code>Ci</code> (ou a forma expandida <code>Components.classes</code>). Emitirá um aviso se ele visualizar a forma expandida ou ver o uso e.g. "<code>Cc</code>" sem a entrada correspondente na declaração <code>require("chrome")</code>. Estes avisos servem para guiar os desenvolvedores para o usar o padrão correto. Todos os desenvolvedores de módulos devem reparar os avisos e corrigir seus códigos até que os avisos tenham desaparecido.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/começando/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/começando/index.html new file mode 100644 index 0000000000..1294a58ffd --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/começando/index.html @@ -0,0 +1,206 @@ +--- +title: Começando +slug: Mozilla/Add-ons/SDK/Tutorials/Começando +tags: + - Add-on SDK + - Tutorial +translation_of: Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29 +--- +<p>Este tutorial percorre a criação de um add-on simples usando o SDK.</p> + +<h2 id="Pré-requisitos">Pré-requisitos</h2> + +<p>Para criar add-ons para Firefox usando SDK, você primeiro precisará seguir as instruções para <a href="/en-US/Add-ons/SDK/Tutorials/Installation">instalar e ativar o SDK</a>. Uma vez que você fez isso, você estará olhando para um prompt de comando.</p> + +<h2 id="Inicializando_um_add-on_vazio">Inicializando um add-on vazio</h2> + +<p>No prompt de comando, crie um novo diretório. O diretório não precisa estar no diretório principal do SDK: você pode criar ele em qualquer lugar que você quiser. Navegue para ele, digite cfx init, e tecle enter:</p> + +<pre>mkdir my-addon +cd my-addon +cfx init +</pre> + +<p>Você verá uma saída como esta:</p> + +<pre>* lib directory created +* data directory created +* test directory created +* doc directory created +* README.md written +* package.json written +* test/test-main.js written +* lib/main.js written +* doc/main.md written +Your sample add-on is now ready for testing: +try "cfx test" and then "cfx run". Have fun!" +</pre> + +<h2 id="Implementando_o_add-on">Implementando o add-on</h2> + +<p>Agora você pode escrever o código do add-on, que vai no arquivo "main.js" em diretório "lib". Esse arquivo foi criado para você no passo anterior. Abra ele e adicione o seguinte código:</p> + +<pre class="brush: js">var buttons = require('sdk/ui/button/action'); +var tabs = require("sdk/tabs"); + +var button = buttons.ActionButton({ + id: "mozilla-link", + label: "Visite Mozilla", + icon: { + "16": "./icon-16.png", + "32": "./icon-32.png", + "64": "./icon-64.png" + }, + onClick: handleClick +}); + +function handleClick(state) { + tabs.open("https://www.mozilla.org/"); +} +</pre> + +<p>Salve o arquivo.</p> + +<p>Próximo, salve estes ícones no diretório "data" de seu add-on:</p> + +<table class="standard-table"> + <tbody> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7635/icon-16.png" style="height: 16px; width: 16px;"></td> + <td>icon-16.png</td> + </tr> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7637/icon-32.png" style="height: 32px; width: 32px;"></td> + <td>icon-32.png</td> + </tr> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7639/icon-64.png" style="height: 64px; width: 64px;"></td> + <td>icon-64.png</td> + </tr> + </tbody> +</table> + +<p>Volte ao prompt de comando, digite:</p> + +<pre>cfx run +</pre> + +<p>Este é o comando SDK para executar uma nova instância do Firefox com seu add-on instalado. Quando o Firefox inicia, no canto de cima do lado direito do navegador você verá um ícone com o logotipo do Firefox. Clique nele, e uma nova tab abrirá com o site <a href="https://www.mozilla.org/">https://www.mozilla.org/</a> carregado nela.</p> + +<p>Isso é tudo que esse add-on faz. Ele usa dois módulos SDK: o módulo <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a>, que permite a você adicionar botões ao navegador, e o módulo <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/tabs">tabs</a>, que permite a você realizar operações básicas com <em>tabs</em>. Nesse caso, nós criamos uma botão cujo ícone é o íncone do Firefox, e adicionamos um manipulador de clique que carrega a home page da Mozilla na nova tab.</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/7643/mozilla-button.png" style="display: block; height: 221px; margin-left: auto; margin-right: auto; width: 382px;">Tente editar esse arquivo. Por exemplo, nós poderíamos mudar a página que é carregada:</p> + +<pre class="brush: js">var buttons = require('sdk/ui/button/action'); +var tabs = require("sdk/tabs"); + +var button = buttons.ActionButton({ + id: "mozilla-link", + label: "Visit Mozilla", + icon: { + "16": "./icon-16.png", + "32": "./icon-32.png", + "64": "./icon-64.png" + }, + onClick: handleClick +}); + +function handleClick(state) { + tabs.open("https://developer.mozilla.org/"); +}</pre> + +<p>No promp de comando, execute novamente cfx run. Desta vez clicando levará você para <a href="https://developer.mozilla.org/">https://developer.mozilla.org/</a>.</p> + +<h2 id="Empacotando_o_add-on">Empacotando o add-on</h2> + +<p>Quando você termina o add-on e está preparado para distribui-lo, você precisa empacotá-lo como um arquivo XPI. Esse é um formato de arquivo instalável para add-ons de Firefox. Você pode distribuir arquivos XPI ou publicá-los em <a href="https://addons.mozilla.org" rel="noreferrer">https://addons.mozilla.org</a> assim outros usuários podem baixar e instalá-los.</p> + +<p>Para construir um XPI, apenas execute o comando cfx xpi do diretório do add-on:</p> + +<pre>cfx xpi +</pre> + +<p>Você deve ver uma mensagem como:</p> + +<pre>Exporting extension to my-addon.xpi. +</pre> + +<p>Para testar que funcionou, tente instalar o arquivo XPI em sua própria instalação do Firefox. Você pode fazer isso pressionando Ctrl+O (Cmd+O no Mac) de dentro do Firefox, ou selecionando o item "Abrir arquivo" do menu "Arquivo" do Firefox. Isso trará uma caixa de seleção; navegue até o arquivo "my-addon.xpi", abra-o e siga o prompt para instalar o add-on.</p> + +<h2 id="Resumo">Resumo</h2> + +<p>Neste tutorial nós construímos e empacotamos um add-on usando três comandos:</p> + +<ul> + <li><code>cfx init</code> para inicializar um modelo vazio do add-on</li> + <li><code>cfx run</code> para executar uma nova instância do Firefox com o add-on instalado, não nós testamos ele</li> + <li><code>cfx xpi</code> para empacotar o add-on dentro do arquivo XPI para distribuição</li> +</ul> + +<p>Esses são os três principais comandos que você usará quando desenvolver add-ons no SDK. Há uma abrangente <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/cfx">documentação de referência</a> cobrindo todos os comandos que você pode usar e todas as opções que eles possuem.</p> + +<p>O próprio código do add-on usa dois módulos do SDK, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> e <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a>. Há documentação de referência para toda a API do SDK, de <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs">alto</a> e <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs">baixo nível</a>.</p> + +<h2 id="O_que_vem_a_seguir">O que vem a seguir?</h2> + +<p>Para sentir algumas das coisas que você pode fazer com a API do SDK, tente trabalhar através de alguns dos <a href="/en-US/Add-ons/SDK/Tutorials" rel="noreferrer">tutorials</a>.</p> + +<h2 id="Técnicas_avançadas">Técnicas avançadas</h2> + +<h3 id="Sobreescrevendo_os_módulos_embutidos">Sobreescrevendo os módulos embutidos</h3> + +<p>Os módulos do SDK que você usa para implementar seu add-on estão embutidas no Firefox. Quando você executa ou empacota um add-on usando <code>cfx run</code> ou <code>cfx xpi</code>, o add-on usará as versões dos módulos na versão do Firefox que hospeda elas.</p> + +<p>Como um desenvolvedor de add-on, isso é normalmente o que você quer. Mas se você está desenvolvendo os módulos SDK por si mesmo, claro, não será. Nesse caso assumimos que você pegou o SDK de seu <a href="https://github.com/mozilla/addon-sdk">repositório GitHub</a> e executará o script <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation">bin/activate</a> desse diretório raiz de trabalho.</p> + +<p>Então quando você invoca <code>cfx run</code> ou <code>cfx xpi</code>, você passa a opçao "-o":</p> + +<pre>cfx run -o +</pre> + +<p>Isso instrui o cfx a usar a cópia local dos módulos do SDK, não aqueles existentes no Firefox.</p> + +<h3 id="Desenvolvendo_sem_cfx_run">Desenvolvendo sem cfx run</h3> + +<p>Porque <code>cfx run</code> reinicia o navegador cada vez que você invoca ele, ele pode ser um pouco pesado se você está fazendo mudanças frequentes em um add-on. Um modelo de desenvolvimento alternativo é usar o add-on <a href="https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/">Extension Auto-Installer</a>: este escuta para novos arquivos XPI em uma porta específica e instala-os automaticamente. Dessa maneira você pode testar novas mudanças sem precisar reiniciar o navegador:</p> + +<ul> + <li>faça uma mudança em seu add-on</li> + <li>execute cfx xpi</li> + <li>posta o add-on para uma porta especificada</li> +</ul> + +<p>Você poderia até mesmo automatizar esse fluxo com um script simples. Por exemplo:</p> + +<pre>while true ; do cfx xpi ; wget --post-file=codesy.xpi http://localhost:8888/ ; sleep 5 ; done +</pre> + +<p>Note que o nível de registro definido para o console é diferente quando você usa esse método, comparado com o nível de registro usado quando um add-on está executando usando <code>cfx run</code>. Isso significa que se você quiser ver a saída de mensagens do <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Logging">console.log()</a>, você terá que ajustar uma configuração. Veja a documentação no <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/console#Logging_Levels">nível de registros</a> para mais detalhes sobre isso.</p> + +<p>Um outro exemplo usando <a href="http://gruntjs.com/">grunt</a> e <a href="https://www.npmjs.com/package/grunt-shell">grunt-shell</a>:</p> + +<pre class="brush: js">module.exports = function(grunt) { + 'use strict'; + require('matchdep').filterDev('grunt-!(cli)').forEach(grunt.loadNpmTasks); + grunt.initConfig({ + shell: { + xpi: { + command: [ + 'cd pluginpath', + 'cfx xpi', + 'wget --post-file=pluginname.xpi http://localhost:8888/ || echo>/dev/null' + ].join('&&') + } + }, + watch: { + xpi: { + files: ['pluginpath/**'], + tasks: ['shell:xpi'] + } + } + }); + + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-shell'); + grunt.registerTask('default', ['watch']); +};</pre> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/creating_event_targets/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/creating_event_targets/index.html new file mode 100644 index 0000000000..d8fd6a7318 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/creating_event_targets/index.html @@ -0,0 +1,245 @@ +--- +title: Criando Alvos de Eventos +slug: Mozilla/Add-ons/SDK/Tutorials/Creating_event_targets +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Creating_event_targets +--- +<p><span>Este tutorial descreve o uso de APIS de baixo nível. Estas APIs estão ainda em desenvolvimento, e nós esperamos fazer mudanças incompatíveis nela em lançamentos futuros.</span></p> + +<p>O <a href="/en-US/Add-ons/SDK/Guides/Working_with_Events">guia de programação de eventos dirigidos com SDK</a> descreve como consumir eventos: isto é, como escutar eventos gerados pelo alvos de evento. Por exemplo, você pode escutar ao evento <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#ready"><code>evento ready</code> do módulo tab</a> ou <a href="/en-US/Add-ons/SDK/High-Level_APIs/panel#show">o event<code> show do objeto Panel</code></a>.</p> + +<p>Com o SDK, também é simples implementar seus próprios alvos de eventos. Isto é especialmente útil se você quiser <a href="/en-US/Add-ons/SDK/Creating_Reusable_Modules">construir seus próprios módulos</a>, ou organizar seu add-on melhor ou permitir a outros desenvolvedores reusar seu código. Se você usa o framework de eventos do SDK para seus alvos de eventos, os usuários de seus módulos podem escutar pelos eventos usando a API de evento padrão do SDK.</p> + +<p>Neste tutorial nów criaremos parte de um módulo para acessar a <a href="https://developer.mozilla.org/en/Places">API Local</a> do navegador. Ele emitirá eventos quando o usuário adicionar e visitar um favorito, permitindo aos usuários escutar estes eventos usando a API de evento padrão do SDK.</p> + +<h2 id="Usando_a_API_Local">Usando a API Local</h2> + +<p>Primeiro, vamos escrever algun código usando a API Local que registra as URIs do favorito que o usuário adicinou.</p> + +<p>Crie uma novo diretório chamado "bookmarks", navegue até ele, e execute<code><a href="/en-US/Add-ons/SDK/Tools/jpm"> jpm init</a></code>, aceitando todos os padrões. Então abra o "index.js" e adicione o seguinte código:</p> + +<pre class="brush: js">var {Cc, Ci, Cu} = require("chrome"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm", this); +var bookmarkService = Cc["@mozilla.org/browser/nav-bookmarks-service;1"] + .getService(Ci.nsINavBookmarksService); + +var bookmarkObserver = { + onItemAdded: function(aItemId, aFolder, aIndex) { + console.log("added ", bookmarkService.getBookmarkURI(aItemId).spec); + }, + onItemVisited: function(aItemId, aVisitID, time) { + console.log("visited ", bookmarkService.getBookmarkURI(aItemId).spec); + }, + QueryInterface: XPCOMUtils.generateQI([Ci.nsINavBookmarkObserver]) +}; + +exports.main = function() { + bookmarkService.addObserver(bookmarkObserver, false); +}; + +exports.onUnload = function() { + bookmarkService.removeObserver(bookmarkObserver); +} +</pre> + +<p>Tente executar este add-on, adicionando e visitando favoritos, e observando a saída no console.</p> + +<h2 id="Módulos_como_Alvos_de_Evento">Módulos como Alvos de Evento</h2> + +<p>Nós podemos adaptar esse código em módulos separados que expõe a interface de evento padrão do SDK.</p> + +<p>Para fazer isso nós usaremos o módulo <a href="/en-US/Add-ons/SDK/Low-Level_APIs/event_core"><code>event/core</code></a>.</p> + +<p>Crie um novo arquivo no "lib" chamado "bookmarks.js", e adicione o seguinte código:</p> + +<pre class="brush: js">var { emit, on, once, off } = require("sdk/event/core"); + +var {Cc, Ci, Cu} = require("chrome"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm", this); +var bookmarkService = Cc["@mozilla.org/browser/nav-bookmarks-service;1"] + .getService(Ci.nsINavBookmarksService); + +var bookmarkObserver = { + onItemAdded: function(aItemId, aFolder, aIndex) { + emit(exports, "added", bookmarkService.getBookmarkURI(aItemId).spec); + }, + onItemVisited: function(aItemId, aVisitID, time) { + emit(exports, "visited", bookmarkService.getBookmarkURI(aItemId).spec); + }, + QueryInterface: XPCOMUtils.generateQI([Ci.nsINavBookmarkObserver]) +}; + +bookmarkService.addObserver(bookmarkObserver, false); + +exports.on = on.bind(null, exports); +exports.once = once.bind(null, exports); +exports.removeListener = function removeListener(type, listener) { + off(exports, type, listener); +}; +</pre> + +<p>Este código implementa um módulo que pode emitir eventos <code>added</code> e <code>visited</code>. Ele duplica o código anterior, mas com um pouco de mudanças:</p> + +<ul> + <li>importe <code>emit()</code>, <code>on()</code>, <code>once()</code>, e <code>off()</code> do <code>event/core</code></li> + <li>substitua as funções de escuta com chamadas para <code>emit()</code>, passando o tipo de evento apropriado</li> + <li>exporte sua própria API de evento. Este consiste de três funções: + <ul> + <li><code>on()</code>: inicia a escuta pelo evento ou um dado tipo</li> + <li><code>once()</code>: escuta pela ocorrência de um dado evento, e então para</li> + <li><code>removeListener()</code>: para a escuta por eventos de um dado tipo</li> + </ul> + </li> +</ul> + +<p>O <code>on()</code> e <code>once()</code> exporta delegação a uma função correspondente do <code>event/core</code>, e usa <code>bind()</code> para passar o objeto <code>exports</code> por si só como o argumento <code>target(alvo)</code> à função subjacente. A função <code>removeListener()</code> é implementada pela chamada da função subjacente <code>off()</code>.</p> + +<p>Nós podemos usar este módulo do mesmo modo que nós usamos qualquer outro módulo que emite eventos a nível de módulo, tais como <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a>. Por exemplo, nós podemos adaptar o "index.js" como segue:</p> + +<pre class="brush: js">var bookmarks = require("./bookmarks"); + +function logAdded(uri) { + console.log("added: " + uri); +} + +function logVisited(uri) { + console.log("visited: " + uri); +} + +exports.main = function() { + bookmarks.on("added", logAdded); + bookmarks.on("visited", logVisited); +}; + +exports.onUnload = function() { + bookmarks.removeListener("added", logAdded); + bookmarks.removeListener("visited", logVisited); +} +</pre> + +<h2 id="Classes_como_Alvos_de_Eventos">Classes como Alvos de Eventos</h2> + +<p>Às vezes nós queremos emitir eventos à nível de objetos individuais, em vez de à nível de módulo.</p> + +<p>Para fazer isto, nós podemos herdar da classe <a href="/en-US/Add-ons/SDK/Low-Level_APIs/event_target"><code>EventTarget</code></a> do SDK. <code>EventTarget</code> fornece uma implementação das funções necessárias a adicionar e remover escutas: <code>on()</code>, <code>once()</code>, e <code>removeListener()</code>.</p> + +<p>Neste exemplo, nós poderíamos definir uma classe <code>BookmarkManager</code> que herda do <code>EventTarget</code> e emite eventos <code>added</code> e <code>visited</code>.</p> + +<p>Abra o "bookmarks.js" e substitua seu conteúdo com este código:</p> + +<pre class="brush: js">var { emit } = require("sdk/event/core"); +var { EventTarget } = require("sdk/event/target"); +var { Class } = require("sdk/core/heritage"); +var { merge } = require("sdk/util/object"); + +var {Cc, Ci, Cu} = require("chrome"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm", this); +var bookmarkService = Cc["@mozilla.org/browser/nav-bookmarks-service;1"] + .getService(Ci.nsINavBookmarksService); + +function createObserver(target) { + var bookmarkObserver = { + onItemAdded: function(aItemId, aFolder, aIndex) { + emit(target, "added", bookmarkService.getBookmarkURI(aItemId).spec); + }, + onItemVisited: function(aItemId, aVisitID, time) { + emit(target, "visited", bookmarkService.getBookmarkURI(aItemId).spec); + }, + QueryInterface: XPCOMUtils.generateQI([Ci.nsINavBookmarkObserver]) + }; + bookmarkService.addObserver(bookmarkObserver, false); +} + +var BookmarkManager = Class({ + extends: EventTarget, + initialize: function initialize(options) { + EventTarget.prototype.initialize.call(this, options); + merge(this, options); + createObserver(this); + } +}); + +exports.BookmarkManager = BookmarkManager; +</pre> + +<p>O código para interagir com a API Local é o mesmo que aqui. Porém:</p> + +<ul> + <li>nós estamos agora importando de quatro módulos: + <ul> + <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/event_core"><code>event/core</code></a> nos dá <code>emit()</code>: note que nós não precisamos <code>on</code>, <code>once</code>, ou <code>off</code>, desde que nós usaremos <code>EventTarget</code> para adicionar e remover escutas</li> + <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/event_target"><code>event/target</code></a> nos dá <code>EventTarget</code>, que implementa a interface para adicionar e remover escutas</li> + <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/core_heritage"><code>core/heritage</code></a> nos dá <code>Class()</code>, que nós podemos usar para herdar do <code>EventTarget</code></li> + <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/util_object"><code>util/object</code></a> nos dá <code>merge()</code>, que apenas simplifica a configuração das propriedades do <code>BookmarkManager</code></li> + </ul> + </li> + <li>nós usamos classe para herdar do<code> EventTarget</code>. Em sua função <code>initialize()</code>, nós: + <ul> + <li><span class="short_text" id="result_box" lang="pt"><span class="hps">chamar o</span> <span class="hps">inicializador de</span> <span class="hps">classe base</span></span></li> + <li>use <code>merge()</code> para copiar qualquer opção fornecida dentro do novíssimo objeto criado</li> + <li>chama <code>createObserver()</code>, passando o novíssimo objeto criado como o alvo do evento</li> + </ul> + </li> + <li><code>createObserver()</code> é o mesmo do exemplo anterior, exceto que no <code>emit()</code> nós passamos o <code>BookmarkManager</code> criado como o alvo do evento</li> +</ul> + +<p>Para usar este alvo de evento nós podemos criar ele e chamar a funções <code>on()</code>, <code>once()</code>, e <code>removeListener()</code> que ele herdou:</p> + +<pre class="brush: js">var bookmarks = require("./bookmarks"); +var bookmarkManager = bookmarks.BookmarkManager({}); + +function logAdded(uri) { + console.log("added: " + uri); +} + +function logVisited(uri) { + console.log("visited: " + uri); +} + +exports.main = function() { + bookmarkManager.on("added", logAdded); + bookmarkManager.on("visited", logVisited); +}; + +exports.onUnload = function() { + bookmarkManager.removeListener("added", logAdded); + bookmarkManager.removeListener("visited", logVisited); +} +</pre> + +<h3 id="Implementando_uma_opção_onEvent">Implementando uma opção "onEvent"</h3> + +<p>Finalmente, a maioria dos alvos de eventos aceitam opções na forma "onEvent", onde "Event" é o nome do evento com a primeira letra em maiúsculo. Por exemplo, você pode escutar o <a href="/en-US/Add-ons/SDK/High-Level_APIs/panel#show"><code>evento show do objeto Panel</code></a> ou chamando:</p> + +<pre class="brush: js">myPanel.on("show", listenerFunction); +</pre> + +<p>ou passando a opção <code>onShow</code> para o construtor do Painel:</p> + +<pre class="brush: js">var myPanel = require("sdk/panel").Panel({ + onShow: listenerFunction, + contentURL: "https://en.wikipedia.org/w/index.php" +}); +</pre> + +<p>Se sua classe herda do <code>EventTarget</code>, opções como <code>this</code> são automaticamente manipuladas para você. Por exemplo, dada a implementação do <code>BookmarkManager</code> acima, seu "index.js" seria reescrito como isto:</p> + +<pre class="brush: js">var bookmarks = require("./bookmarks"); + +function logAdded(uri) { + console.log("added: " + uri); +} + +function logVisited(uri) { + console.log("visited: " + uri); +} + +var bookmarkManager = bookmarks.BookmarkManager({ + onAdded: logAdded, + onVisited: logVisited +}); + +exports.onUnload = function() { + bookmarkManager.removeListener("added", logAdded); + bookmarkManager.removeListener("visited", logVisited); +} +</pre> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/creating_reusable_modules/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/creating_reusable_modules/index.html new file mode 100644 index 0000000000..837583f9c8 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/creating_reusable_modules/index.html @@ -0,0 +1,253 @@ +--- +title: Criando Módulos Reutilizáveis +slug: Mozilla/Add-ons/SDK/Tutorials/Creating_reusable_modules +tags: + - Add-on SDK +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Creating_reusable_modules +--- +<div class="note">Para seguir este tutorial você precisa do <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation">SDK instalado</a> e conhecimento <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">básico de cfx</a>.</div> + +<p>Com o SDK você não precisa manter tudo em um único arquivo "main.js". Você pode separar seu código em módulos separados com interfaces claramente definidas entre eles. Você então importa e usa estes módulos de outras partes de seu add-on usando a declaração <code>require()</code>, da mesma forma que você importa os módulos core do SDK como <a href="/en-US/Add-ons/SDK/High-Level_APIs/page_mod"><code>page-mod</code></a> or <a href="/en-US/Add-ons/SDK/High-Level_APIs/panel"><code>panel</code></a>.</p> + +<p>Muitas vezes faz sentido estruturar um add-on muito grande ou complexo como uma coleção de módulos. Isso torna o desenho do add-on mais fácil de entender e fornece algum encapsulamento em que cada módulo exportará somente o que ele escolheu, então você pode mudar o módulo internamente sem quebrar seu usuário.</p> + +<p>Uma vez que você fez isso, você pode empacotar os módulos e distribui-los independentemente de seu add-on, tornando-os disponíveis para outros desenvolvedores de add-on e efetivamente extendendo o SDK.</p> + +<p>Neste tutorial faremos exatamente isso com o módulo que calcula hashes de arquivo.</p> + +<h2 id="Um_add-on_de_hashing">Um add-on de hashing</h2> + +<p>Uma função <em>hash</em> leva uma <em>string</em> de qualquer tamanho de bytes, e produz uma string curta e de tamanho fixo de bytes como saída. É um modo útil para criar um "fingerprint" que pode ser usado para identificar um arquivo. MD5 é uma função hash comumente usada: embora não seja considerada segura, ela trabalha bem desconsiderando o contexto da segurança.</p> + +<p>Aqui nós escreveremos um add-on que deixa o usuário escolher uma arquivo no disco e calcula seu hash. Para ambas operações nós usaremos as interfaces <a href="/en-US/docs/Mozilla/Tech/XPCOM">XPCOM</a>.</p> + +<h3 id="File_picker">File picker</h3> + +<p>Para deixar o usuário selecionar um arquivo nós usaremos o nsIFilePicker. A <a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFilePicker">documentação para esta interface</a> inclui um exemplo que nós podemos adaptar como este:</p> + +<pre class="brush: js">var {Cc, Ci} = require("chrome"); + +function promptForFile() { + const nsIFilePicker = Ci.nsIFilePicker; + + var fp = Cc["@mozilla.org/filepicker;1"] + .createInstance(nsIFilePicker); + + var window = require("sdk/window/utils").getMostRecentBrowserWindow(); + fp.init(window, "Select a file", nsIFilePicker.modeOpen); + fp.appendFilters(nsIFilePicker.filterAll | nsIFilePicker.filterText); + + var rv = fp.show(); + if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { + var file = fp.file; + // Pega o caminho como string. Note que você normalmente não + // precisará trabalhar com strings de caminho. + var path = fp.file.path; + // Trabalhe com o retorno de nsILocalFile... + } + return path; +}</pre> + +<h3 id="Função_Hash">Função Hash</h3> + +<p>Firefox tem suporte embutido para funções hash, exposto via interface XPCOM nsICryptoHash. A <a href="/en-US/docs/XPCOM_Interface_Reference/nsICryptoHash">página da documentação para esta interface</a> inclui um exemplo de calculadora de hash MD5 do conteúdo do arquivo, dado seu caminho. Nós adaptamos como esta:</p> + +<pre class="brush: js">var {Cc, Ci} = require("chrome"); + +// retorna o código hexadecimal de dois dígitos para um byte +function toHexString(charCode) { + return ("0" + charCode.toString(16)).slice(-2); +} + +function md5File(path) { + var f = Cc["@mozilla.org/file/local;1"] + .createInstance(Ci.nsILocalFile); + f.initWithPath(path); + var istream = Cc["@mozilla.org/network/file-input-stream;1"] + .createInstance(Ci.nsIFileInputStream); + // abrindo para leitura + istream.init(f, 0x01, 0444, 0); + var ch = Cc["@mozilla.org/security/hash;1"] + .createInstance(Ci.nsICryptoHash); + // nós queremos usar o algoritmo MD5 + ch.init(ch.MD5); + // isto diz para updateFromStream ler o arquivo todo + const PR_UINT32_MAX = 0xffffffff; + ch.updateFromStream(istream, PR_UINT32_MAX); + // passe false aqui para conseguir os dados binários de volta + var hash = ch.finish(false); + + // converte o hash binário para hex string. + var s = Array.from(hash, (c, i) => toHexString(hash.charCodeAt(i))).join(""); + return s; +}</pre> + +<h3 id="Colocando_tudo_junto">Colocando tudo junto</h3> + +<p>O add-on completo adiciona um botão ao Firfox: quando o usuário clica no botão, nós pedimos lhe para selecionar um arquivo, e registramos o hash no console:</p> + +<pre class="brush: js">var {Cc, Ci} = require("chrome"); + +// retorna o código hexadecimal de dois dígitos para um byte +function toHexString(charCode) { + return ("0" + charCode.toString(16)).slice(-2); +} + +function md5File(path) { + var f = Cc["@mozilla.org/file/local;1"] + .createInstance(Ci.nsILocalFile); + f.initWithPath(path); + var istream = Cc["@mozilla.org/network/file-input-stream;1"] + .createInstance(Ci.nsIFileInputStream); + // abrindo para leitura + istream.init(f, 0x01, 0444, 0); + var ch = Cc["@mozilla.org/security/hash;1"] + .createInstance(Ci.nsICryptoHash); + // nós queremos usar o algoritmo MD5 + ch.init(ch.MD5); + // isto diz para updateFromStream ler o arquivo todo + const PR_UINT32_MAX = 0xffffffff; + ch.updateFromStream(istream, PR_UINT32_MAX); + // passe false aqui para conseguir os dados binários de volta + var hash = ch.finish(false); + + // converte o hash binário para hex string. + var s = Array.from(hash, (c, i) => toHexString(hash.charCodeAt(i))).join(""); + return s; +} + +function promptForFile() { + var window = require("sdk/window/utils").getMostRecentBrowserWindow(); + const nsIFilePicker = Ci.nsIFilePicker; + + var fp = Cc["@mozilla.org/filepicker;1"] + .createInstance(nsIFilePicker); + fp.init(window, "Select a file", nsIFilePicker.modeOpen); + fp.appendFilters(nsIFilePicker.filterAll | nsIFilePicker.filterText); + + var rv = fp.show(); + if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { + var file = fp.file; + // Pega o caminho como string. Note que você normalmente não + // precisará trabalhar com strings de caminho. + var path = fp.file.path; + // Trabalhe com o retorno de nsILocalFile... + } + return path; +} + +require("sdk/ui/button/action").ActionButton({ + id: "show-panel", + label: "Show Panel", + icon: { + "16": "./icon-16.png" + }, + onClick: function() { + console.log(md5File(promptForFile())); + } +}); +</pre> + +<p>Isso funciona, mas main.js está agora ficando mais longo e sua lógica mais difícil de entender. This works , but main.js is now getting longer and its logic is harder to understand. Vamos levar os códigos do "file picker" e do "hashing code" para módulos separados.</p> + +<h2 id="Criando_módulos_separados">Criando módulos separados</h2> + +<h3 id="filepicker.js">filepicker.js</h3> + +<p>Primeiro criamos um novo arquivo no diretório "lib" chamado "filepicker.js". Copiamos o código do seletor de arquivos, e adicionamos a seguinte linha de código no fim dele:</p> + +<pre class="brush: js">exports.promptForFile = promptForFile; +</pre> + +<p>Isso define a interface pública do novo módulo.</p> + +<p>Então "filepicker.js" deve parecer com isto:</p> + +<pre class="brush: js">var {Cc, Ci} = require("chrome"); + +function promptForFile() { + var window = require("sdk/window/utils").getMostRecentBrowserWindow(); + const nsIFilePicker = Ci.nsIFilePicker; + + var fp = Cc["@mozilla.org/filepicker;1"] + .createInstance(nsIFilePicker); + fp.init(window, "Select a file", nsIFilePicker.modeOpen); + fp.appendFilters(nsIFilePicker.filterAll | nsIFilePicker.filterText); + + var rv = fp.show(); + if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { + var file = fp.file; + // Get the path as string. Note that you usually won't + // need to work with the string paths. + var path = fp.file.path; + // work with returned nsILocalFile... + } + return path; +} + +exports.promptForFile = promptForFile; +</pre> + +<h3 id="md5.js">md5.js</h3> + +<p>Próximo, crie um outro arquivo no "lib", chamado "md5.js". Copie o código do hashing, e adicione esta linha ao seu fim:</p> + +<pre class="brush: js">exports.hashFile = md5File;</pre> + +<p>O arquivo completo parece com isto:</p> + +<pre class="brush: js">var {Cc, Ci} = require("chrome"); + +//retorna o código hexadecimal de dois dígitos para um byte +function toHexString(charCode) { + return ("0" + charCode.toString(16)).slice(-2); +} + +function md5File(path) { + var f = Cc["@mozilla.org/file/local;1"] + .createInstance(Ci.nsILocalFile); + f.initWithPath(path); + var istream = Cc["@mozilla.org/network/file-input-stream;1"] + .createInstance(Ci.nsIFileInputStream); + // abrindo para leitura + istream.init(f, 0x01, 0444, 0); + var ch = Cc["@mozilla.org/security/hash;1"] + .createInstance(Ci.nsICryptoHash); + // nós queremos usar o algoritmo MD5 + ch.init(ch.MD5); + // isto diz para updateFromStream ler o arquivo todo + const PR_UINT32_MAX = 0xffffffff; + ch.updateFromStream(istream, PR_UINT32_MAX); + // passe false aqui para conseguir os dados binários de volta + var hash = ch.finish(false); + + // converte o hash binário para hex string. + var s = Array.from(hash, (c, i) => toHexString(hash.charCodeAt(i))).join(""); + return s; +} + +exports.hashFile = md5File;</pre> + +<h3 id="main.js">main.js</h3> + +<p>Finalmente, atualizamos o main.js para importar estes dois módulos e usá-los:</p> + +<pre class="brush: js">var filepicker = require("./filepicker.js"); +var md5 = require("./md5.js"); + +require("sdk/ui/button/action").ActionButton({ + id: "show-panel", + label: "Show Panel", + icon: { + "16": "./icon-16.png" + }, + onClick: function() { + console.log(md5.hashFile(filepicker.promptForFile())); + } +});</pre> + +<p>Você pode distribuir estes módulos para outros desenvolvedores, também. Eles podem copia-los em algum lugar do add-on, e inclui-los usando <code>require()</code> do mesmo modo.</p> + +<h3 id="Aprendendo_Mais">Aprendendo Mais</h3> + +<p>Para ver alguns módulos que as pessoas já desenvolveram, veja a página <a href="https://github.com/mozilla/addon-sdk/wiki/Community-developed-modules">community-developed</a>. Para aprender como usar módulos de terceiros em seu próprio código, veja o tutorial<a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox"> adicionando itens de menu</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html new file mode 100644 index 0000000000..9190e825ab --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html @@ -0,0 +1,155 @@ +--- +title: Começando (jpm) +slug: Mozilla/Add-ons/SDK/Tutorials/Getting_Started_(jpm) +tags: + - Add-on SDK + - JPM +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Getting_Started_(jpm) +--- +<div class="note"> +<p>O Add-on SDK inclui uma ferramenta de linha de comando que você usa para inicializar, executar, testar, e empacotar add-ons. A ferramenta de linha de comando atual é chamada de jpm, e é baseada no <a href="http://nodejs.org/">Node.js</a>. Ela substitui a ferramenta antiga cfx.</p> + +<p>Você pode usar o jpm do Firefox 38 em diante.</p> + +<p>Este artigo descreve como desenvolver usando jpm.</p> +</div> + +<p>Este tutorial ensina a criação de uma add-on simples usando o SDK.</p> + +<h2 id="Pré-requisitos"><span class="short_text" id="result_box" lang="pt"><span class="hps">Pré-requisitos</span></span></h2> + +<p>Para criar add-ons para Firefox usando o SDK, você precisará:</p> + +<ul> + <li>Firefox versão 38 ou anteriores. Se você precisar trabalhar com versões anteriores do Firefox, você precisará usar a ferramenta cfx. Veja as instruções em <a href="/en-US/Add-ons/SDK/Tutorials/Getting_started">getting started with cfx</a>.</li> + <li>a ferramenta de linha de comando jpm. Veja instruções para <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/jpm#Installation">instalação do jpm</a>. Uma vez que você fez isso, <span class="short_text" id="result_box" lang="pt"><span class="hps">você vai</span> <span class="hps">estar a olhar para</span> <span class="hps">um prompt de comando</span><span>.</span></span></li> +</ul> + +<h2 id="Inicializando_um_add-on_vazio">Inicializando um add-on vazio</h2> + +<p>No promp de comando, crie um novo diretório. Navegue até ele, digite <code>jpm init</code>, e tecle enter:</p> + +<pre>mkdir my-addon +cd my-addon +jpm init +</pre> + +<p>Você será instado à fornecer algumas informações para seu add-on: isso será usado para criar o arquivo <a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a> do seu add-on. Por enquanto, apenas pressione enter para aceitar o padrão para cada propriedade. Para mais informação sobre <code>jpm init</code>, veja o <a href="/en-US/Add-ons/SDK/Tools/jpm#Command_reference">jpm command reference</a>.</p> + +<p>Uma vez que você forneceu um valor ou aceitou o padrão para estas propriedades, será apresentado a você o conteúdo completo do "package.json" e instado a aceitá-lo.</p> + +<h2 id="Implementando_o_add-on">Implementando o add-on</h2> + +<p>Agora você pode escrever o código do add-on. A menos que você mudou o valor de entrada ("main" no package.json), ele vai no arquivo "index.js" na raiz de seu add-on. Este arquivo foi criado para você no passo anterior. Abra-o e adicione o seguinte código:</p> + +<pre class="brush: js">var buttons = require('sdk/ui/button/action'); +var tabs = require("sdk/tabs"); + +var button = buttons.ActionButton({ + id: "mozilla-link", + label: "Visit Mozilla", + icon: { + "16": "./icon-16.png", + "32": "./icon-32.png", + "64": "./icon-64.png" + }, + onClick: handleClick +}); + +function handleClick(state) { + tabs.open("http://www.mozilla.org/"); +} +</pre> + +<div class="note"> +<p>Note que os "pontos de entrada" padrões para "index.js" no jpm, signifca que seu arquivo principal é "index.js", e é encontrado diretamente na raiz do seu add-on.</p> + +<p>No cfx, o ponto de entrada padrão para "main.js", e é localizado no diretório "lib" na raiz no add-on.</p> +</div> + +<p>Salve o arquivo.</p> + +<p>Próximo, crie um diretório chamado "data" na raiz do add-on, e salve estes três ícones no diretório "data":</p> + +<table class="standard-table"> + <tbody> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7635/icon-16.png" style="height: 16px; width: 16px;"></td> + <td>icon-16.png</td> + </tr> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7637/icon-32.png" style="height: 32px; width: 32px;"></td> + <td>icon-32.png</td> + </tr> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7639/icon-64.png" style="height: 64px; width: 64px;"></td> + <td>icon-64.png</td> + </tr> + </tbody> +</table> + +<p>Volte ao promp de comando, digite:</p> + +<pre>jpm run</pre> + +<p>Este é o comando jpm para executar uma nova instância do Firefox com seu add-on instalado.</p> + +<p>Quando o Firefox lança, no canto superior direito do navegador você verá um ícone com o logotipo do Firefox. Clique no ícone, e uma nova tab abrirá com o site <a href="http://www.mozilla.org/" rel="noreferrer">http://www.mozilla.org/</a> carregado.</p> + +<p>Isso é tudo que este add-on faz. Ele usa dois módulos SDK: o módulo <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a>, que lhe permite adicionar botões ao navegador, e o módulo tab, que lhe permite executar operações básicas com o módulo <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a>. Neste caso, nós criamos um botão cujo ícone é o ícone do Firefox, e adicionamos um manipulado de click que carrega a página do Mozilla na nova tab.</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/7643/mozilla-button.png" style="display: block; height: 221px; margin-left: auto; margin-right: auto; width: 382px;">Tente editar este arquivo. Por exemplo, nós poderíamos mudar a página que está sendo carregada:</p> + +<pre class="brush: js">var buttons = require('sdk/ui/button/action'); +var tabs = require("sdk/tabs"); + +var button = buttons.ActionButton({ + id: "mozilla-link", + label: "Visit Mozilla", + icon: { + "16": "./icon-16.png", + "32": "./icon-32.png", + "64": "./icon-64.png" + }, + onClick: handleClick +}); + +function handleClick(state) { + tabs.open("https://developer.mozilla.org/"); +}</pre> + +<p>No promp de comando, execute <code>jpm run</code> novamente. Desta vez clicando lhe levará para <a href="https://developer.mozilla.org/">https://developer.mozilla.org/</a>.</p> + +<h2 id="Empacotando_o_add-on">Empacotando o add-on</h2> + +<p>Quando você terminou o add-on e estiver preparado para distribui-lo, você precisará empacotá-lo como um arquivo XPI. Esta é a forma instalável dos add-ons do Firefox. Você pode distribuir os arquivos XPI por si mesmo ou publicá-los em <a href="https://addons.mozilla.org" rel="noreferrer">https://addons.mozilla.org</a> então outros usuários podem baixar eles.</p> + +<p>Para construir um XPI, apenas execute o comando <code>jpm xpi</code> do diretório do add-on:</p> + +<pre>jpm xpi +</pre> + +<p>Você deveria ver uma mensagem como:</p> + +<pre>JPM info Successfully created xpi at /path/to/getting-started/@getting-started.xpi +</pre> + +<p>Para testar que isso funciona, tente instalar o arquivo XPI em sua própria instalação do Firefox. Você pode fazer isso pressionando a combinação de teclas Ctrl+O (Cmd+O no Mac) de dentro do Firefox, ou selecionando o menu "Open" do menu "Arquivo" do Firefox. Isso trará uma caixa de diálogo de seleção de arquivo: navegue para o arquivo "@getting-started.xpi", abra-o e siga o prompt para instalar o add-on.</p> + +<h2 id="Resumo">Resumo</h2> + +<p>Neste tutorial nós construímos e empacotamos um add-on usando três comandos:</p> + +<ul> + <li><code>jpm init</code> para inicializar um modelo de add-on vazio</li> + <li><code>jpm run</code> para executar uma nova instância do Firefox com o add-on instalado, então nós testamos ele</li> + <li><code>jpm xpi</code> para empacotar o add-on em um arquivo XPI para distribuição</li> +</ul> + +<p>Há três comandos principais que você usará quando desenvolvendo add-ons com SDK. Há documentação abrangente no <a href="/en-US/Add-ons/SDK/Tools/jpm" rel="noreferrer">reference documentation</a> cobrindo todos os comandos que você pode usar e todas as opções que eles levam.</p> + +<p>O código do add-on por si usa dois módulos SDK, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> e <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a>. Há documentação de referência para todas as APIS do SDK tanto as de <a href="/en-US/Add-ons/SDK/High-Level_APIs" rel="noreferrer">alto nível</a> quanto as de <a href="/en-US/Add-ons/SDK/Low-Level_APIs" rel="noreferrer">baixo nível</a>.</p> + +<h2 id="O_que_vem_agora">O que vem agora?</h2> + +<p>Para ter uma ideia das coisas que você pode fazer com as APIs do SDK, tente trabalhar com alguns dos <a href="/en-US/Add-ons/SDK/Tutorials" rel="noreferrer">tutoriais</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/index.html new file mode 100644 index 0000000000..6d5484bc46 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/index.html @@ -0,0 +1,144 @@ +--- +title: Tutoriais +slug: Mozilla/Add-ons/SDK/Tutorials +tags: + - Add-on SDK +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials +--- +<p>Esta página lista artigos úteis e práticos sobre como executar tarefas específicas usando o SDK.</p> + +<hr> +<h3 id="Começando">Começando</h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Installation">Instalação</a></dt> + <dd>Download, instalar, e inicializar o SDK no Windows, OS X e Linux.</dd> +</dl> + +<dl> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Troubleshooting">Solução de problemas </a></dt> + <dd>Algumas dicas para resolver problemas comuns e conseguir mais ajuda.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Add-ons/SDK/Tutorials/Come%C3%A7ando">Começando </a></dt> + <dd>Criação passo-a-passo de um add-on simples com o SDK.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="Criando_interfaces_de_usuário"><a name="create-user-interfaces">Criando interfaces de usuário</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar">Adicionando um botão de barra de ferramenta</a></dt> + <dd>Anexe um botão à barra de ferramentas de add-on do Firefox.</dd> + <dt><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Add-ons/SDK/Tutorials/Adicionar_uma_item_de_menu_ao_Firefox">Adicione um item de menu ao Firefox</a></dt> + <dd>Adicione itens ao menu principal do Firefox.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Add-ons/SDK/Tutorials/Mostrar_um_Popup">Mostre um popup</a></dt> + <dd>Mostre um diálogo popup implementado com HTML e JavaScript.</dd> + <dt><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Add-ons/SDK/Tutorials/Adicione_um_Item_ao_Menu_de_Contexto">Adicione um item ao menu de contexto</a></dt> + <dd>Adicione itens ao menu de contexto do Firefox.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="Interagindo_com_o_navegador"><a name="interact-with-the-browser">Interagindo com o navegador</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Add-ons/SDK/Tutorials/Abra_uma_P%C3%A1gina_Web">Abra uma página</a></dt> + <dd>Abra uma página web em um novo navegador ou janela usando o módulo tabs, e acesse seu conteúdo.</dd> + <dt><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Add-ons/SDK/Tutorials/captura_de_carregamento_da_pagina">Observando páginas carregadas</a></dt> + <dd>Use o módulo tabs para conseguir notificação quando novas páginas são carregadas, e acesse seu conteúdo.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Add-ons/SDK/Tutorials/Lista_de_Tabs_Abertas">Capturando a lista de tabs abertas</a></dt> + <dd>Use o módulo tab para interagir pelas tabs atualmente abertas, e acesse seu conteúdo.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="Modificando_páginas_web"><a name="modify-web-pages">Modificando páginas web</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">Modificar páginas web baseado na URL</a></dt> + <dd>Crie um filtro para páginas web baseado em sua URL: sempre que uma página web cuja URL combinar com o filtro carregado, executa um script espeficado nela.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">Modificar a página web ativa</a></dt> + <dd>Carrega dinamicamente um script dentro da página web ativa atualmente.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="Técnicas_de_desenvolvimento"><a name="development-techniques">Técnicas de desenvolvimento</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Logging">Restro de log</a></dt> + <dd>Registra mensagens para o console para propósito de diagnóstico.</dd> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Creating_reusable_modules">Criando módulos reutilizáveis</a></dt> + <dd>Estruture seu add-on em módulos separados deixando mais fácil o desenvolvimento, depuração e manutenção. Crie pacotes reutilizáveis contendo seus módulos, assim outros desenvolvedores de add-on podem usá-los também.</dd> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Unit_testing">Teste de unidade </a></dt> + <dd>Escrevendo e executando teste de unidade usando framework de teste do SDK.</dd> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Chrome_authority">Chrome authority </a></dt> + <dd>Conseguindo acesso ao objeto Components, permitindo a seu add-on carregar e usar qualquer objeto XPCOM.</dd> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Creating_event_targets">Criando event targets </a></dt> + <dd>Permite aos objeto que você define emitir seus próprios eventos.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Listening_for_load_and_unload">Observando load e unload </a></dt> + <dd>Receba notificações quando seu add-on é caregado ou descarregado pelo Firefox, e passa argumentos do seu add-on a partir da linha de comando.</dd> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">Usando módulos de terceiros</a></dt> + <dd>Instale e use módulos adicionais que não são fornecidos com o SDK.</dd> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/l10n">Localização </a></dt> + <dd>Escrever código localizável.</dd> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Mobile_development">Desenvolvimento mobile</a></dt> + <dd>Develop add-ons for Firefox Mobile on Android.</dd> + <dt><a href="/en-US/Add-ons/Add-on_Debugger">Depuração do Add-on</a></dt> + <dd>Depure o JavaScript do seu add-on.</dd> +</dl> +</div> +</div> + +<hr> +<h3 id="Colocando_tudo_junto"><a name="putting-it-together">Colocando tudo junto</a></h3> + +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="/en-US/Add-ons/SDK/Tutorials/Annotator">Add-on Annotator</a></dt> + <dd>Um guia para um add-on relativamente complexo.</dd> +</dl> +</div> +</div> + +<p> </p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/l10n/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/l10n/index.html new file mode 100644 index 0000000000..4a762bda9b --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/l10n/index.html @@ -0,0 +1,380 @@ +--- +title: Localização +slug: Mozilla/Add-ons/SDK/Tutorials/l10n +tags: + - Add-on SDK + - Localização +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/l10n +--- +<p>O SDK suporta localização de strings que aparecem no:</p> + +<ul> + <li><a href="/en-US/Add-ons/SDK/Tutorials/l10n#Using_Localized_Strings_in_JavaScript">o código JavaScript principal do seu add-on</a></li> + <li><a href="/en-US/Add-ons/SDK/Tutorials/l10n#Using_Localized_Strings_in_HTML">arquivos HTML empacotados com seu add-on</a></li> + <li><a href="/en-US/Add-ons/SDK/Tutorials/l10n#Using_Localized_Strings_in_Preferences">os campos <code>title</code> e <code>description</code> das preferências do seu add-on's</a>.</li> +</ul> + +<p>Ele, ainda, não suporta localização de conteúdo CSS ou Scripts.</p> + +<h2 id="Strings_de_Localização">Strings de Localização</h2> + +<p>Strings traduzidas são mantidas em um diretório chamado "locale" no diretório principal do seu add-on, um arquivo para cada locale. Os arquivos:</p> + +<ul> + <li>use o formato <a href="http://en.wikipedia.org/wiki/.properties"><code>.properties</code></a></li> + <li>são chamados "xx-YY.properties", onde "xx-YY" é o nome da<a href="https://wiki.mozilla.org/L10n:Locale_Codes"> localidade</a> em questão</li> + <li>contém uma entrada para cada string que você quer localizar, consistindo de um identificador para a string e sua tradução para aquela localidade, no formado <code>identificador=tradução</code>.</li> + <li>precisa usar UTF-8 sem codificação BOM</li> +</ul> + +<p>Suponha que seu add-on contém uma única string localizável, representada em Inglês como "Hello!", e você quer suprir com localizações US English e Francês.</p> + +<p>Você adiciona dois arquivos ao diretório "locale":</p> + +<pre>my-addon/ + data + lib + locale/ + en-US.properties + fr-FR.properties +</pre> + +<p>"en-US.properties" contém isto:</p> + +<pre>hello_id= Hello! +</pre> + +<p>"fr-FR.properties" contém isto:</p> + +<pre>hello_id= Bonjour ! +</pre> + +<p>Agora que sempre que em seu código JavaScript ou HTML pedir ao sistema de localização pela tradução do identificador <code>hello_id</code>, ele pegará a tradução correta para a localidade atual.</p> + +<h2 id="Usando_Strings_de_Localização_no_HTML">Usando Strings de Localização no HTML</h2> + +<div class="note"> +<p>Este exemplo usa a API <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a>, que está disponível somente do Firefox 29 em diante.</p> +</div> + +<p>Para referenciar uma string localizada do HTML, adicione um atributo <code>data-l10n-id</code> à tag HTML onde você quiser que a string localizada apareça, e atribua o identificador a ele:</p> + +<pre class="brush: html"><html> + <body> + <h1 data-l10n-id="hello_id"></h1> + </body> +</html> +</pre> + +<p>Então você pode usar o arquivo HTML para construir sua interface, por exemplo dentro de um painel:</p> + +<pre class="brush: js">var button = require("sdk/ui/button/action").ActionButton({ + id: "localized-hello", + label: "Localized hello", + icon: "./icon-16.png", + onClick: function() { + hello.show(); + } +}); + +var hello = require("sdk/panel").Panel({ + height: 75, + width: 150, + contentURL: require("sdk/self").data.url("my-panel.html") +});</pre> + +<p>Dados os arquivos locale para "en-US" e "fr-FR" que fornece uma tradução para o <code>hello_id</code>, o painel agora mostrará o "Hello!" ou "Bonjour !", de acordo com a localidade atual:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/7663/bonjour.png" style="height: 160px; width: 255px;"><img alt="" src="https://mdn.mozillademos.org/files/7665/hello.png" style="height: 160px; width: 255px;"></p> + +<p>A tradução é inserida dentro do nó que tem o atributo<code> data-l10n-id</code>. Qualquer conteúdo anteriormente existente é substituído.</p> + +<p>A string é inserida como texto, então você não pode inserir HTML usando declarações como:</p> + +<pre>hello_id= <blink>Hello!</blink> +</pre> + +<h3 id="Localizando_Atributos_de_Elementos">Localizando Atributos de Elementos</h3> + +<div class="geckoVersionNote">Esta característica é nova no Firefox 39</div> + +<p><br> + Você pode localizar certos atributos de elementos com um l10n-id configurando seu valor com o l10-id.attributeName no arquivo da propriedade como isto:</p> + +<pre>hello_id.accesskey= H</pre> + +<p>Os seguintes atributos são suportados:</p> + +<ul> + <li><strong>accesskey</strong></li> + <li><strong>alt</strong></li> + <li><strong>label</strong></li> + <li><strong>title</strong></li> + <li><strong>placeholder</strong></li> +</ul> + +<p><span id="result_box" lang="pt"><span class="hps">Além disso, a</span> <span class="hps">localização do</span>s atributos <span class="hps">ARIA</span> <span class="hps">aria</span><span>-label,</span> <span class="hps">aria</span><span class="atn">-</span><span>valuetext</span> <span class="hps">e</span> <span class="hps">aria</span><span class="atn">-</span><span>moz</span><span class="atn">-</span><span>dica</span> <span class="hps">são suportados</span> <span class="hps">com os mesmos</span> apelidos que <span class="hps">no</span> <span class="hps">Firefox</span> <span class="hps">OS</span><span>:</span></span></p> + +<ul> + <li><strong>ariaLabel</strong></li> + <li><strong>ariaValueText</strong></li> + <li><strong>ariaMozHint</strong></li> +</ul> + +<h2 id="Usando_Strings_de_Localização_no_JavaScript">Usando Strings de Localização no JavaScript</h2> + +<p>Para referenciar Strings de Localização do código principal do seu add-on, você faz isso:</p> + +<pre class="brush: js">var _ = require("sdk/l10n").get; +console.log(_("hello_id!"));</pre> + +<p><span>A atribuição de "_" em particular não é requerida, mas é uma convenção da ferramente <a href="https://www.gnu.org/software/gettext/gettext.html">gettext </a>e torna possível trabalhar com ferramentas existentes que esperam "_" para indicar Strings de Localização.</span></p> + +<ol> + <li>Importe o módulo <code>l10n</code>, atribua sua função <code>get</code> o "<code>_</code>" (underscore).</li> + <li>Envolva todas as referências a Strings de Localização com uma função <code>_()</code>.</li> +</ol> + +<p>Se você executar ela você verá a saída esperada para a localidade atual:</p> + +<pre>info: Hello! +</pre> + +<pre>info: Bonjour ! +</pre> + +<p>Observe que você não pode <code>require()</code> módulos nos scripts de conteúdo, você ainda não pode referenciar strings de localização nos scripts de conteúdo.</p> + +<h3 id="Plurais">Plurais</h3> + +<p>O módulo <code>l10n</code> suporta formas plurais. Diferentes línguas tem diferentes regras para formação de plurais. Por exemplo, Inglês tem duas formas: uma forma singular para "one", e uma forma plural para "everything else, including zero":</p> + +<pre>one tomato +no tomatoes +two tomatoes +</pre> + +<p>Mas a Russa tem diferentes formas para números terminados em 1 (exceto 11), números terminados em 2-4 (exceto 12-14) e outros números:</p> + +<pre>один помидор // one tomato +два помидора // two tomatoes +пять помидоров // five tomatoes +</pre> + +<p>O SDK usa dados do <a href="http://cldr.unicode.org/index">Unicode CLDR</a> para descrever as diferentes formas de plural usadas pelas diferentes línguas.</p> + +<h4 id="Formas_Plurais_do_Unicode_CLDR">Formas Plurais do Unicode CLDR</h4> + +<p>O projeto Unicode CLDR define um esquema que descreve a regras de plural de uma língua em particular. Neste esquema uma língua mapeia cada abrangência distinta de números para um ou mais formas, identificado pelas categorias: <em>zero, one, two, few, many, </em>e <em>other</em>.</p> + +<p>Inglês tem duas formas, que podem ser descritas pelo mapeamento "1" para "one" e "everything else" para "other":</p> + +<pre>one → n is 1; +other → everything else +</pre> + +<p>A Russa usa quatro formas, que podem ser descritas como se segue:</p> + +<pre>one → n mod 10 is 1 and n mod 100 is not 11; +few → n mod 10 in 2..4 and n mod 100 not in 12..14; +many → n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14; +other → everything else +</pre> + +<p>As regras de plural para todas as línguas podem ser encontrada na página de <a href="http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html">Regras para Plural das Línguas</a> do CLDR (embora esta tabela esteja desatualizada se comparada com a <a href="http://unicode.org/repos/cldr/trunk/common/supplemental/plurals.xml">CLDR XML source</a>).</p> + +<h4 id="Formas_Plurais_no_SDK">Formas Plurais no SDK</h4> + +<p>No código, você fornece uma parâmetro extra ao lado do identificador, descrevendo quantos itens há:</p> + +<pre class="brush: js">var _ = require("sdk/l10n").get; +console.log(_("tomato_id")); +console.log(_("tomato_id", 1)); +console.log(_("tomato_id", 2)); +console.log(_("tomato_id", 5)); +console.log(_("tomato_id", .5));</pre> + +<p>No arquivo <code>.properties</code> para cada língua você pode definir uma localização diferente para cada forma de plural possível naquela língua, usando palavras reservadas do CLDR. Então no Inglês nós teríamos duas localizações de plural (observe que a categoria "other" <strong>não</strong> leva palavra reservada do CLDR:</p> + +<pre># en-US translations +tomato_id[one]= %d tomato +tomato_id= %d tomatoes +</pre> + +<p>Na Russa nós teríamos quatro localizações de plural:</p> + +<pre># ru-RU translations +tomato_id[one]= %d помидор +tomato_id[few]= %d помидора +tomato_id[many]= %d помидоров +tomato_id= %d помидоры +</pre> + +<p>O módulo de localização por si só entende as definições CLDR para cada língua, permitindo a ele mapear, por exemplo, "2" no código e "few" no arquivo <code>ru-RU.properties</code>. Então ele pega e retorna a localização apropriada para a contagem fornecida.</p> + +<h3 id="Placeholders">Placeholders</h3> + +<p>O módulo <code>l10n</code> suporta placeholders, permitindo a você inserir uma string que não deveria ser localizada em uma que é. Os seguintes arquivos "en-US" e "fr-FR" ".properties" estão incluídos placeholders:</p> + +<pre># en-US translations +hello_id= Hello <strong>%s</strong>! +</pre> + +<pre># fr-FR translations +hello_id= Bonjour <strong>%s</strong> ! +</pre> + +<p>Para usar placeholders, forneça uma string placeholder depois do identificador:</p> + +<pre class="brush: js">var _ = require("sdk/l10n").get; +console.log(_("hello_id", "Bob")); +console.log(_("hello_id", "Alice"));</pre> + +<p>Na localidade Inglês "en-US", isto nos é dado:</p> + +<pre>info: Hello Bob! +info: Hello Alice! +</pre> + +<p>No "fr-FR" nós conseguimos:</p> + +<pre>info: Bonjour Bob ! +info: Bonjour Alice ! +</pre> + +<h3 id="Ordenando_Placeholders">Ordenando Placeholders</h3> + +<p>Quando strings localizáveis podem levar dois ou mais placeholders, tradutores podem definir a ordem em que placeholders são inseridos, sem afetar o código.</p> + +<p>Primeiramente, isto é importante porque diferentes línguas tem regras diferentes para ordernar palavras. Mesmo dentro de uma mesma língua, embora traduzida, tradutores deve ter liberdade para definir a ordem.</p> + +<p>Por exemplo, suponha que nós queremos incluir uma string de localização designando a cidade de uma pessoa. Há dois placeholders: o nome da pessoa e o nome da cidade em que ela reside:</p> + +<pre class="brush: js">var _ = require("sdk/l10n").get; +console.log(_("home_town_id", "Bob", "London"));</pre> + +<p>An English translator might want to choose between the following:</p> + +<pre>"<town_name> is <person_name>'s home town." +</pre> + +<pre>"<person_name>'s home town is <town_name>" +</pre> + +<p>Para escolher a primeira opção, o arquivo<code> .properties</code> pode ordenar o placeholders como:</p> + +<pre>home_town_id= %2s is %1s's home town. +</pre> + +<p>Isso nos dá a seguinte saída:</p> + +<pre>info: London is Bob's home town. +</pre> + +<h2 id="Usando_Strings_de_localização_em_Preferências">Usando Strings de localização em Preferências</h2> + +<p>Pela inclusão de uma estrutura <a href="/en-US/Add-ons/SDK/High-Level_APIs/simple-prefs"><code>"preferences"</code> no arquivo "package.json" do seu add-on</a>, você pode definir preferências para seu add-on que o usuário pode ver e editar usando o <a href="https://support.mozilla.org/en-US/kb/Using%20extensions%20with%20Firefox#w_how-to-change-extension-settings">gerenciador de add-ons </a>do Firefox.</p> + +<p>Preferências tem um campo <code>title</code> obrigatório e um campo <code>description</code> opcional. Há strings que aparecem ao lado da preferência no gerenciador de Add-on, para ajudar a explicar ao usuário o que a preferência significa.</p> + +<ul> + <li> + <p>Para fornecer formas localizadas do title da preferência, inclua uma entrada no arquivo "properties" cujo identificador seja o nome da preferência seguido por <code>_title</code>, e cujo valor é o título da localidade.</p> + </li> + <li> + <p>Para fornecer forma localizada da descrição da preferência, inclui uma entrada em seu arquivo "properties" cujo identificador é o nome da preferência seguido por <code>_description</code>, e cujo valor é a descrição da localidade.</p> + </li> +</ul> + +<p>Por exemplo, suponha que seu "package.json" defina uma única preferência:</p> + +<pre>{ + "preferences": [ + { + "type": "string", + "name": "monster_name", + "value": "Gerald", + "title": "Name" + } + ], + "name": "monster-builder", + "license": "MPL 2.0", + "author": "me", + "version": "0.1", + "fullName": "Monster Builder", + "id": "monster-builder@me.org", + "description": "Build your own monster" +} +</pre> + +<p>Em seu arquivo "en-US.properties", inclua estes dois itens:</p> + +<pre>monster_name_title= Name +monster_name_description= What is the monster's name? +</pre> + +<p>Em seu arquivo "fr-FR.properties", inclui a tradução francesa:</p> + +<pre>monster_name_title= Nom +monster_name_description= Quel est le nom du monstre ? +</pre> + +<p>Agora quando o local do navegador estiver configurado para "en-US", os usuários verão este Gerenciador de Add-on:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/6525/preference-us.png" style="height: 77px; width: 571px;"></p> + +<p>Quando o local do navegador estiver configurado para "fr-FR", eles verão isto:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/6523/preference-french.png"></p> + +<p>Os tipos de preferência de <code>menulist</code> e <code>radio</code> tem opções. O atributo <code>label</code> de cada opção é mostrado para o usuário. Se o arquivo de local tem uma entrada com o valor do atributo <code>label</code> prefixado com "{name}_options." como sua chave, onde {name} é o nome da preferência, seu valor é usado como rótulo por localização.</p> + +<h2 id="Usando_identificadores">Usando identificadores</h2> + +<p>Se o sistema de localização não pode encontrar uma entrada para um identificador em particular usando a localidade atual, então ele apenas retorna o identificador por si mesmo.</p> + +<p>Isto tem a bonita propriedade que você pode escrever add-on localizável, inteiramente funcional sem ter que escrever qualquer arquivo local. Você pode usar somente a linguagem padrão como seu identificador, e subsequentemente fornecer arquivos <code>.properties</code> para todos os locais adicionais que você quiser suportar.</p> + +<p>Por exemplo, no caso acima você poderia usar "Hello!" como o identificador, e apenas ter um arquivo <code>.properties</code> para a localidade "fr-FR":</p> + +<pre>Hello!= Bonjour ! +</pre> + +<p>Então quando a localidade é "en-US", o sistema falharia ao encontrar o arquivo <code>.properties</code> file, e retornaria "Hello!".</p> + +<p>Porém, essa técnica torna difícil manter um add-on que tem muitas localizações, porque você estará usando a língua padrão tanto para strings de interface quanto chaves de tradução. Isto significa que se você quiser mudar o nome de uma string na língua padrão, ou consertar a digitação, então você quebrará todos os seus arquivos de tradução.</p> + +<h2 id="Locale_Updater">Locale Updater</h2> + +<p>O addon <a href="https://github.com/downloads/ochameau/locale-updater/locale-updater.xpi">locale updater</a> torna fácil atualizar arquivos de localidade. Uma vez que você o instalou, abra o Gerenciador de Add-on, e você verá um novo botão rotulado "Update l10n" próximo a cada add-on que você instalou:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/6515/locale-updater.png"></p> + +<p>Clique no botão e você será instado a enviar um arquivo <code>.properties</code> para aquele add-on. Se você fornecer um novo arquivo, o locale do add-on será atualizado com o novo arquivo.</p> + +<h2 id="Limitações">Limitações</h2> + +<p>A localização atual suportada é o primeiro passo ao inteiro suporte, e contem uma série de limitações.</p> + +<ul> + <li> + <p>Não há suporte para scripts de conteúdo ou arquivos CSS: no momento, você pode localizar strings que aparecem nos arquivos JavaScript que podem <code>require()</code> módulos SDK e em HTML.</p> + </li> + <li> + <p>A configuração dos arquivos de localidade é global por um add-on. Isto significa que um módulo não pode sobreescrever uma tradução mais geral: então um módulo <code>informal.js</code> não pode especificar que "hello_id" ocorrendo em seu código deveria ser traduzida para "Hi!".</p> + </li> + <li> + <p>A ferramenta SDK compila os arquivos de localidade em um formato JSON quando produzindo um XPI. Isso significa que traduções não podem localizar um add-on dando o XPI sozinho, mas deve ser dado acesso ao fonte do add-on.</p> + </li> + <li> + <p>O desenvolvedor deve manualmente montar o conjunto de strings localizáveis compõe os arquivos de localidade.</p> + </li> +</ul> + +<h2 id="Veja_também_-_para_desenvolvedores_que_localização_em_add-on_que_não_são_do_SDK">Veja também - para desenvolvedores que localização em add-on que não são do SDK</h2> + +<ul> + <li>Como colocar localização em páginas html, arquivos xul, e arquivos js/jsm do add-on bootstrapped: <a href="/en-US/Add-ons/Bootstrapped_extensions#Localization_%28L10n%29">Bootstrapped Extensions :: Localization (L10n)</a></li> + <li>XUL School Localization Tutorial: <a href="/en-US/docs/Mozilla/Tech/XUL/Tutorial/Localization">DTD/Entities method</a> and <a href="/en-US/docs/Mozilla/Tech/XUL/Tutorial/Property_Files">Properties method</a></li> + <li><a href="/en-US/docs/Mozilla/Localization/Localizing_an_extension">Localizing an extension</a></li> +</ul> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/lista_de_tabs_abertas/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/lista_de_tabs_abertas/index.html new file mode 100644 index 0000000000..d3d537037d --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/lista_de_tabs_abertas/index.html @@ -0,0 +1,67 @@ +--- +title: Lista de Tabs Abertas +slug: Mozilla/Add-ons/SDK/Tutorials/Lista_de_Tabs_Abertas +tags: + - Add-on SDK + - Listando tabs abertas +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/List_Open_Tabs +--- +<div class="note"> +<p>Para seguir este tutorial você precisará ter <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation">instalado o SDK </a>e ter conhecimento <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">básico sobre cfx</a>.</p> + +<p>Este tutorial usa a API <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a>, que está disponível somente do Firefox 29 em diante.</p> +</div> + +<p>Para listar as tabs abertas, você pode iterar sobre o objeto <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a>.</p> + +<p>O add-on a seguir adiciona um <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> que registra as URLs abertas nas tabs quando clicado:</p> + +<pre class="brush: js">require("sdk/ui/button/action").ActionButton({ + id: "list-tabs", + label: "List Tabs", + icon: "./icon-16.png", + onClick: listTabs +}); + +function listTabs() { + var tabs = require("sdk/tabs"); + for (let tab of tabs) + console.log(tab.url); +} +</pre> + +<p>Note que para fazer isso funcionar você precisa salvar um ícone para o botão no diretório "data" do seu add-on como "icon-15.png": você pode baixar o ícone daqui: <img alt="" src="https://mdn.mozillademos.org/files/7649/icon-16.png" style="height: 16px; width: 16px;">.</p> + +<p>Se você executar o add-on, carregar um grupo de tabs, e clicar no botão, você verá a saída no linha de comando do <a href="/en-US/Add-ons/SDK/Tutorials/Logging">console</a> que parece com isto:</p> + +<pre>info: http://www.mozilla.org/en-US/about/ +info: http://www.bbc.co.uk/ +</pre> + +<p>Você não consegue acesso direto a qualquer conteúdo hospedado na tab. Para acessar o conteúdo da tab você precisa anexar um script à tab usando <code>tab.attach()</code>. Este add-on anexa um script a todas as tabs abertas. O script adiciona uma borda vermelha ao documento da tab:</p> + +<pre class="brush: js">require("sdk/ui/button/action").ActionButton({ + id: "list-tabs", + label: "List Tabs", + icon: "./icon-16.png", + onClick: listTabs +}); + +function listTabs() { + var tabs = require("sdk/tabs"); + for (let tab of tabs) + runScript(tab); +} + +function runScript(tab) { + tab.attach({ + contentScript: "document.body.style.border = '5px solid red';" + }); +} +</pre> + +<h2 id="Aprendendo_Mais">Aprendendo Mais</h2> + +<p>Para aprender mais sobre como trabalhar com tabs no SDK, veja a referência da API <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a>.</p> + +<p>Para aprender mais sobre execução de scripts em tabs, veja o tutorial sobre uso do <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#attach(options)"><code>tab.attach()</code></a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/listening_for_load_and_unload/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/listening_for_load_and_unload/index.html new file mode 100644 index 0000000000..5e3818036f --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/listening_for_load_and_unload/index.html @@ -0,0 +1,60 @@ +--- +title: Capturando Load e Unload +slug: Mozilla/Add-ons/SDK/Tutorials/Listening_for_load_and_unload +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Listening_for_load_and_unload +--- +<div class="note"> +<p><span>Para seguir este tutorial você precisará ter conhecimento <a href="/en-US/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29">básico de <code>jpm</code></a>. </span></p> +</div> + +<p>Se seu add-on exporta uma função chamada <code>main()</code>, então aquela função será chamada sempre que o add-on for carregado, e será passada uma string descrevendo a razão de ele ter sido carregado bem como qualquer argumento passado para ele. Se seu add-on exporta uma função chamada <code>onUnload()</code>, então esta função será chamada quando o add-on for descarregado, e será passada uma string descrevendo a razão da descarga.</p> + +<p>Você não tem que usar <code>exports.main()</code> ou <code>exports.onUnload()</code>. Você pode colocar o código do seu add-on no nível superior ao invés de envolver ele em uma atribuição de função para <code>exports.main()</code>. Ele será carregado nas mesmas circunstâncias, mas você não conseguirá acesso às razões da carga ou descarga dele bem como de seus argumentos.</p> + +<h2 id="exports.main()">exports.main()</h2> + +<p>O código <code>main.js</code> do seu add-on é executado assim que ele é carregado. Ele é carregado quando ele é instalado, habilitado ou quando inicia o Firefox.</p> + +<p>Se seu add-on exporta uma função chamada <code>main()</code>, aquela função será chamada imediatamente depois que o <code>main.js </code>esteja completamente avaliado, e depois de todas as declarações <code>require()</code> de nível superior serem executadas (então geralmente depois de todas módulos dependentes serem carregados).</p> + +<div> +<div> +<pre><span class="brush: js">exports.main = function (options, callbacks) {};</span></pre> +</div> +</div> + +<p><code>options</code> é um objeto descrevendo os parâmetros com os quais seu add-on foi carregado</p> + +<h3 id="options.loadReason">options.loadReason</h3> + +<p><code>options.loadReason</code> é uma das seguintes strings descrevendo a razão de seu add-on ter sido carregado:</p> + +<pre>install +enable +startup +upgrade +downgrade +</pre> + +<h2 id="exports.onUnload()">exports.onUnload()</h2> + +<p>Se seu add-on exporta uma função chamada <code>onUnload()</code>, aquela função será chamando quando o add-on for descarregado.</p> + +<div> +<div> +<pre><span class="brush: js">exports.onUnload = function (reason) {};</span></pre> +</div> +</div> + +<h3 id="reason">reason</h3> + +<p><code>reason</code> é uma das seguintes strings descrevendo a razão do add-on ter sido descarregado:</p> + +<pre>uninstall +disable +shutdown +upgrade +downgrade +</pre> + +<p>Devido ao <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=627432">bug 627432</a>, sua captura de descarga (<code style="font-size: 14px;">onUnload</code>) nunca será chamada com <code style="font-size: 14px;">uninstall</code>: ela somente é chamada com <code style="font-size: 14px;">disable</code>. Veja no comentário particular sobre este <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=627432#c12">bug</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/logging/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/logging/index.html new file mode 100644 index 0000000000..088d694408 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/logging/index.html @@ -0,0 +1,55 @@ +--- +title: Logging +slug: Mozilla/Add-ons/SDK/Tutorials/Logging +tags: + - Add-on SDK + - console +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Logging +--- +<div class="note">Para seguir este tutorial você precisa do <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation">SDK instalado</a> e <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">conhecimento básico de cfx</a>.</div> + +<p>O objeto DOM <a href="https://developer.mozilla.org/en/DOM/console"><code>console</code></a> é útil para depuração do JavaScript. Porque os objetos DOM não estão disponíveis para o código principal do add-on, o SDK fornece seu próprio objeto global <code>console</code> com a maiorira dos mesmos métodos do do <code>console </code>DOM, incluindo métodos para registrar erros, avisos, ou mensagens informativas. Você não tem que usar <code>require()</code> qualquer coisa para conseguir acesso ao console. Ele está disponível para você.</p> + +<p>O método <code>console.log()</code> imprime mensagens informativas:</p> + +<pre class="brush: js">console.log("Hello World"); +</pre> + +<p>Tente:</p> + +<ul> + <li>crie um novo diretório, e navegue até ele</li> + <li>execute <code>cfx init</code></li> + <li>abra "lib/main.js" e adicione a linha acima</li> + <li>execute <code>cfx run</code>, então <code>cfx run</code> novamente</li> +</ul> + +<p>O Firefox iniciará, e a linha a seguir aparecerá na janela de comando que você usou para executar <code>cfx run</code>:</p> + +<pre>info: Hello World! +</pre> + +<h2 id="console_em_Scripts_de_Conteúdo"><code>console</code> em Scripts de Conteúdo</h2> + +<p>Você pode usar console em <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">scripts de conteúdo</a> assim como no código principal do seu add-on. O add-on a seguir registra o conteúdo do HTML de toda a tab que o usuário carregar, chamando <code>console.log()</code> dentro do script de conteúdo:</p> + +<pre class="brush: js">require("sdk/tabs").on("ready", function(tab) { + tab.attach({ + contentScript: "console.log(document.body.innerHTML);" + }); +}); +</pre> + +<h2 id="Saída_do_console">Saída do <code>console</code></h2> + +<p>Se você estiver executando seu add-on da linha de comando (por exemplo, executando<code> cfx run</code> ou <code>cfx test</code>) então as mensagens do console aparece no shell de comando usado.</p> + +<p>Se você instalou o add-on no Firefox então as mensagens aparecerão no <a href="/en-US/docs/Tools/Browser_Console">Console do Navegador</a> do Firefox.</p> + +<p>Mas note que <strong>por padrão, chamadas à <code>console.log()</code> não resultarão em qualquer saída no Console de Erro por qualquer add-on instalado</strong>: isso inclui add-ons instalados usando o Add-on Builder ou usando ferramentas como <a href="https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/">Extension Auto-installer</a>.</p> + +<p>Veja <a href="/en-US/Add-ons/SDK/Tools/console#Logging_Levels">"Logging Levels"</a> na documentação de referência para mais informações.</p> + +<h2 id="Aprendendo_Mais">Aprendendo Mais</h2> + +<p>Para a API completa do <code>console</code>, veja sua <a href="/en-US/Add-ons/SDK/Tools/console">referência da API</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/modifying_the_page_hosted_by_a_tab/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/modifying_the_page_hosted_by_a_tab/index.html new file mode 100644 index 0000000000..6b8f02c265 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/modifying_the_page_hosted_by_a_tab/index.html @@ -0,0 +1,137 @@ +--- +title: Modificando a Página Aberta em uma Tab +slug: Mozilla/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab +tags: + - Add-on SDK +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab +--- +<div class="note"> +<p>Para seguir este tutorial, você precisará ter <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation">instalado add-on SDK</a> e ter conhecimento <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_(jpm)">básico jpm</a> (Firefox 38 em diante) ou <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">básico do cfx</a> .</p> + +<p>Este tutorial usa a API <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a>, que está disponível a partir do Firefox 29 em diante.</p> +</div> + +<p>Para modificar uma página armazenada em uma tab em particular, carregue um ou mais <em>scripts de conteúdo</em> dentro dela usando o método attach() do objeto <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs">tab</a>. A tarefa desses scripts é interagir com o conteúdo web.</p> + +<p>Aqui está um exemplo simples:</p> + +<pre class="brush: js">var button = require("sdk/ui/button/action").ActionButton({ + id: "style-tab", + label: "Style Tab", + icon: "./icon-16.png", + onClick: function() { + require("sdk/tabs").activeTab.attach({ + contentScript: 'document.body.style.border = "5px solid red";' + }); + } +});</pre> + +<p>Execute esse exemplo, salve o ícone chamado "icon-16.png" no diretório "data" do add-on. Você To run this example, save an icon file named "icon-16.png" in add-on's "data" directory. Você pode baixar este ícone: <img alt="" src="https://mdn.mozillademos.org/files/7661/icon-16.png" style="height: 16px; width: 16px;">.</p> + +<p>This add-on creates a button with Mozilla favicon as an icon. It has a click handler which fetches the active tab and loads a script into the page hosted by the active tab. The script is specified using the <code>contentScript</code> option, and just draws a red border around the page.</p> + +<p>Then open any web page in the browser window, and click the button . You should see a red border appear around the page, like this:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/6531/tabattach-bbc.png" style="display: block; margin-left: auto; margin-right: auto;"></p> + +<h2 id="Mantendo_o_script_de_conteúdo_em_arquivo_separado">Mantendo o script de conteúdo em arquivo separado</h2> + +<p>No exemplo acima, nós passamos o script de conteúdo como uma string.</p> + +<p>A menos que o script seja extremamente simples, o melhor é manter o script em um arquivo separado no diretório <code>data</code> do add-on. Isso deixa o código mais fácil para manter, depurar, e revisar. Faça isto, forneça a opção <code>contentScriptFile</code> não <code>contentScript</code>, cujo valor é uma URL apontando para um ou mais arquivos de script de conteúdo.</p> + +<p>Por exemplo, se nós salvarmos o script acima no diretório data do add-on em um arquivo chamado my-script.js:</p> + +<pre class="brush: js">var self = require("sdk/self"); + +var button = require("sdk/ui/button/action").ActionButton({ + id: "style-tab", + label: "Style Tab", + icon: "./icon-16.png", + onClick: function() { + require("sdk/tabs").activeTab.attach({ + contentScriptFile: self.data.url("my-script.js") + }); + } +}); +</pre> + +<p>Você pode carregar mais de um script, e os scripts podem interagir diretamente um com o outro. Então você pode carregar o <a href="http://jquery.com/">jQuery</a>, e então seu script de conteúdo pode usá-lo.</p> + +<h2 id="Carregue_vários_arquivos_de_script_de_conteúdo">Carregue vários arquivos de script de conteúdo</h2> + +<p>O dado atribuído ao <code>contentScriptFile</code> pode ser um array. Os scripts serão carregados na mesma ordem em que estiverem no array.</p> + +<p>No exemplo a seguir, nós carregaremos dois scripts, <code>first.js</code> & <code>second.js</code>. Ambos serão executados no mesmo contexto, então tudo publicamente definido no <code>first.js</code> será acessível do <code>second.js</code>.</p> + +<pre class="brush: js">// lib/main.js + +var self = require("sdk/self"); +var tabs = require("sdk/tabs"); + +require("sdk/ui/button/action").ActionButton({ + id: "load-several", + label: "load several scripts", + icon: "./icon-16.png", + onClick: function () { + tabs.activeTab.attach({ + contentScriptFile: [self.data.url('first.js'), + self.data.url('second.js')] + }); + } +}); +</pre> + +<h2 id="Comunicando_com_o_script_de_conteúdo">Comunicando com o script de conteúdo</h2> + +<p>O script do seu add-on e os scripts de conteúdo não podem acessar diretamente as variáveis ou funções um do outro, mas eles podem trocar mensagens.</p> + +<p>Para enviar mensagens de um lado para o outro, são usados o emitente de chamadas <code>port.emit()</code> e o recebendor <code>port.on()</code>.</p> + +<ul> + <li>No script de conteúdo, <code>port</code> é uma propriedade global do objeto <code>self</code>.</li> + <li>No script do add-on, <code>tab.attach()</code> retorna um objeto <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker">worker</a> contendo a propriedade <code>port</code> que você usa para enviar mensagens ao script de conteúdo.</li> +</ul> + +<p>Vamos reescrever o exemplo acima para passar mensagens de um add-on para o script de conteúdo.</p> + +<p>O script de conteúdo agora precisa parecer com isto:</p> + +<pre class="brush: js">// "self" é um objeto global no script de conteúdo +// Espera por um "drawBorder" +self.port.on("drawBorder", function(color) { + document.body.style.border = "5px solid " + color; +}); +</pre> + +<p>No script do add-on, nós enviaremos ao script de conteúdo uma mensagem "drawBorder" usando o objeto retornado de <code>attach()</code>:</p> + +<pre class="brush: js">var self = require("sdk/self"); +var tabs = require("sdk/tabs"); + +var button = require("sdk/ui/button/action").ActionButton({ + id: "style-tab", + label: "Style Tab", + icon: "./icon-16.png", + onClick: function() { + var worker = tabs.activeTab.attach({ + contentScriptFile: self.data.url("my-script.js") + }); + worker.port.emit("drawBorder", "red"); + } +}); +</pre> + +<p>A mensagem <code>drawBorder</code> não é uma mensagem embutida, é uma que este add-on definiu na chamada de <code>port.emit()</code>.</p> + +<h2 id="Injetando_CSS">Injetando CSS</h2> + +<p>Diferente da API <a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod"><code>page-mod</code></a>, <code>tab.attach()</code> não permite a você injetar CSS diretamente na página.</p> + +<p>Para modificar o estilo de uma página, você tem que usar JavaScript, como no exemplo acima.</p> + +<h2 id="Aprendendo_Mais">Aprendendo Mais</h2> + +<p>Para aprender mais sobre como trabalhar com tabs no SDK, veja o tutorial <a href="/en-US/Add-ons/SDK/Tutorials/Open_a_Web_Page">Abrindo uma Página da Web</a>, O tutorial <a href="/en-US/Add-ons/SDK/Tutorials/List_Open_Tabs">Lista de Tabs Abertas</a>, e a referência da API <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs"><code>tabs</code></a>.</p> + +<p>Para aprender mais sobre scripts de conteúdo, veja o guia de <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">scripts de conteúdo</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/modifying_web_pages_based_on_url/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/modifying_web_pages_based_on_url/index.html new file mode 100644 index 0000000000..4e846d75c7 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/modifying_web_pages_based_on_url/index.html @@ -0,0 +1,228 @@ +--- +title: Modificando Página Web Baseado na URL +slug: Mozilla/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL +tags: + - Add-on SDK + - content scripts +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Modifying_Web_Pages_Based_on_URL +--- +<div class="note">Para seguir este tutorial, você precisará <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation">instalar o SDK</a> e ter conhecimento <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_(jpm)">básico de jpm</a> (Firefox 38 em diante) ou <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">básico de cfx</a>.</div> + +<p>Para modificar qualquer página que combine com um padrão particular (por exemplo, "http://example.org/") a medida que elas são carregadas, use o módulo <a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod"><code>page-mod</code></a>.</p> + +<p>Para criar um page-mod, você precisa de duas coisas:</p> + +<ul> + <li>Um ou mais <em>content scripts</em>(script de conteúdo) para executar cuja tarefa é interagir com o conteúdo web.</li> + <li>Um ou mais <em>patterns(padrões)</em> para combinar com URLs que você quer modificar.</li> +</ul> + +<p>Um trecho simples de códingo onde o script de conteúdo é fornecido com a opção <code>contentScript</code> e o padrão de busca da URL é dado pela opção <code>include</code> como a seguir:</p> + +<pre class="brush: js">// Importe a API page-mod +var pageMod = require("sdk/page-mod"); + +// Crie um page-mod +// Ele executará um script toda vez que uma URL ".org" é carregada +// O script substitui o conteúdo da página por uma mensagem +pageMod.PageMod({ + include: "*.org", + contentScript: 'document.body.innerHTML = ' + + ' "<h1>Page matches ruleset</h1>";' +}); +</pre> + +<p>Faça o seguinte:</p> + +<ul> + <li>Crie um novo diretório navegue para ele.</li> + <li>Execute <code>jpm init </code>ou <code>cfx init</code></li> + <li><code>Abra o arquivo index.js</code> e adicione o código acima (<code>lib/main.js se estiver usando</code> <code>cfx</code>)</li> + <li>Execute <code>jpm run </code>ou<code> cfx run</code>.</li> + <li>Abra no navegador o site <a href="http://www.ietf.org">ietf.org</a>.</li> +</ul> + +<p>Abaixo é o que você deve ver.</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/6537/pagemod-ietf.png" style="display: block; margin-left: auto; margin-right: auto;"></p> + +<h2 id="Especificando_o_Padão_a_Combinar">Especificando o Padão a Combinar</h2> + +<p>O padrão de combinação usa a síntaxe <a href="/en-US/Add-ons/SDK/Low-Level_APIs/util_match-pattern"><code>match-pattern</code></a>. Você pode passar uma única string como padrão a combinar ou um array.</p> + +<h2 id="Mantendo_o_Conteúdo_do_Script_em_um_Arquivo_Separado">Mantendo o Conteúdo do Script em um Arquivo Separado</h2> + +<p>No exemplo acima, nós fornecemos o script de conteúdo como uma string.</p> + +<p>A menos que o script seja extremamente simples, é melhor manter o script em um arquivo separado. Isso torna o código mais fácil para manter, depurar, e revisar. Para fazer isso, você precisa:</p> + +<ul> + <li>Salvar o script no diretório "<code>data</code>" do add-on.</li> + <li>Use a opção <code>contentScriptFile</code> ao invés de <code>contentScript</code> e passe para ela a URL do script que pode ser obtida usando <code>self.data.url("my-script.js")</code>. A partir do Firefox 34, você pode usar <code>"./my-script.js"</code>.</li> +</ul> + +<p>Por exemplo, se você salvar o script acima no diretório data do add-on em um arquivo chamado <code>my-script.js</code>:</p> + +<pre class="brush: js">// Importe a API page-mod +var pageMod = require("sdk/page-mod"); +// Importe a API self +var self = require("sdk/self"); + +// Crie um page-mod +// Ele executará um script toda vez que uma URL ".org" é carregada +// O script substitui o conteúdo da página por uma mensagem +pageMod.PageMod({ + include: "*.org", + contentScriptFile: self.data.url("my-script.js") +});</pre> + +<p>Ou a partir do Firefox 34:</p> + +<pre class="brush: js">// Importe a API page-mod +var pageMod = require("sdk/page-mod"); + +// Crie um page-mod +// Ele executará um script toda vez que uma URL ".org" é carregada +// O script substitui o conteúdo da página por uma mensagem +pageMod.PageMod({ + include: "*.org", + contentScriptFile: "./my-script.js" +});</pre> + +<h2 id="Carregando_Múltiplos_Scripts_de_Conteúdo">Carregando Múltiplos Scripts de Conteúdo</h2> + +<p>Você pode carregar mais do que um script, e eles podem interagir um com o outro.</p> + +<p>Por exmeplo, você poderia reescrever o <code>my-script.js</code> para usar o jQuery.</p> + +<pre class="brush: js">$("body").html("<h1>Page matches ruleset</h1>"); +</pre> + +<p>Então baixe o jQuery para o diretório <code>data</code> do add-on, e carregue o script e o jQuery juntos (tenha certeza de carregar o jQuery primeiro).</p> + +<pre class="brush: js">// Importe a API page-mod +var pageMod = require("sdk/page-mod"); +// Importe a API self +var self = require("sdk/self"); + +// Crie um page-mod +// Ele executará um script toda vez que uma URL ".org" é carregada +// O script substitui o conteúdo da página por uma mensagem +pageMod.PageMod({ + include: "*.org", + contentScriptFile: [self.data.url("jquery-1.7.min.js"), self.data.url("my-script.js")] +}); +</pre> + +<p>Você pode usar ambos <code>contentScript</code> e <code>contentScriptFile</code> no mesmo page-mod. Se você fizer isto, o script carregado usando <code>contentScriptFile</code> são carregados primeiro.</p> + +<pre class="brush: js">// Importe a API page-mod +var pageMod = require("sdk/page-mod"); +// Importe a API self +var self = require("sdk/self"); + +// Crie um page-mod +// Ele executará um script toda vez que uma URL ".org" é carregada +// O script substitui o conteúdo da página por uma mensagem +pageMod.PageMod({ + include: "*.org", + contentScriptFile: self.data.url("jquery-1.7.min.js"), + contentScript: '$("body").html("<h1>Page matches ruleset</h1>");' +}); +</pre> + +<p>Note, porém, que você não pode carregar um script de um site web. O script deve ser carregado do <code>data</code>.</p> + +<h2 id="Comunicando_com_o_Script_de_Conteúdo">Comunicando com o Script de Conteúdo</h2> + +<p>Seu script do add-on e o script de conteúdo não podem acessar diretamente a variável de um ou outro ou chamar função dos outros, mas eles podem enviar mensagens um para o outro.</p> + +<p>Para enviar mensagens de um lado para o outro, use o emitente de chamadas <code>port.emit()</code> e receba respostas usando <code>port.on()</code>.</p> + +<ul> + <li>No script de conteúdo, <code>port</code> é uma propriedade do objeto global <code>self</code>.</li> + <li>No script do add-on, você precisa capturar evento no <code>onAttach</code> event passando um objeto <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker">worker</a> que contém a <code>port</code>.</li> +</ul> + +<p>Vamos reescrever o exemplo acima para passar uma mensagem do add-on para o script de conteúdo. A mensagem conterá o novo conteúdo para inserir dentro do documento</p> + +<p>O script de conteúdo agora precisa parecer com isto:</p> + +<pre class="brush: js">// "self" é um objeto global no script de conteúdo +// Espera pelas mensagens, e substitui o conteúdo do +// documento com a mensagem recebida +self.port.on("replacePage", function(message) { + document.body.innerHTML = "<h1>" + message + "</h1>"; +}); +</pre> + +<p>No script do add-on, nós enviaremos ao script de conteúdo uma mensagem dentro do <code>onAttach</code>.</p> + +<pre class="brush: js">// Importe a API page-mod +var pageMod = require("sdk/page-mod"); +// Importe a API self +var self = require("sdk/self"); + +// Crie um page-mod +// Ele executará um script toda vez que uma URL ".org" é carregada +// O script substitui o conteúdo da página por uma mensagem +pageMod.PageMod({ + include: "*.org", + contentScriptFile: self.data.url("my-script.js"), + // Envia ao script de conteúdo uma mensagem dentro de onAttach + onAttach: function(worker) { + worker.port.emit("replacePage", "Page matches ruleset"); + } +}); +</pre> + +<p>A mensagem <code>replacePage</code> não é uma mensagem embutida: é uma mensagem definida pelo add-on na chamada do <code>port.emit()</code>.</p> + +<div> +<h2 id="Injetando_CSS">Injetando CSS</h2> + +<p><strong>Note que a característica descrita nesta seção é experimental no momento. Nós devemos provavelmente continuar suportando essa característica, mas os detalhes da API devem mudar.</strong></p> + +<p>Em vez de injetar JavaScript na página, você pode injetar CSS definindo a opção do <code>contentStyle</code> do mod-page.</p> + +<pre class="brush: js">var pageMod = require("sdk/page-mod").PageMod({ + include: "*", + contentStyle: "body {" + + " border: 5px solid green;" + + "}" +}); +</pre> + +<p>Como com o <code>contentScript</code>, há uma opção correspondente para <code>contentStyleFile</code> que leva uma URL de um arquivo CSS situado no diretório "data"; é uma boa prática usar essa opção ao invés de <code>contentStyle</code> se o CSS é muito complexo.</p> + +<pre class="brush: js">var pageMod = require("sdk/page-mod").PageMod({ + include: "*", + contentStyleFile: require("sdk/self").data.url("my-style.css") +}); +</pre> + +<p>Ou, a partir do Firefox 34, você pode usar a versão mais simples:</p> + +<pre class="brush: js">var pageMod = require("sdk/page-mod").PageMod({ + include: "*", + contentStyleFile: "./my-style.css" +});</pre> +</div> + +<h2 id="Aprendendo_mais">Aprendendo mais</h2> + +<p>Para aprender mais sobre o <code>page-mod</code>, veja a referência da API<a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod"> page</a>. Em particular, o construtor <code>PageMod</code> leva várias opções adicionais para controlar seu comportamento:</p> + +<ul> + <li> + <p>Por padrão, script de conteúdo não são anexados a qualuqer tab que já esteja aberta quando o page-mod é criado, e são anexados à iframes bem como documentos superiores. Para controlar esse comportamento use a opção <code>attachTo</code>.</p> + </li> + <li> + <p>Defina valores somente leitura acessíveis ao script de conteúdo usando a opção<code> contentScriptOptions</code>.</p> + </li> + <li> + <p>Por padrão, o script de conteúdo são anexados depois de todo o (DOM, JS, CSS, imagens) para a página ter sido carregado, no momento o evento <a href="/en-US/docs/Web/API/GlobalEventHandlers.onload">window.onload</a> dispara. Para controlar esse comportamento, use a opção <code>contentScriptWhen</code>.</p> + </li> +</ul> + +<p>Para aprender mais sobre o script de conteúdo,, veja o guia <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">content scripts</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/mostrar_um_popup/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/mostrar_um_popup/index.html new file mode 100644 index 0000000000..b66c9fb06a --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/mostrar_um_popup/index.html @@ -0,0 +1,165 @@ +--- +title: Mostrar um Popup +slug: Mozilla/Add-ons/SDK/Tutorials/Mostrar_um_Popup +tags: + - Add-on SDK + - Painel +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Display_a_Popup +--- +<div class="note"> +<p>Para seguir este tutorial você precisará ter <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Installation">instalado o SDK</a> e ter conhecimento <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Getting_Started_With_cfx">básico sobre cfx</a>.</p> + +<p>Este tutorial usa a API <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a>, que está disponível somente do Firefox 29 em diante.</p> +</div> + +<p>Para mostrar um popup de diálogo, use o módulo <a href="/en-US/Add-ons/SDK/High-Level_APIs/panel"><code>panel</code></a>. Um painel de conteúdo é definido usando HTML. Você pode executar scripts no painel: embora o script em execução no painel não pode acessar diretamente o código de seu add-on, você pode trocar mensagens entre o script do painel e o código do add-on.</p> + +<p>Neste tutorial nós criaremos um add-on que adiciona um <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button </a>à barra de ferramentas que mostra um painel quando clicado. O painel contém apenas um elemento <code><textarea>:</code>quando o usuário aperta a tecla <code>return</code>, o conteúdo da <code><textarea> </code>é enviado ao código principal do add-on. O código principal do add-on <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Logging">repassa a mensagem ao console</a>. </p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/7647/panel.png" style="display: block; margin-left: auto; margin-right: auto;">O add-on consiste em seis arquivos:</p> + +<ul> + <li><code>main.js</code>: o código principal do addon, que cria o botão e o painel</li> + <li><code>get-text.js</code>: o conteúdo do script que interage com o conteúdo do painel</li> + <li><code>text-entry.html</code>: o conteúdo do painel em si, especificado como HTML</li> + <li><code>icon-16.png</code>, <code>icon-32.png</code>, and <code>icon-64.png</code>: ícone para o botão em três tamanhos diferentes</li> +</ul> + +<p>O "main.js" se parece com isso:</p> + +<pre class="brush: js">var data = require("sdk/self").data; +// Constrói um painel, carrega seu conteúdo do arquivo +// "text-entry.html" no diretório "data", e carrega o script "get-text.js" +// para ele. +var text_entry = require("sdk/panel").Panel({ + contentURL: data.url("text-entry.html"), + contentScriptFile: data.url("get-text.js") +}); + +// Cria um botão +require("sdk/ui/button/action").ActionButton({ + id: "show-panel", + label: "Show Panel", + icon: { + "16": "./icon-16.png", + "32": "./icon-32.png", + "64": "./icon-64.png" + }, + onClick: handleClick +}); + +//Mostra o painel quando o usuário clica no botão +function handleClick(state) { + text_entry.show(); +} + +//Quando o painel é mostrado ele gera um evento chamado +//"show": nós esperaremos por este evento e quando ele ocorrer +//enviamos nosso próprio evento "show" para o script do painel, +//então o script pode preparar o painel para mostrar. +text_entry.on("show", function() { + text_entry.port.emit("show"); +}); + +//Espera pela mensagem chamada "text-entered" vinda do +//script do conteúdo. A carga útil da mensagem é o texto +//digitado pelo usuário. +//Nesta implementação nós passaremos o texto para o console. +text_entry.port.on("text-entered", function (text) { + console.log(text); + text_entry.hide(); +});</pre> + +<p>O conteúdo do script "get-text.js" parece com isto:</p> + +<div> +<pre class="brush: js">//Quando o usuário digita return, envia a mensagem "text-entered" +// para o main.js. +//A carga útil da mensagem é o conteúdo da caixa de edição. +var textArea = document.getElementById("edit-box"); +textArea.addEventListener('keyup', function onkeyup(event) { + if (event.keyCode == 13) { + // Remove a nova linha. + text = textArea.value.replace(/(\r\n|\n|\r)/gm,""); + self.port.emit("text-entered", text); + textArea.value = ''; + } +}, false); +//Espera pelo evento "show" vim do +//código principal do add-on. O que significa que o +//painel sobre será mostrado. +// +//Configura o foco para a área de texto então o usuário pode +//começar a digitar. +self.port.on("show", function onShow() { + textArea.focus(); +});</pre> + +<div> </div> +</div> + +<p>Finalmente, o arquivo "text-entry.html" define o elemento <code><textarea></code>:</p> + +<div> +<div> +<pre class="brush: html"><html> +<head> + <style type="text/css" media="all"> + textarea { + margin: 10px; + } + body { + background-color: gray; + } + </style> + </head> +<body> + <textarea rows="13" cols="33" id="edit-box"></textarea> + </body> +</html></pre> + +<div> </div> +</div> +</div> + +<p>Finalmente, salve estes três ícones no diretório "data":</p> + +<table class="standard-table"> + <tbody> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7635/icon-16.png" style="height: 16px; width: 16px;"></td> + <td>icon-16.png</td> + </tr> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7637/icon-32.png" style="height: 32px; width: 32px;"></td> + <td>icon-32.png</td> + </tr> + <tr> + <td><img alt="" src="https://mdn.mozillademos.org/files/7639/icon-64.png" style="height: 64px; width: 64px;"></td> + <td>icon-64.png</td> + </tr> + </tbody> +</table> + +<p>Teste: o "main.js" está salveo no diretório <code>lib</code> do add-on, e os outros cinco arquivos vão no diretório data do add-on:</p> + +<pre>my-addon/ + data/ + get-text.js + icon-16.png + icon-32.png + icon-64.png + text-entry.html + lib/ + main.js +</pre> + +<p>Execute o add-on, clique no botão, e você deverá ver o painel. Digite algum texto e pressione "return" e você deverá ver a saída no console.</p> + +<p>Do Firefox 30 em diante, se você usar o <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">toggle button</a>, você pode <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle#Attaching_panels_to_buttons">anexar o painel ao botão</a>.</p> + +<h2 id="Aprendendo_Mais">Aprendendo Mais</h2> + +<p>Para aprender mais sobre o módulo <code>panel</code>, veja a referência da API <a href="/en-US/Add-ons/SDK/High-Level_APIs/panel"><code>panel</code></a>.</p> + +<p>Para aprender mais sobre buttons, veja referência da API <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> e <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">toggle button</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing/index.html new file mode 100644 index 0000000000..2e65659ed5 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing/index.html @@ -0,0 +1,127 @@ +--- +title: Teste de unidade +slug: Mozilla/Add-ons/SDK/Tutorials/Unit_testing +tags: + - Add-on SDK + - JPM +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Unit_testing +--- +<div class="note"> +<p><span>Para seguir este tutorial você precisará ter conhecimento básico de<a href="/en-US/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29"> <code>jpm</code></a> e ter seguido o tutorial de <a href="/en-US/Add-ons/SDK/Tutorials/Using_third-party_modules_(jpm)">criação de módulos reutilizáveis</a>.</span></p> +</div> + +<div class="note"> +<p>Se você está migrando código de teste do cfx para o <a href="/en-US/Add-ons/SDK/Tools/jpm">jpm</a>, veja o guia de migração do cfx, em particular a seção <a href="/en-US/Add-ons/SDK/Tools/cfx_to_jpm#Requiring_modules_from_test_code">loading modules from test code</a>.</p> +</div> + +<p>O SDK fornece um framework para ajudar a criar e executar testes de unidade para seu código. Para demonstrar como ele funciona nós escreveremos um teste de unidade para um módulo simples de codificação <a href="http://en.wikipedia.org/wiki/Base64">Base64</a>.</p> + +<h2 id="Um_módulo_simples_Base64">Um módulo simples Base64</h2> + +<p>Em uma página web, você pode executar uma codificação Base64 e decodificação usando as funções <code>btoa()</code> e <code>atob()</code>. Infelizmente essas funções pertencem ao objeto <code>window</code>: uma vez que o objeto não está disponível no código principal do add-on, <code>atob()</code> e <code>btoa()</code> não estão disponíveis de qualquer forma. Então nós criaremos um módulo <code>base64</code> para exibir estas funções da plataforma.</p> + +<p>Para começar, crie um novo diretório, navegue para ele, e execute o <code>jpm init</code>. Agora crie um novo arquivo chamado "base64.js", e de lhe o seguinte conteúdo:</p> + +<pre class="brush: js">const { atob, btoa } = require("chrome").Cu.import("resource://gre/modules/Services.jsm", {}); + +exports.atob = a => atob(a); +exports.btoa = b => btoa(b); +</pre> + +<p>Este código exporta duas funções, que chamamos <code>btoa()</code> and <code>atob()</code>. Para mostrar o módulo em uso, edit o arquivo "index.js" como segue:</p> + +<pre class="brush: js">var base64 = require("./base64"); + +var button = require("sdk/ui/button/action").ActionButton({ + id: "base64", + label: "base64", + icon: "./icon-16.png", + onClick: function() { + encoded = base64.btoa("hello"); + console.log(encoded); + decoded = base64.atob(encoded); + console.log(decoded); + } +});</pre> + +<p>Para executar esse exemplo você também terá que ter um ícone chamado "icon-16.png" salvo no diretório data do add-on. Você pode baixar este ícone: <img alt="" src="https://mdn.mozillademos.org/files/7661/icon-16.png" style="height: 16px; width: 16px;">.</p> + +<p>Agora o "index.js" importa o módulo base64 e chama suas duas funções exportadas. Se nós executarmos o add-on e clicarmos no botão, nós devemos ver a seguinte saída:</p> + +<pre>info: aGVsbG8= +info: hello +</pre> + +<h2 id="Testando_o_módulo_Base64">Testando o módulo Base64</h2> + +<p>Navegue para o diretório <code>test</code> e delete o arquivo <code>test-index.js</code>. Em seu lugar crie um arquivo chamado <code>test-base64.js</code> com o seguinte conteúdo:</p> + +<pre class="brush: js">var base64 = require("../base64"); + +exports["test atob"] = function(assert) { + assert.ok(base64.atob("aGVsbG8=") == "hello", "atob works"); +} + +exports["test btoa"] = function(assert) { + assert.ok(base64.btoa("hello") == "aGVsbG8=", "btoa works"); +} + +exports["test empty string"] = function(assert) { + assert.throws(function() { + base64.atob(); + }, + "empty string check works"); +} + +require("sdk/test").run(exports); +</pre> + +<div class="note"> +<p>Note que com o jpm nós devemos dar o caminho exato do módulo base64.js.</p> +</div> + +<p>Esse arquivo: exporta três funções, cada qual espera receber um único argumento que é o objeto <code>assert</code>. <code>assert</code> é fornecida pelo módulo <a href="/en-US/Add-ons/SDK/Low-Level_APIs/test_assert"><code>test/assert</code></a> e implementa o <a href="http://wiki.commonjs.org/wiki/Unit_Testing/1.1">CommonJS Unit Testing specification</a>.</p> + +<ul> + <li> + <p>As duas primeiras funções chamam <code>atob()</code> e <code>btoa()</code> e usa o <a href="/en-US/Add-ons/SDK/Low-Level_APIs/test_assert#ok(guard.2C_message)"><code>assert.ok()</code></a> para checar que a saída é a esperada</p> + </li> + <li> + <p>A segunda função testo código de manipulação de erro do módulo passando uma string vazia para o <code>atob()</code> e usando <a href="/en-US/Add-ons/SDK/Low-Level_APIs/test_assert#throws(block.2C_error.2C_message)"><code>assert.throws()</code></a> para checar que a exceção esperada foi lançada.</p> + </li> +</ul> + +<p>Neste ponto seu add-on deve parecer com isto:</p> + +<pre> /base64 + /data + icon-16.png + package.json + README.md + index.js + base64.js + /test + test-base64.js +</pre> + +<p>Agora execute o <code>jpm --verbose test</code> da pasta principal do add-on. Você deve ver algo como isto:</p> + +<pre>console.info: jpm-utest: executing './test/test-base64.test atob' +console.info: jpm-utest: pass: atob works +console.info: jpm-utest: executing './test/test-base64.test btoa' +console.info: jpm-utest: pass: btoa works +console.info: jpm-utest: executing './test/test-base64.test empty string' +console.info: jpm-utest: pass: empty string check works + +3 of 3 tests passed. +All tests passed!</pre> + +<p>O que aconteceu aqui é que o <code>jpm test</code>:</p> + +<ul> + <li>procura no diretório <code>test</code> o seu pacote</li> + <li>carrega qualquer módulo cujo nome começa com a palavra <code>test- </code>(Note o hífen depois de<span> "test" no nome do módulo. <code>jpm test</code> incluirá um módulo chamado "test-myCode.js", mas excluirá módulos chamados "test_myCode.js" ou "testMyCode.js".)</span></li> + <li>chama cada função exportada cujo nome começa com "test", passando um objeto <a href="/en-US/Add-ons/SDK/Low-Level_APIs/test_assert#Assert"><code>assert</code></a> como seu único argumento.</li> +</ul> + +<p>Obviamente, você não tem que passar a opção<code> --verbose</code> para o jpm se você não quiser; fazendo assim torna a saída mais fácil de ler.</p> diff --git a/files/pt-br/mozilla/add-ons/temas/background/index.html b/files/pt-br/mozilla/add-ons/temas/background/index.html new file mode 100644 index 0000000000..856e419f31 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/temas/background/index.html @@ -0,0 +1,110 @@ +--- +title: Temas de fundo +slug: Mozilla/Add-ons/Temas/Background +tags: + - Aparência do Firefox + - Complementos + - Firefox + - Personalização + - Tema +translation_of: Mozilla/Add-ons/Themes/Lightweight_themes +--- +<h2 id="Como_criar_o_seu_próprio_tema">Como criar o seu próprio tema</h2> + +<div class="primary auto" id="getting-started"> +<p>Os temas são feitos de arquivos gráficos de imagens, para o cabeçalho, semelhantes ao utilizado como aparência padrão de fundo do Firefox UI.</p> + +<p>Acabou seu projeto? Você pode <a href="https://addons.mozilla.org/pt-BR/developers/theme/submit">enviá-lo agora mesmo!</a></p> + +<h3 id="Criando_um_tema_Imagem_de_Cabeçalho">Criando um tema: Imagem de Cabeçalho</h3> + +<p>A imagem do cabeçalho é mostrada no topo da janela do navegador, aninhada atrás da barra de ferramentas, barra de endereço, barra de pesquisa e barra de abas. Ela é <strong>ancorada no canto superior direito</strong> da janela do navegador.</p> + +<p class="screenshot"><img alt="" src="https://mdn.mozillademos.org/files/9929/header-step.jpg" style="height: 215px; width: 1059px;"></p> + +<ul> + <li><a href="https://addons.cdn.mozilla.net/static/img/docs/themes/header.jpg">Veja um exemplo de tema de cabeçalho aqui.</a></li> +</ul> + +<h4 id="Requisitos_de_Imagem">Requisitos de Imagem</h4> + +<ul> + <li>As dimensões devem ser <strong>3000px de largura </strong>x<strong> 200px de altura</strong></li> + <li>Nos formatos de arquivo PNG ou JPG</li> + <li>A imagem não deve ter tamanho maior que 300KB</li> +</ul> + +<h4 id="Dicas">Dicas</h4> + +<ul> + <li>Imagens sutis, de baixo contraste e gradientes funcionam melhor; imagens altamente detalhadas podem competir com a UI do navegador.</li> + <li>O Firefox pode revelar mais da parte inferior da imagem, se outra barra de ferramentas ou elemento da UI for adicionado ao topo da janela.</li> + <li>O lado superior direito da imagem (na tela) deve ter a informação mais importante — à medida que a largura da janela é ampliada, o navegador revela mais do lado esquerdo da imagem.</li> +</ul> + +<h4 id="Recursos_de_Editores_de_Imagem_Em_Linha">Recursos de Editores de Imagem Em Linha</h4> + +<ul> + <li><a href="http://www.pixlr.com">Pixlr</a> — Este aplicativo oferece ferramentas profissionais e fáceis de usar, para criação e edição de imagens com o navegador.</li> + <li><a href="http://www.photoshop.com">Photoshop</a> — Ajuste, gire e retoque fotos com o Photoshop® Express, um editor de fotos <em>online</em> e gratuito.</li> +</ul> + +<h3 id="Criando_um_tema_Imagem_de_Rodapé">Criando um tema: Imagem de Rodapé</h3> + +<p>Em versões antigas do Firefox, ou em versões recentes com certas extensões instaladas, a imagem de rodapé é mostrada como o fundo da parte inferior da janela do navegador, atrás de extensões e barras de pesquisa. Ela é ancorada no canto inferior esquerdo da janela do navegador. Imagens de rodapé são opcionais.</p> + +<p class="screenshot"><img alt="" src="https://mdn.mozillademos.org/files/9935/footer-step.jpg" style="height: 56px; width: 1249px;"></p> + +<ul> + <li><a href="https://addons.cdn.mozilla.net/static/img/docs/themes/footer.jpg">Veja um exemplo de tema de rodapé aqui.</a></li> +</ul> + +<h4 id="Requisitos_de_Imagem_2">Requisitos de Imagem</h4> + +<ul> + <li>As dimensões devem ser <strong>3000px de largura x 100px de altura</strong></li> + <li>Nos formatos de arquivo PNG, ou JPG</li> + <li>A imagem não deve ter tamanho maior que 300KB</li> +</ul> + +<h4 id="Dicas_2">Dicas</h4> + +<ul> + <li>Imagens sutis, de baixo contraste e gradientes funcionam melhor; imagens altamente detalhadas competem com a UI do navegador.</li> + <li>O Firefox pode revelar mais da porção superior da imagem, se a barra de pesquisa está aberta, ou se uma extensão adiciona mais altura à parte inferior da janela.</li> + <li>O lado esquerdo da imagem deve ter a informação mais importante — à medida que a largura da janela for ampliada, o navegador revela mais do lado direito da imagem.</li> +</ul> + +<h3 id="Submentendo_as_Imagens_de_seus_Temas">Submentendo as Imagens de seus Temas</h3> + +<p>Para enviar suas imagens, vá para a página de <a href="https://addons.mozilla.org/developers/theme/submit">Submissão de Temas</a>:</p> + +<ol class="itemized"> + <li><strong>Nomeie seu tema</strong> — aplique um nome único ao seu tema. Nomes duplos não são permitidos, então, talvez, você precise tentar algumas vezes, até encontrar um nome único disponível.</li> + <li><strong>Escolha uma categoria e as etiquetas</strong> — selecione uma categoria e insira algumas etiquetas para melhor descrever o seu tema. Tenha em mente que o revisor poderá rejeitá-lo se, obviamente, a categoria e/ou etiquetas não estiverem relacionadas a ele corretamente.</li> + <li><strong>Descreva o seu tema</strong> — escreva uma descrição curta do seu tema. Tenha em mente que o revisor poderá rejeitá-lo, se essa descrição não for uma representação exata dele.</li> + <li><strong>Selecione uma licença para seu tema</strong> — decida sobre uma licença de direitos autorais para seu trabalho. <a href="http://creativecommons.org/licenses/">Leia mais sobre os tipos de licenças Creative Commons.</a> + <ul> + <li><strong>Importante:</strong> Por favor, certifique-se que você tem o direito de usar a imagem em seu tema!</li> + </ul> + </li> + <li><strong>Envie suas imagems</strong> — certifique-se que elas têm menos de 300KB de tamanho e estão no formato JPG, ou PNG!</li> + <li><strong>Seleciona a cor do texto e abas</strong> — você pode escolher a cor ("de fundo") da aba e a cor do texto que melhor combinam com sua imagem de cabeçalho.</li> + <li><strong>Visualize seu tema</strong> — tudo pronto para você experimentar o seu tema! Simplesmente passe o cursor sobre a imagem acima do botão "Enviar tema" e veja como ele fica, instantaneamente: )</li> + <li><strong>Envie seu tema</strong> — se tudo parece certo, clique no botão Enviar tema e pronto! Você pode ver todos os temas que escreveu na sua página de perfil. + <ul> + <li><strong>Dica:</strong> para garantir que o seu tema será aprovado para a galeria, certifique-se que ele está em conformidade com as diretrizes de conteúdo e termos de serviço!</li> + </ul> + </li> +</ol> + +<p class="screenshot"><img alt="" src="https://mdn.mozillademos.org/files/9933/submission-step.jpg" style="height: 1800px; width: 785px;"></p> + +<p class="call-to-submit"><a class="button prominent" href="https://addons.mozilla.org/en-US/developers/theme/submit">ENVIE SEu TemA AGORA</a></p> + +<p class="call-to-submit"> </p> + +<h2 class="call-to-submit" id="Mais_Tutoriais">Mais Tutoriais</h2> + +<p><a href="http://vanillaorchidstutorials.blogspot.com/2015/11/mozilla-themes-focal-point-sizing.html">Mozilla Themes Focal Point on Sizing</a> - Um tutorial sobre os temas, com foco em dimensões, por VanillaOrchids.</p> +</div> diff --git a/files/pt-br/mozilla/add-ons/temas/index.html b/files/pt-br/mozilla/add-ons/temas/index.html new file mode 100644 index 0000000000..7f38f0f3e4 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/temas/index.html @@ -0,0 +1,55 @@ +--- +title: Temas +slug: Mozilla/Add-ons/Temas +tags: + - Add-ons + - Aparência & Comportamento + - Complementos + - Mozilla-Firefox + - Temas +translation_of: Mozilla/Add-ons/Themes +--- +<p>Os temas são as capas, ou coberturas, dos diferentes aplicativos Mozilla. Eles permitem que se altere a aparência da interface de acordo com o seu gosto. Um tema pode, simplesmente, mudar as cores da interface de utilização, ou pode mudar cada parte da sua aparência. A documentação sobre temas está desatualizada, mas estamos na esperança de obter alguma ajuda para atualizá-la, em breve.</p> + +<div class="column-container"> +<div class="column-half"> +<h2 class="Documentation" id="Documentation" name="Documentation">Documentação</h2> + +<dl> + <dt><a href="/en-US/docs/Building_a_Theme" title="Building a Theme">Construindo um tema</a></dt> + <dd>Um tutorial para construir um tema simples no Firefox. <strong>Obs: Conteúdo Obsoleto</strong></dd> + <dt><a href="/en-US/docs/Themes/Common_Firefox_Theme_Issues_and_Solutions" title="Themes/Common_Firefox_Theme_Issues_and_Solutions">Problemas Comuns e Suas Soluções</a></dt> + <dd>Alguns problemas comuns, que ocorrem quando os editores AMO inspecionam os temas e como corrigí-los.</dd> + <dt><a href="/pt-BR/Add-ons/Temas/Temas_leves" title="Themes/Lightweight themes">Temas leves</a></dt> + <dd>Construindo temas leves para Firefox</dd> + <dt><a href="/en-US/docs/Creating_a_Skin_for_SeaMonkey_2.x" title="Creating_a_Skin_for_SeaMonkey_2.x">Criando uma capa para o SeaMonkey 2</a></dt> + <dd>Uma introdução para criar novos temas para o SeaMonkey 2.</dd> + <dt><a href="/en-US/docs/Making_Sure_Your_Theme_Works_with_RTL_Locales" title="Making_Sure_Your_Theme_Works_with_RTL_Locales">Assegurando-se de que o Seu Tema Funciona Com Escritas RTL</a></dt> + <dd>Como ter certeza de que o seu tema vai aparecer certinho para Hebreus, Árabes, Persas e Paquistaneses.</dd> + <dt><a href="/en-US/docs/Theme_Packaging" title="Theme_Packaging">Acondicionando Temas</a></dt> + <dd>Como Empacotar Temas para Firefox e Thunderbird.</dd> + <dt><a href="http://www.tudobom.de/articles/yatt/" title="http://www.tudobom.de/articles/yatt/">Outro Tutorial</a></dt> + <dd>Outro tutorial no construção de temas para Mozilla.</dd> + <dt><a href="/en-US/Mozilla/Add-ons/Themes/Obsolete">Documentos Obsoletos</a></dt> + <dd>Esses documentos são muito velhos e nunca serão atualizados, mas nós os mantemos, para o caso de serem fonte de informações úteis às pessoas <span class="short_text" id="result_box" lang="pt"><span class="hps">atualizar</span> <span class="hps">a documentação</span> <span class="hps">Tema</span></span></dd> +</dl> +</div> + +<div class="column-half"> +<h2 id="Buscando_Ajuda">Buscando Ajuda</h2> + +<ul> + <li><a href="http://forums.mozillazine.org/viewforum.php?f=18">Forum MozillaZine Themes</a></li> +</ul> + +<h2 class="Tools" id="Tools" name="Tools">Ferramentas</h2> + +<ul> + <li><a href="/en-US/docs/DOM_Inspector" title="DOM_Inspector">Inspetor DOM</a></li> + <li><a class="link-https" href="https://addons.mozilla.org/en-US/firefox/addon/inspectorwidget/">Inspetor Widget</a></li> + <li><a class="link-https" href="https://addons.mozilla.org/en-us/firefox/addon/force-rtl/">Force RTL</a>: Teste de compatibilidade RTL</li> +</ul> +</div> +</div> + +<p> </p> diff --git a/files/pt-br/mozilla/add-ons/temas/using_the_amo_theme_generator/index.html b/files/pt-br/mozilla/add-ons/temas/using_the_amo_theme_generator/index.html new file mode 100644 index 0000000000..a63eb7b624 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/temas/using_the_amo_theme_generator/index.html @@ -0,0 +1,137 @@ +--- +title: Usando o Gerador de Temas AMO +slug: Mozilla/Add-ons/Temas/Using_the_AMO_theme_generator +tags: + - AMO + - Extensões + - Firefox + - Gerador de Temas + - Guía + - Mozilla + - Tema + - Temas + - Tutorial + - extensão +translation_of: Mozilla/Add-ons/Themes/Using_the_AMO_theme_generator +--- +<p>{{AddonSidebar}}</p> + +<p>O gerador de temas na <a href="https://addons.mozilla.org/">addons.mozilla.org</a> (AMO) guia você pelo processo da criação de um tema para o Firefox. Uma vez que você já tenha definido as cores e a imagem para o seu tema, o gerador submeterá seu trabalho à AMO. Você pode publicar os temas na AMO, ou gerenciar a sua distribuição.</p> + +<h2 id="Comece">Comece</h2> + +<div class="note"> +<p>Você precisa entrar em sua conta no Firefox para acessar o Gerador de Temas.</p> +</div> + +<p>Se você preferir publicar o seu tema na <a href="https://addons.mozilla.org/">addons.mozilla.org</a> (AMO), comece pela <a href="https://addons.mozilla.org/en-US/developers/addon/submit/wizard-listed">listed Theme Generator page</a> </p> + +<p>Por outro lado, se você escolher distribuí-lo, vá para a <a href="https://addons.mozilla.org/en-US/developers/addon/submit/wizard-unlisted">unlisted Theme Generator Page</a>. Para mais informações sobre distribuição, visite <a href="/en-US/docs/Mozilla/Add-ons/Distribution">Signing and distributing your add-on</a>.</p> + +<div class="blockIndicator note"> +<p><strong>Nota:</strong> Você pode gerar um tema mais elaborado, por exemplo, que use múltiplas imagens, criando um tema estático. Para começar os Temas Estáticos, dê uma olhada em: <a href="/en-US/docs/Mozilla/Add-ons/Themes/Theme_concepts">Theme concepts.</a></p> +</div> + +<p>Para usar o Gerador de Temas AMO, preencha os campos com as informações sobre o seu tema novo.</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/16282/new_theme.png" style="border: 1px solid black; display: block; height: 1058px; margin: 0px auto; width: 988px;"></p> + +<p>Comece dando um nome ao seu novo tema.</p> + +<p><span class="tlid-translation translation" lang="pt"><span title="">Ao escolher uma imagem para o cabeçalho</span></span>, ela deverá ter:</p> + +<ul> + <li>200 pixels de altura</li> + <li>No máximo 6.9MB</li> + <li>O formato pode ser: PNG, JPG, APNG, SVG or GIF (Não use gifs animados.)</li> + <li>A imagem será alinhada <span class="tlid-translation translation" lang="pt"><span title="">à extremidade direita do cabeçalho</span></span> .</li> +</ul> + +<p>Nos exemplos acima, a imagem desaparece em uma cor sólida, mantendo seu tamanho.</p> + +<p>Os valores das cores podem ser inseridos em hex, rgb, ou rgba. Você também pode usar o seletor de cores para escolher as que preferir em seu tema:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/16503/theme_colors.png" style="border: 1px solid black; display: block; margin: 0px auto;"></p> + +<p>À medida que você for escolhendo as cores, elas vão sendo exibidas no exemplo abaixo do seletor, assim você pode brincar com elas, até encontrar a combinação exata para a sua criação. O bloco maior representa a intensidade da cor, o deslizante arco-íris permite que você selecione a tonalidade e o deslizante mais à direita define a sua opacidade.</p> + +<p>Uma vez que o campo de entrada de cor perder o foco, seu formato será convertido para rgba. Os componentes da cor em RGB (red, green, blue = vermelha, verde, azul) podem variar de 0 a 255, enquanto o "a" em RGBA significa alfa e controla a opacidade da cor. Os valores válidos para alfa variam entre 0 e 1 e o valor padrão é 1.0, ou, completamente opaco.</p> + +<div class="note"> +<p>Você pode usar a <a href="https://color.firefox.com">Firefox Color extension</a> para antever a sua criação.</p> +</div> + +<p>As cores na imagem a seguir mostram como você pode definí-las para o seu tema. Todas, menos a <strong>Área de fundo do cabeçalho</strong> e a<strong> Área de texto e ícones do cabeçalho</strong>, são opcionais:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/16507/theme_colors_labeled.png" style="display: block; height: 350px; margin: 0px auto; width: 720px;"></p> + +<dl> + <dt>O Fundo da área do cabeçalho</dt> + <dd>A cor de fundo da área de cabeçalho, exibida na área não coberta, ou visível através da imagem de cabeça.<strong> Manifest field</strong>: <em>accentcolor</em>.</dd> + <dt>Área de texto e ícones do cabeçalho</dt> + <dd>As cores do texto e dos ícones na região do cabeçalho, com exceção da aba ativa. <strong>Manifest field</strong>: <em>textcolor</em>.</dd> + <dt>Área de fundo da barra de ferramentas (opcional)</dt> + <dd>A cor de fundo da barra de navegação, a barra de favoritos e a aba selecionada. <strong>Manifest field</strong>: <em>toolbar</em>.</dd> + <dt>Área de texto e ícones da barra de ferramentas (opcional)</dt> + <dd>A cor do texto e dos ícones na barra de ferramentas e a aba ativa.<strong> Manifest field</strong>: <em>toolbar_text</em>.</dd> + <dt>Área de fundo dos campos da barra de ferramentas (opcional)</dt> + <dd>A cor de fundo para os campos na barra de ferramentas, tais como a barra de pesquisa de URL. <strong>Manifest field</strong>: <em>toolbar_field</em>.</dd> + <dt>Campo da área de texto na barra de ferramentas (opcional)</dt> + <dd>A cor do texto para os campos na barra de ferramentas, tais como a barra de pesquisa de URL. <strong>Manifest field</strong>: <em>toolbar_field_text</em>.</dd> +</dl> + +<p>Ao fornecer as informações, você verá uma prévia do seu tema no navegador, na parte final do formulário.</p> + +<p>Quando completar as informações necessárias, clique no botão <strong>Finish Theme</strong> para continuar.</p> + +<div class="note"> +<p>Temas submetidos para sua própria distribuição serão sancionadas imediatamente e um arquivo XPI gerado poderá ser baixado.</p> +</div> + +<h2 id="Enviando_seu_tema">Enviando seu tema</h2> + +<p>Se você estiver publicando o seu tema na <a href="https://addons.mozilla.org/">addons.mozilla.org</a> (AMO), a segunda página do criador de temas pedirá que você o descreva. Você, então, deverá fornecer as seguintes informações:</p> + +<dl> + <dt>Nome</dt> + <dd>Este é o nome que será exibido na AMO e pode ser diferente do nome mostrado quando o seu tema for instalado no Firefox.</dd> + <dt>Add-on URL</dt> + <dd>Este é o endereço a partir do qual o seu tema pode ser baixado. Você pode editar a parte final do valor (após <span>https://addons.mozilla.org</span>/), mas, por favor, use, apenas, letras, números, subtraços e traços no seu URL.</dd> + <dt>Resumo (necessário)</dt> + <dd>Descreva seu tema. Você dispõe de 250 caracteres para fazê-lo.</dd> + <dt>Selecione uma categoria (necessária)</dt> + <dd>Selecionar uma categoria exata para o seu tema ajuda as pessoas a encontrá-lo na AMO. As seguintes categorias estão disponíveis: + <ul> + <li>Abstrato</li> + <li>Causas</li> + <li>Moda</li> + <li>Filme e TV</li> + <li>Firefox</li> + <li>Foxkeh</li> + <li>Férias</li> + <li>Música</li> + <li>Natureza</li> + <li>Outra</li> + <li>Cenário</li> + <li>Estação do ano</li> + <li>Esportes</li> + <li><em>Websites</em></li> + </ul> + </dd> + <dt>Email de suporte</dt> + <dd>O endereço de <em>email</em> pelo qual as pessoas podem contactar você, caso elas tenham algum problema com o seu tema.</dd> + <dt><em>Website</em> de suporte</dt> + <dd>A URL para o sítio a partir do qual você oferece suporte ao seu tema.</dd> + <dt>Licença (necessária)</dt> + <dd>A licença sob a qual o seu tema será publicado vai depender das escolhas que você fizer ao responder as seguintes perguntas: + <ul> + <li>Outras pessoas podem compartilhar o seu tema, desde que mantenham a sua autoria?</li> + <li>As pessoas poderão fazer uso comercial do seu tema?</li> + <li>As pessoas poderão criar trabalhos inspirados em seu tema?</li> + </ul> + </dd> +</dl> + +<p>Uma vez que você tiver preenchido todas as informações requeridas, poderá completar o processo de envio ao clicar no botão <strong>Submit Version</strong>. Você verá alguma coisa que se pareça com isto:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/16284/theme_after_submit.png" style="border: 1px solid black; display: block; height: 382px; margin: 0px auto; width: 695px;"></p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/anatomia_de_uma_webextension/index.html b/files/pt-br/mozilla/add-ons/webextensions/anatomia_de_uma_webextension/index.html new file mode 100644 index 0000000000..231797ec59 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/anatomia_de_uma_webextension/index.html @@ -0,0 +1,115 @@ +--- +title: Anatomia de uma WebExtension +slug: Mozilla/Add-ons/WebExtensions/Anatomia_de_uma_WebExtension +tags: + - Extensões + - WebExtensions +translation_of: Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension +--- +<p>Uma extensão consiste de uma coleção de arquivos, empacotados para distribuição e instalação. Nesse artigo vamos falar rapidamente sobre os arquivos que podem estar presentes em uma extensão.</p> + +<p>Toda extensão contém um arquivo chamado <a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#manifest.json">"manifest.json"</a>. Ele pode conter ponteiros para quatro outros tipos de arquivos:</p> + +<ul> + <li><a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Background_pages">background pages</a>: implementação de lógica de longa duração</li> + <li><a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Content_scripts">content scripts</a>: executado no contexto de páginas web</li> + <li><a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Browser_actions">browser action files</a>: implementação de botões na toolbar</li> + <li><a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Web_accessible_resources">web accessible resources</a>: torna o conteúdo do pacote acessível a páginas web e scripts de conteúdo</li> +</ul> + +<p><img alt="" src="https://mdn.mozillademos.org/files/11465/webextension-anatomy.svg" style="display: block; height: 871px; margin-left: auto; margin-right: auto; width: 600px;"></p> + +<h2 id="manifest.json">manifest.json</h2> + +<p>Esse é o único arquivo que está presente em toda WebExtension. Ele contém metadados básicos sobre a extensão, tais como o nome, a versão e as permissões que ela necessita. Também provê ponteiros para outros arquivos na extensão.</p> + +<p>Para mais detalhes sobre o arquivo "manifest.json", acesse a <a href="/en-US/Add-ons/WebExtensions/manifest.json">página de referência.</a></p> + +<h2 id="Background_pages">Background pages</h2> + +<p>Muitas vezes as WebExtensions precisam manter um estado ou performance operativa de longa duração, independentemente do ciclo de vida das páginas ou janelas do navegador. As background pages e os scripts servem pra isso.</p> + +<p>Background scripts são carregados assim que a extensão tem sua carga concluída, e permanecem carregados até que ela seja desativada ou desinstalada. No script você pode fazer uso de qualquer uma das WbExtensions APIs.</p> + +<p>Os background scripts não possuem acesso direto às páginas web. No entanto, eles podem carregar scripts de conteúdo na página, e podem se comunicar com os scripts de conteúdo usando uma API de envio de mensagens.</p> + +<p>Você pode incluir uma background page usando a chave <code>background</code> no "manifest.json". Você não precisa informar a sua própria background page. Se você incluir uma página de background, um arquivo vazio será criado.</p> + +<pre class="brush: json">// manifest.json + +"background": { + "scripts": ["background-script.js"] +}</pre> + +<p>No entanto, você pode escolher informar a página de background como um arquivo HTML a parte:</p> + +<pre class="brush: json">// manifest.json + +"background": { + "page": "background-page.html" +}</pre> + +<h2 id="Scripts_de_conteúdo">Scripts de conteúdo</h2> + +<p>Use os scripts de conteúdo para acessar e manipular páginas web. Scripts de conteúdo são carregados dentro das páginas web e executados em um contexto particular nessa página.</p> + +<p>Eles podem ver e manipular páginas DOM,</p> + +<p>Scripts de conteúdo podem ver e manipular o DOM das páginas, da mesma forma como os scripts normais carregados pela página.</p> + +<p>Ao contrário dos scripts normais, os scripts de conteúdo podem:</p> + +<ul> + <li>fazer requisições XHR cross-domain</li> + <li>utilizar um pequeno subconjunto de WebExtension APIs</li> + <li>trocar mensagens com os scripts de background e acessar indiretamente todas as WebExtensions APIs.</li> +</ul> + +<p>Scripts de conteúdo não podem acessar diretamente os scripts normais da página, mas podem trocar mensagens com eles através do uso da API window.postMessage.</p> + +<p>Normalmente, quando falamos de scripts de conteúdo, estamos nos referindo a JavaScript, mas é possível injetar CSS em paginas web que utilizam o mesmo mecanismo.</p> + +<p>Você pode injetar scripts de conteúdo em páginas web de duas formas: anexando os scripts para todas as páginas correspondentes a um padrão de URL, ou através de programação a partir de um script de background.</p> + +<p>Para injetar scripts em páginas com base na URL, use a chave <code>content_scripts</code> no "manifest.json", informando um ou mais scripts e um array com os padrões:</p> + +<pre class="brush: json">// manifest.json + +"content_scripts": [ + { + "matches": ["*://*.mozilla.org/*"], + "js": ["my-script.js"] + } +]</pre> + +<p>Se a URL da página corresponder aos padrões passados na chave <code>matches</code>, os scripts passados na chave <code>js</code> serão carregados.</p> + +<p>Para injetar os scripts na página via programação (por exemplo, quando o usuário clicar em um botão) use a API <code>tabs</code>:</p> + +<pre class="brush: js">// background.js + +chrome.tabs.executeScript({ + file: "my-script.js" +});</pre> + +<p>Aprenda mais sobre scripts de conteúdo lendo sua <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">documentação</a>.</p> + +<h2 id="Ações_de_navegador">Ações de navegador</h2> + +<p>Uma "ação de navegador" é um botão que você pode adicionar na barra de ferramentas do Firefox. O botão tem um ícone. Você pode informar múltiplos ícones em diferentes tamanhos: fazendo isso, o navegador irá selecionar o ícone mais adequado para a densidade de pixels da tela.</p> + +<p>Opcionalmente, você pode definir um popup para o botão usando HTML, CSS e JavaScript.</p> + +<p>Se você não definir um popup, quando o usuário clicar no botão um evento será disparado, que pode ser ouvido nos scripts de background.</p> + +<p>Se você define um popup, o evento não é disparado: ao invés disso, o popup será mostrado para que o usuário possa interagir. Os scripts executados em popup são capazes de utilizar WebExtension APIs.</p> + +<p>Para aprender mais sobre ações de navegador, consulte a página da API.</p> + +<h2 id="Recursos_acessíveis_na_web">Recursos acessíveis na web</h2> + +<p>Recursos acessíveis na web são recursos como imagens, HTML, CSS, JavaScript, que podem ser incluídos na extensão e quer tornar acessível aos scripts de conteúdo e aos scripts da página. Eles podem ser referenciados a partir de scripts de página e de conteúdo, usando um URI scheme especial.</p> + +<p>Por exemplo, se um script de conteúdo quer inserir algumas imagens em páginas da web, você pode incluí-los na extensão e torná-los acessíveis na web. Em seguida o script de conteúdo pode criar e acrescentar tags <a href="/en-US/docs/Web/HTML/Element/img">img</a> que fazem referência às imagens através do atributo <code>src</code>.</p> + +<p>Para entender mais, veja a documentação sobre chaves no manifest.json em <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources">recursos acessíveis na web.</a></p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/alarms/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/alarms/index.html new file mode 100644 index 0000000000..a4e4bd3254 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/alarms/index.html @@ -0,0 +1,52 @@ +--- +title: alarms +slug: Mozilla/Add-ons/WebExtensions/API/alarms +tags: + - alarm +translation_of: Mozilla/Add-ons/WebExtensions/API/alarms +--- +<div>{{AddonSidebar}}</div> + +<p>Executar um código agendado para um horário específico no futuro. Isto é como o <code><a href="/en-US/docs/Web/API/WindowTimers/setTimeout">setTimeout()</a></code> e <code><a href="/en-US/docs/Web/API/WindowTimers/setInterval">setInterval()</a></code>, exceto essas funções não funcionam no segundo plano com páginas carregadas sob demanda.</p> + +<p>Para usar estas API você precisa ter a "alarms" <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permission</a>.</p> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("alarms.Alarm")}}</dt> + <dd>Informações sobre um alarme em particular.</dd> +</dl> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("alarms.create()")}}</dt> + <dd>Cria um alarme.</dd> + <dt>{{WebExtAPIRef("alarms.get()")}}</dt> + <dd>Obtém um alarme específico dado seu nome.</dd> + <dt>{{WebExtAPIRef("alarms.getAll()")}}</dt> + <dd>Obtém todos os alarmes agendados.</dd> + <dt>{{WebExtAPIRef("alarms.clear()")}}</dt> + <dd>Limpa um alarme específico dado seu nome.</dd> + <dt>{{WebExtAPIRef("alarms.clearAll()")}}</dt> + <dd>Limpa todos os alarmes agendados.</dd> +</dl> + +<h2 id="Eventos">Eventos</h2> + +<dl> + <dt>{{WebExtAPIRef("alarms.onAlarm")}}</dt> + <dd>Disparado quando o alarme acaba.</dd> +</dl> + +<h2 id="Compatibilidade_dos_browsers">Compatibilidade dos browsers</h2> + +<p>{{Compat("webextensions.api.alarms")}} {{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Agradecimentos</strong> + +<p>Esta API é baseada na API Chromium's <a href="https://developer.chrome.com/extensions/alarms"><code>chrome.alarms</code></a> .</p> + +<p>Dados de compatibilidade do Microsoft Edge fornecidos pela Microsoft Corporation aqui inclusos sob a Creative Commons Attribution 3.0 United States License.</p> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/bookmarks/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/bookmarks/index.html new file mode 100644 index 0000000000..75aa9ada3c --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/bookmarks/index.html @@ -0,0 +1,119 @@ +--- +title: bookmarks +slug: Mozilla/Add-ons/WebExtensions/API/bookmarks +translation_of: Mozilla/Add-ons/WebExtensions/API/bookmarks +--- +<div>{{AddonSidebar}}</div> + +<p>A API <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions">WebExtensions</a> {{WebExtAPIRef("bookmarks")}} permite uma extensão interagir e manipular o sistema de favoritos do navegador. Você pode pode usá-lo para favoritar páginas, obter favoritos existentes e, editar, remover ou organizar os favoritos.</p> + +<p>Para utilizar esta API, uma extensão deve ser requisitada para o "bookmarks" <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permission</a> em seu arquivo <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a></code> .</p> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("bookmarks.BookmarkTreeNode")}}</dt> + <dd>Representa um favorito ou um diretório de favoritos como árvore.</dd> + <dt>{{WebExtAPIRef("bookmarks.BookmarkTreeNodeType")}}</dt> + <dd>O enum {{jsxref("String")}} o qual descreve se um nó na árvore é ou não um favorito, uma pasta ou um separador.</dd> + <dt>{{WebExtAPIRef("bookmarks.BookmarkTreeNodeUnmodifiable")}}</dt> + <dd>O enum {{jsxref("String")}} o qual especifica porque um favorito ou uma pasta não pode ser modificado.</dd> + <dt>{{WebExtAPIRef("bookmarks.CreateDetails")}}</dt> + <dd>Contém informações ao qual é passada para a função {{WebExtAPIRef("bookmarks.create()")}} quando um novo favorito é criado.</dd> +</dl> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("bookmarks.create()")}}</dt> + <dd>Cria um favorito ou uma pasta.</dd> + <dt>{{WebExtAPIRef("bookmarks.get()")}}</dt> + <dd>Retrieves one or more {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}}s, given a bookmark's ID or an array of bookmark IDs.</dd> + <dt>{{WebExtAPIRef("bookmarks.getChildren()")}}</dt> + <dd>Recupera os filhos especificados {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}}.</dd> + <dt>{{WebExtAPIRef("bookmarks.getRecent()")}}</dt> + <dd>Recupera um número requisitado de favoritos adicionados recentemente.</dd> + <dt>{{WebExtAPIRef("bookmarks.getSubTree()")}}</dt> + <dd>Recupera uma parte da árvore de favoritos, iniciando por um nó previamente especificado.</dd> + <dt>{{WebExtAPIRef("bookmarks.getTree()")}}</dt> + <dd>Recupera a árvore de favoritos inteira em um array de objetos {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}}.</dd> + <dt>{{WebExtAPIRef("bookmarks.move()")}}</dt> + <dd>Move o especificado {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}} para um novo local dentro da árvore de favoritos.</dd> + <dt>{{WebExtAPIRef("bookmarks.remove()")}}</dt> + <dd>Remove um favorito ou uma pasta de favoritos vazia dado o ID do nó.</dd> + <dt>{{WebExtAPIRef("bookmarks.removeTree()")}}</dt> + <dd>Remove recursivamente uma pasta de favoritos; isto é; dado o ID do nó da pasta e todos seus descendentes.</dd> + <dt>{{WebExtAPIRef("bookmarks.search()")}}</dt> + <dd>Procura por {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}}s que batam com o conjunto de critérios especificados.</dd> + <dt>{{WebExtAPIRef("bookmarks.update()")}}</dt> + <dd>Atualiza o título e/ou autor do favorito de uma URL, ou o nome de uma pasta de favoritos dado o ID do favorito.</dd> +</dl> + +<h2 id="Eventos">Eventos</h2> + +<dl> + <dt>{{WebExtAPIRef("bookmarks.onCreated")}}</dt> + <dd>Disparado quando um favorito ou uma pasta é criado.</dd> + <dt>{{WebExtAPIRef("bookmarks.onRemoved")}}</dt> + <dd>Disparado quando um favorito ou uma pasta é removido. Quando uma pasta é removida recursivamente, uma simples notificação é disparada para o diretório, e nenhum para seu conteúdo.</dd> + <dt>{{WebExtAPIRef("bookmarks.onChanged")}}</dt> + <dd>Disparado quando um favorito ou pasta é modificado. Atualmente, somente mudanças no <code>title</code> e <code>url</code> o disparam.</dd> + <dt>{{WebExtAPIRef("bookmarks.onMoved")}}</dt> + <dd>Disparado quando um favorito ou pasta é movido para uma pasta pai diferente ou para um novo local dentro deste pasta.</dd> + <dt>{{WebExtAPIRef("bookmarks.onChildrenReordered")}}</dt> + <dd>Fired when the user has sorted the children of a folder in the browser's UI. This is not called as a result of a {{WebExtAPIRef("bookmarks.move", "move()")}}.</dd> + <dt>{{WebExtAPIRef("bookmarks.onImportBegan")}}</dt> + <dd>Disparado quando uma sessão de importação de favoritos começa. Custosos observers {{WebExtAPIRef("bookmarks.onCreated")}} atualizam até o {{WebExtAPIRef("bookmarks.onImportEnded")}} ser disparado. Observers deveriam ainda manipular outras notificações imediatamente.</dd> + <dt>{{WebExtAPIRef("bookmarks.onImportEnded")}}</dt> + <dd>Disparado quando uma sessão de importação de favoritos é finalizada.</dd> +</dl> + +<h2 id="Compatibilidade_nos_navegadores">Compatibilidade nos navegadores</h2> + +<p>{{Compat("webextensions.api.bookmarks")}}</p> + +<div class="hidden note"> +<p>A sessão "Chrome incompatibilities" está incluso no <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities">https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a> usando a macro <a href="/en-US/docs/Template:WebExtChromeCompat">WebExtChromeCompat</a>.</p> + +<p>Se precisar atualizar este conteúdo, edite <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities">https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a>, então recarregue a página para ver suas alterações.</p> +</div> + +<p>{{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Agradecimentos</strong> + +<p>Esta API é baseada na API Chromium <a href="https://developer.chrome.com/extensions/bookmarks"><code>chrome.bookmarks</code></a> . Esta documentação é derivada do <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/bookmarks.json"><code>bookmarks.json</code></a> no código do Chromium.</p> + +<p>Os dados de compatibilidade do Microsoft Edge são fornecidos pela Microsoft Corporation e aqui estão sob a Creative Commons Attribution 3.0 United States License.</p> +</div> + +<div class="hidden"> +<pre>// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</pre> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/browseraction/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/browseraction/index.html new file mode 100644 index 0000000000..29eae4f07f --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/browseraction/index.html @@ -0,0 +1,128 @@ +--- +title: browserAction +slug: Mozilla/Add-ons/WebExtensions/API/browserAction +tags: + - API + - Add-ons + - Extensões + - Interfaces + - Não Padrão + - Referencia + - browserAction +translation_of: Mozilla/Add-ons/WebExtensions/API/browserAction +--- +<div>{{AddonSidebar}}</div> + +<p>Adiciona um botão a barra de ferramentas do navegador.</p> + +<p>Uma <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_action">browser action</a> é um botão na barra de ferramentas do navegador.</p> + +<p>Você pode associar um popup junto ao botão. O popup é especificado usando HTML, CSS e JavaScript, apenas como uma página web normal. O JavaScript rodando no popup tem o mesmo acesso a API WebExtension completa, assim como seus scripts em backend, mas seu contexto global é o popup, não a página exibida no navegador atualmente. Para afetar páginas web você precisa comunicá-las via <a href="/en-US/Add-ons/WebExtensions/Modify_a_web_page#Messaging">messages</a>.</p> + +<p>Se você especificar um popup ele está exibido — e o conteúdo será carregado — quando o usuário clicar no ícone. Você não especificar um popup, quando o usuário clicar no ícone um evento será disparado para sua extensão.</p> + +<p>Você pode definir muitas ações de propriedades do navegador de modo declarativo usando a chave <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action">browser_action</a> </code>no arquivo manifest.json.</p> + +<p>Com a API <code>browserAction você pode</code>:</p> + +<ul> + <li>Usar {{WebExtAPIRef("browserAction.onClicked")}} para escutar por cliques no ícone.</li> + <li>Atribuir e obter as propriedades do ícone — icone, titulo, popup, e assim por diante. Você pode obter e atribui-los globalmente para todas as abas, ou para uma aba específica informando o ID como um argumento adicional.</li> +</ul> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("browserAction.ColorArray")}}</dt> + <dd>Um array de quatro números inteiros entre 0-55 definido uma cor RGB.</dd> + <dt>{{WebExtAPIRef("browserAction.ImageDataType")}}</dt> + <dd>Dados do pixel de uma imagem. Deve ser um objeto <code><a href="/en-US/docs/Web/API/ImageData">ImageData</a></code> (por exemplo, de um elemento {{htmlelement("canvas")}}).</dd> +</dl> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("browserAction.setTitle()")}}</dt> + <dd>Atribui ação de título do navegador. Ele será exibido em um tooltip.</dd> + <dt>{{WebExtAPIRef("browserAction.getTitle()")}}</dt> + <dd>Obtém a ação de título do navegador.</dd> + <dt>{{WebExtAPIRef("browserAction.setIcon()")}}</dt> + <dd>Atribui a ação de ícone ao navegador.</dd> + <dt>{{WebExtAPIRef("browserAction.setPopup()")}}</dt> + <dd>Atribui o documento HTML que será aberto como um popup quando o usuário clicar na ação de ícone do navegador.</dd> + <dt>{{WebExtAPIRef("browserAction.getPopup()")}}</dt> + <dd>Obtém o documento HTML atribuido como uma ação de popup do navegador.</dd> + <dt>{{WebExtAPIRef("browserAction.openPopup()")}}</dt> + <dd>Abre a ação popup do navegador.</dd> + <dt>{{WebExtAPIRef("browserAction.setBadgeText()")}}</dt> + <dd>Atribui a ação do texto distintivo do navegador. O emblema é exibido acima do ícone.</dd> + <dt>{{WebExtAPIRef("browserAction.getBadgeText()")}}</dt> + <dd>Obtém o texto do emblema do navegador.</dd> + <dt>{{WebExtAPIRef("browserAction.setBadgeBackgroundColor()")}}</dt> + <dd>Atribui a cor de fundo do emblema.</dd> + <dt>{{WebExtAPIRef("browserAction.getBadgeBackgroundColor()")}}</dt> + <dd>Obtém a cor de fundo do emblema.</dd> + <dt>{{WebExtAPIRef("browserAction.enable()")}}</dt> + <dd>Habilita a ação do navegador para uma aba. Por padrão, ações são habilitadas para todas as abas.</dd> + <dt>{{WebExtAPIRef("browserAction.disable()")}}</dt> + <dd>Desabilita a ação para uma aba do navegador, significando que ela não pode ser clicada quando aquela aba estiver ativa.</dd> + <dt>{{WebExtAPIRef("browserAction.isEnabled()")}}</dt> + <dd>Verifica se a ação do navegador está ou não habilitada.</dd> +</dl> + +<h2 id="Eventos">Eventos</h2> + +<dl> + <dt>{{WebExtAPIRef("browserAction.onClicked")}}</dt> + <dd>Disparado quando uma ação do ícone do navegador é clicada. Este evento não será disparado quando a ação do navegador tiver um popup.</dd> +</dl> + +<h2 id="Compatibilidade_dos_navegadores">Compatibilidade dos navegadores</h2> + +<p>{{Compat("webextensions.api.browserAction")}}</p> + +<div class="hidden note"> +<p>A sessão "Chrome incompatibilities" está inclusa em <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities"> https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a> usando a macro <a href="/en-US/docs/Template:WebExtChromeCompat">WebExtChromeCompat</a>.</p> + +<p>Se precisar atualizar este conteúdo edite <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities">https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a>, então recarregue esta página para visualizar suas alterações.</p> +</div> + +<p>{{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Agradecimentos</strong> + +<p>Esta API é baseada na API <a href="https://developer.chrome.com/extensions/browserAction"><code>chrome.browserAction</code></a> do Chromium. Este documento é derivado do <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/browser_action.json"><code>browser_action.json</code></a> no código do Chromium.</p> + +<p>Os dados de compatibilidade do Microsoft Edge são fornecidos Microsoft Corporation e estão aqui inclusos sob a Creative Commons Attribution 3.0 United States License.</p> +</div> + +<div class="hidden"> +<pre>// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</pre> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/browsersettings/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/browsersettings/index.html new file mode 100644 index 0000000000..197bc1ab3e --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/browsersettings/index.html @@ -0,0 +1,60 @@ +--- +title: browserSettings +slug: Mozilla/Add-ons/WebExtensions/API/browserSettings +tags: + - Extensões + - Referencia +translation_of: Mozilla/Add-ons/WebExtensions/API/browserSettings +--- +<div>{{AddonSidebar}}</div> + +<div>Habilita uma extensão para modificar certas configurações globais do navegador. Cada propriedade desta API é um objeto {{WebExtAPIRef("types.BrowserSetting", "BrowserSetting")}}, provendo a capacidade de modificar uma configuração particular.</div> + +<div> </div> + +<div>Devido estas serem configurações globais, é possível haver conflito entre extensões. Veja a documentação <code><a href="/en-US/Add-ons/WebExtensions/API/types/BrowserSetting/set">BrowserSetting.set()</a></code> para detalhes de como ligar com conflitos .</div> + +<div> </div> + +<div> +<p>Para usar esta API você precisa ter a <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissão</a> "browserSettings".</p> +</div> + +<h2 id="Propriedades">Propriedades</h2> + +<dl> + <dt>{{WebExtAPIRef("browserSettings.allowPopupsForUserEvents")}}</dt> + <dd>Determina se o código em execução nas páginas podem mostrar popups em resposta a eventos do usuário.</dd> + <dt>{{WebExtAPIRef("browserSettings.cacheEnabled")}}</dt> + <dd>Determina se o cache do navegador está ou não habilitado.</dd> + <dt>{{WebExtAPIRef("browserSettings.closeTabsByDoubleClick")}}</dt> + <dd>Determina se a aba selecionada pode ser fechada com um duplo click.</dd> + <dt>{{WebExtAPIRef("browserSettings.contextMenuShowEvent")}}</dt> + <dd>Determina o evento do mouse que dispara um menu de contexto de popup.</dd> + <dt>{{WebExtAPIRef("browserSettings.homepageOverride")}}</dt> + <dd>Lê o valor da página inicial do navegador.</dd> + <dt>{{WebExtAPIRef("browserSettings.imageAnimationBehavior")}}</dt> + <dd>Determina como o navegador trata imagens animadas.</dd> + <dt>{{WebExtAPIRef("browserSettings.newTabPageOverride")}}</dt> + <dd>Lê o valor da nova aba do navegador.</dd> + <dt>{{WebExtAPIRef("browserSettings.newTabPosition")}}</dt> + <dd>Controla a posição de abas recentemente abertas relativa as abas já presentes.</dd> + <dt>{{WebExtAPIRef("browserSettings.openBookmarksInNewTabs")}}</dt> + <dd>Determina se os favoritos são abertos na aba atual ou em uma nova aba.</dd> + <dt>{{WebExtAPIRef("browserSettings.openSearchResultsInNewTabs")}}</dt> + <dd>Determina se a busca de resultados é aberta na aba atual ou em uma nova.</dd> + <dt>{{WebExtAPIRef("browserSettings.openUrlbarResultsInNewTabs")}}</dt> + <dd>Determina se as sugestões do autocompletar da barra de endereços são abertas na aba atual ou em uma nova.</dd> + <dt>{{WebExtAPIRef("browserSettings.overrideDocumentColors")}}</dt> + <dd>Controla se as cores de escolha do usuário sobrescreverão as cores das páginas.</dd> + <dt>{{WebExtAPIRef("browserSettings.useDocumentFonts")}}</dt> + <dd>Controle se o navegador usará as fontes especificadas pela página web ou somente fontes embutidas.</dd> + <dt>{{WebExtAPIRef("browserSettings.webNotificationsDisabled")}}</dt> + <dd>Previne que os sites exibam notificações usando a API Web <code><a href="/en-US/docs/Web/API/notification">Notification</a></code>.</dd> +</dl> + +<h2 id="Compatibilidade_de_browser">Compatibilidade de browser</h2> + +<p>{{Compat("webextensions.api.browserSettings")}}</p> + +<p>{{WebExtExamples("h2")}}</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/browsingdata/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/browsingdata/index.html new file mode 100644 index 0000000000..e956a583ab --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/browsingdata/index.html @@ -0,0 +1,120 @@ +--- +title: browsingData +slug: Mozilla/Add-ons/WebExtensions/API/browsingData +translation_of: Mozilla/Add-ons/WebExtensions/API/browsingData +--- +<div>{{AddonSidebar}}</div> + +<p>Habilita extensões a limpar os dados que estão acumulados enquando o usuário navega.</p> + +<p>Na API <code>browsingData</code>, os dados de navegação são divididos em tipos:</p> + +<ul> + <li>cache do browser</li> + <li>cookies</li> + <li>downloads</li> + <li>histórico</li> + <li>armazenamento local</li> + <li>dados de plugin</li> + <li>dados de formulários salvos</li> + <li>senhas salvas</li> +</ul> + +<p>Você pode usar a função {{WebExtAPIRef("browsingData.remove()")}} para remover qualquer combinação desses tipos. Há também funções específicas para remover cada tipo de data em particular, como por exemplo {{WebExtAPIRef("browsingData.removePasswords()", "removePasswords()")}}, {{WebExtAPIRef("browsingData.removeHistory()", "removeHistory()")}} e assim por diante.</p> + +<p>Todas funções <code>browsingData.remove[X]()</code> pegam o objeto {{WebExtAPIRef("browsingData.RemovalOptions")}} que você usa para controlar outros dois aspectos da remoção de dados:</p> + +<ul> + <li>quão antigos são os dados para a remoção</li> + <li>se é para remover dados de páginas normais, ou também para hospedar aplicativos web ou add-ons. Observe que esta opção ainda não é suportada no Firefox.</li> +</ul> + +<p>Finalmente, a API {{WebExtAPIRef("browsingData.settings()")}} fornece uma função que retorna o atual valor das configurações da funcionalidade "Limpar Histórico".</p> + +<p>Para usar esta API você deve ter a <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions#API_permissions">permissão de API</a> "browsingData".</p> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("browsingData.DataTypeSet")}}</dt> + <dd>Objeto usado para especificar o tipo de dado para remoção: por exemplo, histórico, downloads, senhas e assim por diante.</dd> + <dt>{{WebExtAPIRef("browsingData.RemovalOptions")}}</dt> + <dd>Objeto usado para especificar o quanto tempo para remoção de dados, e se remover dados adicionados em uma navegação web normal, por aplicativos hospedados ou por add-ons.</dd> +</dl> + +<h2 id="Methods">Methods</h2> + +<dl> + <dt>{{WebExtAPIRef("browsingData.remove()")}}</dt> + <dd>Remove os dados de navegação especificado pelo seu tipo.</dd> + <dt>{{WebExtAPIRef("browsingData.removeCache()")}}</dt> + <dd>Limpa o cache do navegador.</dd> + <dt>{{WebExtAPIRef("browsingData.removeCookies()")}}</dt> + <dd>Remove os cookies.</dd> + <dt>{{WebExtAPIRef("browsingData.removeDownloads()")}}</dt> + <dd>Remove a lista de arquivos baixados.</dd> + <dt>{{WebExtAPIRef("browsingData.removeFormData()")}}</dt> + <dd>Limpa os dados de um formulário salvo.</dd> + <dt>{{WebExtAPIRef("browsingData.removeHistory()")}}</dt> + <dd>Limpa o histórico do navegador.</dd> + <dt>{{WebExtAPIRef("browsingData.removeLocalStorage()")}}</dt> + <dd>Limpa qualquer <a href="/en-US/docs/Web/API/Window/localStorage">local storage</a> criado por websites.</dd> + <dt>{{WebExtAPIRef("browsingData.removePasswords()")}}</dt> + <dd>Limpa passwords salvos.</dd> + <dt>{{WebExtAPIRef("browsingData.removePluginData()")}}</dt> + <dd>Limpa os dados associados com plugins.</dd> + <dt>{{WebExtAPIRef("browsingData.settings()")}}</dt> + <dd>Obtém o valor atual de configuração da funcionalidade "Limpar Histórico" do navegador.</dd> +</dl> + +<h2 id="Compatibilidade_de_browser">Compatibilidade de browser</h2> + +<div class="hidden">A tabela de compatibilidade desta página é gerada para dados estruturados. Se deseja contribuir, favor verificar <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> e nos enviar um pull request.</div> + +<p>{{Compat("webextensions.api.browsingData", 2)}}</p> + +<div class="note hidden"> +<p>A sessão "incompatibilidades do Chrome" está inclusa pela <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities"> https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a> usando o <a href="/en-US/docs/Template:WebExtChromeCompat">WebExtChromeCompat</a> macro.</p> + +<p>Se precisar atualizar este conteúdo, edite <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities">https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a>, então recarregue esta página para visualizar suas alterações.</p> +</div> + +<p>{{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Agradecimentos</strong> + +<p>Esta API é baseada na API <a href="https://developer.chrome.com/extensions/browsingData"><code>chrome.browsingData</code></a> do Chromium.</p> + +<p>Os dados de compatibilidade do Microsoft Edge compatibility são fornecidos pela Microsoft Corporation e aqui estão inclusos sob a Creative Commons Attribution 3.0 United States License.</p> +</div> + +<div class="hidden"> +<pre>// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</pre> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/clipboard/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/clipboard/index.html new file mode 100644 index 0000000000..4399588cb3 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/clipboard/index.html @@ -0,0 +1,34 @@ +--- +title: clipboard +slug: Mozilla/Add-ons/WebExtensions/API/clipboard +tags: + - Área de transferência +translation_of: Mozilla/Add-ons/WebExtensions/API/clipboard +--- +<div>{{AddonSidebar}}</div> + +<p>A API de área de transferência habilita uma extensão para copiar itens para a área de transferência do sistema. Atualmente a API suporta apenas a cópia de imagens, mas é pretendido suportar a cópia de texto e HTML no futuro.</p> + +<p>Esta API WebExtension existe primariamente por causa que o padrão da API web para área de transferência <a href="https://w3c.github.io/clipboard-apis/#writing-to-clipboard">não suporta escrita de imagens</a>. Se e quando esta funcionalidade for adicionada na API wb padrão, esta API pode ser depreciada.</p> + +<p>Leitura da área de transfência não é suportada por esta API, devido esta já poder ser lida usando as APIs padrão da plataforma web. Veja <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard#Reading_from_the_clipboard">interagindo com a área de transferência</a>.</p> + +<p>Esta API é baseada na API <code><a class="external external-icon" href="https://developer.chrome.com/apps/clipboard">clipboard</a></code> do Chrome's API, mas esta API está disponível somente para o Chrome.</p> + +<p>Para utilizar esta API voce precisa ter a <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissão</a> "clipboardWrite".</p> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("clipboard.setImageData()")}}</dt> + <dd>Copia uma imagem para a área de transferência.</dd> +</dl> + +<h2 id="Compatibilidade_do_navegador">Compatibilidade do navegador</h2> + +<p>{{Compat("webextensions.api.clipboard", 1, 1)}} {{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Agradecimentos</strong> + +<p>Esta API é baseada na API Chromium <a href="https://developer.chrome.com/apps/clipboard"><code>chrome.clipboard</code></a>.</p> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/commands/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/commands/index.html new file mode 100644 index 0000000000..876c09a9a9 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/commands/index.html @@ -0,0 +1,83 @@ +--- +title: commands +slug: Mozilla/Add-ons/WebExtensions/API/commands +translation_of: Mozilla/Add-ons/WebExtensions/API/commands +--- +<div>{{AddonSidebar}}</div> + +<p>Escuta por usuário executando comandos que você registrou usando o <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/commands"><code>commands</code> manifest.json key</a>.</p> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("commands.Command")}}</dt> + <dd>Objeto representando um comando. Contém a informação especificada no comando <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/commands"><code>commands</code> manifest.json key</a>.</dd> +</dl> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("commands.getAll")}}</dt> + <dd> + <p>Obtém todos os comandos registrados para esta extensão.</p> + </dd> + <dt>{{WebExtAPIRef("commands.reset")}}</dt> + <dd> + <p>Reseta a descrição do comando dado e atalho para os valores dados na chave do manifesto.</p> + </dd> + <dt>{{WebExtAPIRef("commands.update")}}</dt> + <dd> + <p>Modifica a descrição ou atalho dado um comando.</p> + </dd> +</dl> + +<h2 id="Eventos">Eventos</h2> + +<dl> + <dt>{{WebExtAPIRef("commands.onCommand")}}</dt> + <dd> + <div>Disparado quando um comando é executado usando seu atalho associado ao teclado.</div> + </dd> +</dl> + +<h2 id="Compatibilidade_do_navegador">Compatibilidade do navegador</h2> + +<p>{{Compat("webextensions.api.commands")}}{{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Agradecimentos</strong> + +<p>Esta API é baseada na API <a href="https://developer.chrome.com/extensions/commands"><code>chrome.commands</code></a> do Chromium.</p> + +<p>Os dados de compatibilidade do Microsoft Edge são fornecidos pela Microsoft Corporation e estão aqui inclusos sob a Creative Commons Attribution 3.0 United States License.</p> +</div> + +<div class="hidden"> +<pre>// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</pre> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/contentscripts/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/contentscripts/index.html new file mode 100644 index 0000000000..f158dcdee4 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/contentscripts/index.html @@ -0,0 +1,38 @@ +--- +title: contentScripts +slug: Mozilla/Add-ons/WebExtensions/API/contentScripts +translation_of: Mozilla/Add-ons/WebExtensions/API/contentScripts +--- +<div>{{AddonSidebar}}</div> + +<p>Use esta API para registrar o conteúdo de scripts. Registrando um conteúdo de scripts instrui o navegador para inserir conteúdo de script fornecido em páginas que batem com um padrão de URL fornecida.</p> + +<p>Esta API é muito similar a chave do <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts">"content_scripts"</a></code> no manifest.json key, exceto pelo <code>"content_scripts"</code>, o conjunto de conteúdo de scripts a padrões associados são fixados no momento da instalação. Com a API <code>contentScripts</code>, uma extensão pode registrar e desregistrar scripts em tempo de execução.</p> + +<p>Para usar a API, invoque {{WebExtAPIRef("contentScripts.register()")}} passando um objeto definido para registrar os scripts, os padrões de URL e outras opções. Ele retorna uma <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a></code> que é resolvida com o objeto {{WebExtAPIRef("contentScripts.RegisteredContentScript")}}.</p> + +<p>O objeto <code>RegisteredContentScript</code> represente os scripts que foram registrados com a chamada <code>register()</code>. Ele define um método <code>unregister()</code> que você pode usar para desregistrar o conteúdo de scripts. O conteúdo de scripts também são desregistrados automaticamente quando a página que os criou é destruida. Por exemplo, se estão registrados para uma página em segundo plano serão desregistrados automaticamente quando esta página for destruida, e se eles estão registrados para uma barra lateral ou popup, também serão desregistrados automaticamente quando essas forem fechadas.</p> + +<p>Não há permissão para a API <code>contentScripts</code>, mas uma extensão pode ter a <a href="/en-US/Add-ons/WebExtensions/manifest.json/permissions#Host_permissions">permissão de host</a> apropriada para algum padrão passado para o <code>register()</code>.</p> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("contentScripts.RegisteredContentScript")}}</dt> + <dd> + <p>Um objeto deste tipo é retornado pela função {{WebExtAPIRef("contentScripts.register()")}} . Ele representa o conteúdo dos scripts que foram registrados por aquela chamada, e podem ser usados para desregistrar o conteúdo do script.</p> + </dd> +</dl> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("contentScripts.register()")}}</dt> + <dd>Registra o conteúdo dos scripts fornecidos.</dd> +</dl> + +<h2 id="Compatibilidade_do_navegador">Compatibilidade do navegador</h2> + +<p>{{Compat("webextensions.api.contentScripts", 10, 1)}}</p> + +<p> {{WebExtExamples("h2")}}</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/contextualidentities/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/contextualidentities/index.html new file mode 100644 index 0000000000..652e9d08b2 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/contextualidentities/index.html @@ -0,0 +1,62 @@ +--- +title: contextualIdentities +slug: Mozilla/Add-ons/WebExtensions/API/contextualIdentities +tags: + - Extensões Web + - Identidade contextual +translation_of: Mozilla/Add-ons/WebExtensions/API/contextualIdentities +--- +<div>{{AddonSidebar}}</div> + +<p>Trabalhar com identidades contextuais: listar, criar, remover e atualizar identidades contextuais.</p> + +<p>"Identidades conceituais", também conhecido como "containers", consiste em uma funcionalidade do navegador cuja premissa é que usuários assumem multiplas identidades quando navegam na internet, e desejam manter alguma separação entre tais identidades. Por exemplo, um usuário pode considerar sua "identidade de trabalho" separada de sua "identidade pessoal", e não desejar compartilhar cookies entre esses dois contextos.</p> + +<p>Com a funcionalidade de identidades contextuais, cada uma possui um nome, cor e um ícone. Novas abas são atribuidas a uma identidade, e o nome, ícone e cor aparecerão na barra de endereço. Internamente, cada identidade guarda seu próprio cookie e não os compartilha entre outras abas.</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/14719/containers.png" style="display: block; height: 259px; margin-left: auto; margin-right: auto; width: 515px;">Identidade contextual é uma funcionalidade experimental no Firefox e está habilitado apenas no Firefox Nightly. Para habilitá-lo em outras versões do Firefox, atribua true as seguintes preferências: <code>privacy.userContext.enabled</code>. Observe que embora identidades contextuais estejam disponíveis no Firefox para Android, não há uma interface gráfica funcionando com ela para esta versão de navegador.</p> + +<p>Antes do Firefox 57, a API <code>contextualIdentities</code> é disponível apenas se a funcionalidade de identidade contextual está habilitada por si mesma. Se uma extensão tentou usar a API <code>contextualIdentities</code> API sem a funcionalidade estar habilitada, então as chamadas do método deveria resolver suas promises com <code>false</code>.</p> + +<p>Para o Firefox 57 em diante, se uma extensão que usa a API <code>contextualIdentities</code> está instalada, então a funcionalidade de identidade contextual será habilitada automaticamente. Observe que embora ainda é possível para o usuário desabilitar a funcionalidade usando a preferência "privacy.userContext.enabled". Isse isso ocorrer, então a chamada do método <code>contextualIdentities</code> rejeitará suas promises com uma mensagem de erro.</p> + +<p>Para mais informações sobre identidade contextual no Firefox veja <a href="https://wiki.mozilla.org/Security/Contextual_Identity_Project/Containers">este guia</a>.</p> + +<p>Identidades contextuais atualmente não são suportadas em outros navegadores.</p> + +<p>Para usar esta API você precisará incluir a <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissão</a> "contextualIdentities" em seu arquivo <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a>.</p> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("contextualIdentities.ContextualIdentity")}}</dt> + <dd>Contém informações sobre uma identidade contextual.</dd> +</dl> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("contextualIdentities.create()")}}</dt> + <dd>Cria uma nova identidade contextual.</dd> + <dt>{{WebExtAPIRef("contextualIdentities.get()")}}</dt> + <dd>Recupera uma única identidade contextual, dado o ID do cookie que armazena.</dd> + <dt>{{WebExtAPIRef("contextualIdentities.query()")}}</dt> + <dd>Recupera todas identidades contextuais, ou todas com um nome em particular.</dd> + <dt>{{WebExtAPIRef("contextualIdentities.update()")}}</dt> + <dd>Atualiza as propriedades existentes de uma identidade contextual.</dd> + <dt>{{WebExtAPIRef("contextualIdentities.remove()")}}</dt> + <dd>Exclui uma identidade contextual.</dd> + <dt> + <h2 id="Eventos">Eventos</h2> + </dt> + <dt>{{WebExtAPIRef("contextualIdentities.onCreated")}}</dt> + <dd>Disparado quando uma identidade contextual é criada.</dd> + <dt>{{WebExtAPIRef("contextualIdentities.onRemoved")}}</dt> + <dd>Disparado quando uma identidade contextual é removida.</dd> + <dt>{{WebExtAPIRef("contextualIdentities.onUpdated")}}</dt> + <dd>Disparado quando uma ou mais propriedades de uma identidade contextual é atualizada.</dd> +</dl> + +<h2 id="Compatibilidade_de_navegador">Compatibilidade de navegador</h2> + +<p>{{Compat("webextensions.api.contextualIdentities")}} {{WebExtExamples("h2")}}</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/cookies/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/cookies/index.html new file mode 100644 index 0000000000..ac53214831 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/cookies/index.html @@ -0,0 +1,162 @@ +--- +title: cookies +slug: Mozilla/Add-ons/WebExtensions/API/cookies +translation_of: Mozilla/Add-ons/WebExtensions/API/cookies +--- +<div>{{AddonSidebar}}</div> + +<p>Habilita extensões a obter e atribuir cookies, e ser notificado quando eles mudam.</p> + +<p>Para usar esta API, você precisa incluir a <a href="/en-US/Add-ons/WebExtensions/manifest.json/permissions#API_permissions">API permission</a> "cookies" em seu arquivo <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a>, bem como a <a href="/en-US/Add-ons/WebExtensions/manifest.json/permissions#Host_permissions">host permissions</a> para os sites cujos cookies você precisa acessar. Veja <a href="/en-US/Add-ons/WebExtensions/API/cookies#Permissions">cookie Permissions</a>.</p> + +<h2 id="Permissões">Permissões</h2> + +<p>Para usar esta API, uma extensão especificar a "cookies" <a href="/en-US/Add-ons/WebExtensions/manifest.json/permissions#API_permissions">API permission</a> em seu arquivo manifest, junto com a <a href="/en-US/Add-ons/WebExtensions/manifest.json/permissions#Host_permissions">host permissions</a> para qualquer site que deseja acessar os cookies. O add-on pode ler ou escrever qualquer cookie no qual poderia ser lido ou escrito pela URL correspondente nas permissões de host, por exemplo:</p> + +<dl> + <dt><code>http://*.example.com/</code></dt> + <dd> + <p>Uma extensão com esta permissão de host pode:</p> + + <ul> + <li>Ler um cookie inseguro para <code>www.example.com</code>, com qualquer caminho.</li> + <li>Escrever um cookie seguro ou inseguro para <code>www.example.com</code>, com qualquer caminho.</li> + </ul> + + <p><em>não </em>pode:</p> + + <ul> + <li>Ler um cookie seguro de <code>www.example.com</code>.</li> + </ul> + </dd> + <dt><code>http://www.example.com/</code></dt> + <dd> + <p>Uma extensão com esta permissão de host pode:</p> + + <ul> + <li>Ler um cookie não seguro para <code>www.example.com</code>, com qualquer caminho.</li> + <li>Ler um cookie não seguro para <code>.example.com</code>, com qualquer caminho.</li> + <li>Escrever um cookie seguro ou não seguro para <code>www.example.com</code> com qualquer caminho.</li> + <li>Escrever um cookie seguro ou não seguro para <code>.example.com</code> com qualquer caminho.</li> + </ul> + + <p><em>não </em>pode:</p> + + <ul> + <li>Ler ou escrever um cookie para <code>foo.example.com</code>.</li> + <li>Ler ou escrever um cookie para <code>foo.www.example.com</code>.</li> + </ul> + </dd> + <dt><code>*://*.example.com/</code></dt> + <dd> + <p>Uma extensão com esta permissão de host pode:</p> + + <ul> + <li>Ler ou escrever um cookie seguro ou inseguro para <code>www.example.com</code> com qualquer caminho.</li> + </ul> + </dd> +</dl> + +<h2 id="Isolamento_de_primera_parte">Isolamento de primera parte</h2> + +<p>Cookies de terceiros são aquleles enviados por sites em que você está num dado momento, por exemplo:</p> + +<ol> + <li>Você acessa <a href="http://bbc.com">bbc.com</a>. Ele contém uma publicidade do <a href="http://tracker.com">tracker.com</a> que atribui um cookie associado com o domínio "<a href="http://tracker.com">tracker.com</a>".</li> + <li>Você acessa <a href="http://cnn.com">cnn.com</a>. Ele também contém uma publicidade do <a href="http://tracker.com">tracker.com</a> que atribui um cookie associado ao domínio "<a href="http://tracker.com">tracker.com</a>".</li> + <li>Eventualmente ambos os cookies podem ser enviados para <a href="http://tracker.com">tracker.com</a>. Quem então pode descobrir que o mesmo usuário visitou ambos os sites.</li> +</ol> + +<p>Quando um isolamento de primeira parte está ativo, cookies são ainda qualificados pelo domínio da página original visitada pelo usuário (essencialmente, o domínio exibe o usuário na barra da URL, também conhecido como "domínio de primeira parte). Isto significa que não é possivel para um rastreador correlacionar o cookie da <a href="http://bbc.com">bbc.com</a> com o cookie da <a href="http://cnn.com">cnn.com</a>, então o rastreador não pode monitorar um simples usuários através de ambos os sites.</p> + +<p>Isolamento de primera parte pode ser habilitado diretamente pelo usuário ajustando a configuração do navegador , e pode ser atribuia do extensões usando a configuração <code><a href="/en-US/Add-ons/WebExtensions/API/privacy/websites#Properties">firstPartyIsolate</a></code> atribuida a API <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy">privacy</a></code>. Observe que este isolamento de primeira parte está habilitado por padrão no navegador <a href="https://www.torproject.org/">Tor</a>.</p> + +<p>Na API <code>cookies</code>, o domínio de primeira parte é representado usando o atributo <code>firstPartyDomain</code>. Todos os cookies atribuidos enquanto o isolamento de primeira parte está habilitado terá este atributo atribuito para o domínio da página original. No exemplo acima, deveria ser "<a href="http://bbc.com">bbc.com</a>" para um cookie e "<a href="http://cnn.com">cnn.com</a>" para outro. Todos os cookies atribuidos pelos websites enquanto o isolamento de primeira parte estiver desabilitado terão sua propriedade atribuida a uma string vazia.<br> + <br> + As APIs {{WebExtAPIRef("cookies.get()")}}, {{WebExtAPIRef("cookies.getAll()")}}, {{WebExtAPIRef("cookies.set()")}} and {{WebExtAPIRef("cookies.remove()")}} aceitam a opção <code>firstPartyDomain</code>.<br> + <br> + Quando o isolamento de primeira parte está habilitado, você deve informar esta opção ou a chamada da API irá falhar e retornar uma promise rejeitada. For <code>get()</code>, <code>set()</code>, and <code>remove()</code> you must pass a string value. Para um <code>getAll()</code>, você pode passar <code>null</code>, e irá obter todos os cookies que possuem ou não um valor não vazio para o <code>firstPartyDomain</code>.<br> + <br> + Quando o isolamento de primeira parte está desabilitado, o parâmetro <code>firstPartyDomain</code> é opcional por padrão é uma string vazia. Uma string não vazia pode ser utilizada para recuperar ou podificar cookies de isolamento de primeira parte. Da mesma forma, passando <code>null</code> como <code>firstPartyDomain</code> para o <code>getAll()</code> retornará todos os cookies.</p> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("cookies.Cookie")}}</dt> + <dd>Representa a informação sobre um cookie HTTP.</dd> + <dt>{{WebExtAPIRef("cookies.CookieStore")}}</dt> + <dd>Representa um cookie armazenado no navegador.</dd> + <dt>{{WebExtAPIRef("cookies.OnChangedCause")}}</dt> + <dd>Representa o motivo da mudança de um cookie.</dd> +</dl> + +<h2 id="Métodos">Métodos</h2> + +<dl> + <dt>{{WebExtAPIRef("cookies.get()")}}</dt> + <dd>Recupera informações sobre um único cookie.</dd> + <dt>{{WebExtAPIRef("cookies.getAll()")}}</dt> + <dd>Recupera todos os cookies com o padrão de um conjunto de filtros fornecido.</dd> + <dt>{{WebExtAPIRef("cookies.set()")}}</dt> + <dd>Atribui um cookie com um dado fornecido; pode sobrescrever cookies equivalentes caso existam.</dd> + <dt>{{WebExtAPIRef("cookies.remove()")}}</dt> + <dd>Remove um cookie pelo nome.</dd> + <dt>{{WebExtAPIRef("cookies.getAllCookieStores()")}}</dt> + <dd>Lista todos os cookies armazenados.</dd> +</dl> + +<h2 id="Manipulador_de_eventos">Manipulador de eventos</h2> + +<dl> + <dt>{{WebExtAPIRef("cookies.onChanged")}}</dt> + <dd>Disparado quando um cookie é criado ou removido.</dd> +</dl> + +<dl> + <dd> + <ul> + </ul> + </dd> +</dl> + +<h2 id="Compatibilidade_de_navegadores">Compatibilidade de navegadores</h2> + +<p>{{Compat("webextensions.api.cookies")}}</p> + +<p>{{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Agradecimentos</strong> + +<p>Esta API é baseada na API <a href="https://developer.chrome.com/extensions/cookies"><code>chrome.cookies</code></a> do Chromium. Esta documentação é derivada do <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/cookies.json"><code>cookies.json</code></a> no código do Chromium.</p> +</div> + +<div class="hidden"> +<pre>// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</pre> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/index.html new file mode 100644 index 0000000000..955086de10 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/index.html @@ -0,0 +1,53 @@ +--- +title: JavaScript APIs +slug: Mozilla/Add-ons/WebExtensions/API +tags: + - NeedsTranslation + - TopicStub + - WebExtensions +translation_of: Mozilla/Add-ons/WebExtensions/API +--- +<div>{{AddonSidebar}}</div> + +<div> +<p>JavaScript APIs for WebExtensions can be used inside the extension's <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Background_scripts">background scripts</a> and in any other documents bundled with the extension, including <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_action">browser action</a> or <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Page_actions">page action</a> popups, <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Sidebars">sidebars</a>, <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Options_pages">options pages</a>, or <a href="/en-US/Add-ons/WebExtensions/manifest.json/chrome_url_overrides">new tab pages</a>. A few of these APIs can also be accessed by an extension's <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Content_scripts">content scripts</a> (see the <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#WebExtension_APIs">list in the content script guide</a>).</p> + +<p>To use the more powerful APIs you need to <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions">request permission</a> in your extension's manifest.json.</p> + +<p>You can access the APIs using the <code>browser</code> namespace:</p> + +<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">logTabs</span><span class="punctuation token">(</span>tabs<span class="punctuation token">)</span> <span class="punctuation token">{</span> + console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>tabs<span class="punctuation token">)</span><span class="punctuation token">;</span> +<span class="punctuation token">}</span> + +browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">query</span><span class="punctuation token">(</span><span class="punctuation token">{</span>currentWindow<span class="punctuation token">:</span> <span class="keyword token">true</span><span class="punctuation token">}</span><span class="punctuation token">,</span> logTabs<span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre> +</div> + +<div> +<p>Many of the APIs are asynchronous, returning a <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a></code>:</p> + +<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">logCookie</span><span class="punctuation token">(</span>c<span class="punctuation token">)</span> <span class="punctuation token">{</span> + console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>c<span class="punctuation token">)</span><span class="punctuation token">;</span> +<span class="punctuation token">}</span> + +<span class="keyword token">function</span> <span class="function token">logError</span><span class="punctuation token">(</span>e<span class="punctuation token">)</span> <span class="punctuation token">{</span> + console<span class="punctuation token">.</span><span class="function token">error</span><span class="punctuation token">(</span>e<span class="punctuation token">)</span><span class="punctuation token">;</span> +<span class="punctuation token">}</span> + +<span class="keyword token">var</span> setCookie <span class="operator token">=</span> browser<span class="punctuation token">.</span>cookies<span class="punctuation token">.</span><span class="keyword token">set</span><span class="punctuation token">(</span> + <span class="punctuation token">{</span>url<span class="punctuation token">:</span> <span class="string token">"https://developer.mozilla.org/"</span><span class="punctuation token">}</span> +<span class="punctuation token">)</span><span class="punctuation token">;</span> +setCookie<span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span>logCookie<span class="punctuation token">,</span> logError<span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre> +</div> + +<div> +<p>Note that this is different from Google Chrome's extension system, which uses the <code>chrome</code> namespace instead of <code>browser</code>, and which uses callbacks instead of promises for asynchronous functions. As a porting aid, the Firefox implementation of WebExtensions APIs supports <code>chrome</code> and callbacks as well as <code>browser</code> and promises. Mozilla has also written a polyfill which enables code that uses <code>browser</code> and promises to work unchanged in Chrome: <a class="external external-icon" href="https://github.com/mozilla/webextension-polyfill">https://github.com/mozilla/webextension-polyfill</a>.</p> + +<p>Firefox also implements these APIs under the <code>chrome</code> namespace using callbacks. This allows code written for Chrome to run largely unchanged in Firefox for the APIs documented here.</p> + +<p>Microsoft Edge uses the <code>browser</code> namespace, but doesn't yet support promise-based asynchronous APIs. In Edge, for the time being, asynchronous APIs must use callbacks.</p> + +<p>Not all browsers support all the APIs: for the details, see <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs">Browser support for JavaScript APIs</a>.</p> +</div> + +<div>{{SubpagesWithSummaries}}</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/menus/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/menus/index.html new file mode 100644 index 0000000000..f63d411e76 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/menus/index.html @@ -0,0 +1,205 @@ +--- +title: menus +slug: Mozilla/Add-ons/WebExtensions/API/menus +tags: + - API + - Add-ons + - Extensions + - Interface + - Non-standard + - Reference + - WebExtensions + - contextMenus + - menus +translation_of: Mozilla/Add-ons/WebExtensions/API/menus +--- +<div>{{AddonSidebar}}</div> + +<p>Adicione itens ao sistema de menu do navegador.</p> + +<p>Esta API é modelada sobre a API <a href="https://developer.chrome.com/extensions/contextMenus">"contextMenus"</a> do Chrome, que permite que extensões do Chrome adicione itens para o contexto de menu do navegador. A API <code>browser.menus</code> adiciona alguns recursos à API do Chrome.</p> + +<p>Antes do Firefox 55, esta API foi também nomeada, originalmente, de <code>contextMenus</code>, e esse nome <span class="tlid-translation translation" lang="pt"><span title="">era mantido como um alias; portanto, você pode usar o </span></span><code>contextMenus</code> <span class="tlid-translation translation" lang="pt"><span title="">para escrever um código que funcione no Firefox e também em outros navegadores.</span></span></p> + +<p>Para usar essa API, você precisa da <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissão</a> de <code>menus</code>. Você também pode usar o alias <code>contextMenus</code> em vez de <code>menus</code>, mas se usar, a API deve ser acessada como <code>browser.contextMenus</code>.</p> + +<p>Exceto para <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/menus/getTargetElement">menus.getTargetElement()</a></code>, essa API não pode ser usada de scripts de conteúdo (content scripts).</p> + +<h2 id="Criando_itens_de_menu">Criando itens de menu</h2> + +<p>Para criar um item de menu, chamme o método {{WebExtAPIRef("menus.create()")}}. Você passa esse método como um objeto contendo opções para o item, incluindo o ID do item, o tipo do item, e os contextos no qual ele deve ser mostrado.</p> + +<p>Escute os cliques no seu item de menu adicionando um ouvinte para o evento {{WebExtAPIRef("menus.onClicked")}}. Este ouvinte será passado</p> + +<p>Listen for clicks on your menu item by adding a listener to the {{WebExtAPIRef("menus.onClicked")}} event. Este ouvinte receberá um objeto {{WebExtAPIRef("menus.OnClickData")}} que contém os detalhes do evento.</p> + +<p>Você pode criar quatro tipos diferentes de itens de menu, com base no valor da propriedade <code>type</code> que você fornece nas opções para <code>create()</code>:</p> + +<ul> + <li>"normal": um item de menu que apenas mostra um rótulo.</li> + <li>"checkbox": um item de menu que representa um estado binário. Ele mostra uma marca de verificação próxima ao rótulo. Clicar no item ativa esta marca. O ouvinte de clique receberá duas propriedades extras: "checked", indicando que o item foi marcado agora, e "wasChecked", indicando que o item foi marcado antes do evento do clique.</li> + <li>"radio": um item de menu que representa um de um grupo de escolhas. Como uma marca de verificação, isso também mostra uma marca de verificação próxima ao rótulo, e seu ouvinte de clique receberá "checked" e "wasChecked". No entanto, se você criar mais de um item de rádio, os itens funcionarão como um grupo de itens de rádio: apenas um item no grupo poderá ser verificado e clicar em um item o tornará o item marcado.</li> + <li>"separator": uma linha separando um grupo de itens.</li> +</ul> + +<p>Se você criou mais de um item de menu de contexto ou mais de um item de menu de ferramentas, os itens serão colocados em um submenu. O pai do submenu será identificado com o nome da extensão. Por exemplo, aqui está uma extensão chamada "Demonstração de menu" ("Menu demo"), que adicionou dois itens de menu de contexto:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/15431/menus-1.png" style="display: block; height: 406px; margin-left: auto; margin-right: auto; width: 500px;"></p> + +<h2 id="Ícones">Ícones</h2> + +<p>Se você especificou ícones para sua extensão usando a <a href="/en-US/Add-ons/WebExtensions/manifest.json/icons">chave "icons" do manifest</a>, <span class="tlid-translation translation" lang="pt"><span title=""> o item de menu exibirá o ícone especificado ao lado do rótulo.</span> <span title="">O navegador tentará escolher um ícone de 16x16 pixels para uma exibição normal ou um ícone de 32x32 pixels para uma exibição de alta densidade:</span></span></p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/15433/menus-2.png" style="display: block; height: 409px; margin-left: auto; margin-right: auto; width: 500px;"></p> + +<p>Apenas para itens dentro de um submenu, você pode especificar ícones customizados passando a opção <code>icons</code> para o {{WebExtAPIRef("menus.create()")}}:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/15435/menus-3.png" style="display: block; height: 396px; margin-left: auto; margin-right: auto; width: 500px;"></p> + +<h2 id="Exemplo">Exemplo</h2> + +<p>Aqui está um menu de contexto contendo quatro itens: um item normal, dois itens de rádio com separadores em cada lado, e uma marca de seleção. Os itens de rádio receberam ícones customizados.</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/15437/menus-4.png" style="display: block; height: 790px; margin-left: auto; margin-right: auto; width: 500px;">Você pode criar um submenu como este usando o código abaixo:</p> + +<pre class="brush: js">browser.menus.create({ + id: "remove-me", + title: browser.i18n.getMessage("menuItemRemoveMe"), + contexts: ["all"] +}, onCreated); + +browser.menus.create({ + id: "separator-1", + type: "separator", + contexts: ["all"] +}, onCreated); + +browser.menus.create({ + id: "greenify", + type: "radio", + title: browser.i18n.getMessage("menuItemGreenify"), + contexts: ["all"], + checked: true, + icons: { + "16": "icons/paint-green-16.png", + "32": "icons/paint-green-32.png" + } +}, onCreated); + +browser.menus.create({ + id: "bluify", + type: "radio", + title: browser.i18n.getMessage("menuItemBluify"), + contexts: ["all"], + checked: false, + icons: { + "16": "icons/paint-blue-16.png", + "32": "icons/paint-blue-32.png" + } +}, onCreated); + +browser.menus.create({ + id: "separator-2", + type: "separator", + contexts: ["all"] +}, onCreated); + +var checkedState = true; + +browser.menus.create({ + id: "check-uncheck", + type: "checkbox", + title: browser.i18n.getMessage("menuItemUncheckMe"), + contexts: ["all"], + checked: checkedState +}, onCreated);</pre> + +<h2 id="Tipos">Tipos</h2> + +<dl> + <dt>{{WebExtAPIRef("menus.ContextType")}}</dt> + <dd>Os diferentes contextos em que um menu pode aparecer.</dd> + <dt>{{WebExtAPIRef("menus.ItemType")}}</dt> + <dd><span class="tlid-translation translation" lang="pt"><span title="">O tipo de item de menu</span></span>: "normal", "checkbox", "radio", "separator".</dd> + <dt>{{WebExtAPIRef("menus.OnClickData")}}</dt> + <dd>Informação enviada quando um item do menu é clicado.</dd> +</dl> + +<h2 id="Propriedades">Propriedades</h2> + +<dl> + <dt>{{WebExtAPIRef("menus.ACTION_MENU_TOP_LEVEL_LIMIT")}}</dt> + <dd>O número máximo de itens de extensão de nível superior que podem ser adicionados a um item de menu cujo ContextType seja "browser_action" ou "page_action".</dd> +</dl> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("menus.create()")}}</dt> + <dd>Cria um novo item de menu.</dd> + <dt>{{WebExtApiRef("menus.getTargetElement()")}}</dt> + <dd>Retorna o elemento para um <code>info.targetElementId</code> determinado.</dd> + <dt>{{WebExtApiRef("menus.overrideContext()")}}</dt> + <dd>Oculta todos os itens de menu padrão do Firefox para fornecer uma interface de usuário personalizada do menu de contexto.</dd> + <dt>{{WebExtAPIRef("menus.refresh()")}}</dt> + <dd>Atualiza um menu que está sendo exibido no momento.</dd> + <dt>{{WebExtAPIRef("menus.remove()")}}</dt> + <dd>Remove um item do menu.</dd> + <dt>{{WebExtAPIRef("menus.removeAll()")}}</dt> + <dd>Remove todos os itens do menu adicionados por esta extensão.</dd> + <dt>{{WebExtAPIRef("menus.update()")}}</dt> + <dd>Atualiza um item do menu criado anteriormente.</dd> +</dl> + +<h2 id="Eventos">Eventos</h2> + +<dl> + <dt>{{WebExtAPIRef("menus.onClicked")}}</dt> + <dd>Ativado quando um item de menu é clicado.</dd> + <dt>{{WebExtAPIRef("menus.onHidden")}}</dt> + <dd>Ativado quando o navegador esconde um menu.</dd> + <dt>{{WebExtAPIRef("menus.onShown")}}</dt> + <dd>Ativado quando o navegador mostra um menu.</dd> +</dl> + +<h2 id="Compatibilidade_do_navegador">Compatibilidade do navegador</h2> + +<p>{{ Compat("webextensions.api.menus", 1, "true") }}</p> + +<p>{{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Reconhecimentos</strong> + +<p>Esta API é baseada na API <a href="https://developer.chrome.com/extensions/contextMenus"><code>chrome.contextMenus</code> </a>do Chromium. Esta documentação é derivada do <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/context_menus.json"><code>context_menus.json</code></a> do código do Chromium .</p> +</div> + +<div class="hidden"> +<pre>// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</pre> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/tabs/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/tabs/index.html new file mode 100644 index 0000000000..b6f69f193b --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/tabs/index.html @@ -0,0 +1,223 @@ +--- +title: tabs +slug: Mozilla/Add-ons/WebExtensions/API/tabs +tags: + - API + - Add-ons + - Extensions + - Interface + - NeedsTranslation + - Non-standard + - Reference + - TopicStub + - WebExtensions + - tabs +translation_of: Mozilla/Add-ons/WebExtensions/API/tabs +--- +<div>{{AddonSidebar}}</div> + +<p>Interact with the browser's tab system.</p> + +<p>You can use this API to get a list of opened tabs, filtered by various criteria, and to open, update, move, reload, and remove tabs. You can't directly access the content hosted by tabs using this API, but you can insert JavaScript and CSS into tabs using the {{WebExtAPIRef("tabs.executeScript()")}} or {{WebExtAPIRef("tabs.insertCSS()")}} APIs.</p> + +<p>You can use most of this API without any special permission. However:</p> + +<ul> + <li>To access <code>Tab.url</code>, <code>Tab.title</code>, and <code>Tab.favIconUrl</code>, you need to have the <code>"tabs"</code> <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permission</a>. + + <ul> + <li>In Firefox, this also means you need <code>"tabs"</code> to {{WebExtAPIRef("tabs.query()")}} by URL.</li> + </ul> + </li> + <li>To use {{WebExtAPIRef("tabs.executeScript()")}} or {{WebExtAPIRef("tabs.insertCSS()")}}, you must have the <a href="/en-US/Add-ons/WebExtensions/manifest.json/permissions#Host_permissions">host permission</a> for the tab</li> +</ul> + +<p>Alternatively, you can get these permissions temporarily, only for the currently active tab and only in response to an explicit user action, by asking for the <a href="/en-US/Add-ons/WebExtensions/manifest.json/permissions#activeTab_permission"><code>"activeTab"</code> permission</a>.</p> + +<p>Many tab operations use a Tab <code>id</code>. Tab <code>id</code>s are guaranteed to be unique to a single tab only within a browser session. If the browser is restarted, then it can and will reuse tab <code>id</code>s. To associate information with a tab across browser restarts, use {{WebExtAPIRef("sessions.setTabValue()")}}.</p> + +<h2 id="Types">Types</h2> + +<dl> + <dt>{{WebExtAPIRef("tabs.MutedInfoReason")}}</dt> + <dd>Specifies the reason a tab was muted or unmuted.</dd> + <dt>{{WebExtAPIRef("tabs.MutedInfo")}}</dt> + <dd>This object contains a boolean indicating whether the tab is muted, and the reason for the last state change.</dd> + <dt>{{WebExtAPIRef("tabs.PageSettings")}}</dt> + <dd> + <p>Used to control how a tab is rendered as a PDF by the <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/saveAsPDF" title="Saves the current page as a PDF. This will open a dialog, supplied by the underlying operating system, asking the user where they want to save the PDF."><code>tabs.saveAsPDF()</code></a> method.</p> + </dd> + <dt>{{WebExtAPIRef("tabs.Tab")}}</dt> + <dd>This type contains information about a tab.</dd> + <dt>{{WebExtAPIRef("tabs.TabStatus")}}</dt> + <dd>Indicates whether the tab has finished loading.</dd> + <dt>{{WebExtAPIRef("tabs.WindowType")}}</dt> + <dd>The type of window that hosts this tab.</dd> + <dt>{{WebExtAPIRef("tabs.ZoomSettingsMode")}}</dt> + <dd>Defines whether zoom changes are handled by the browser, by the extension, or are disabled.</dd> + <dt>{{WebExtAPIRef("tabs.ZoomSettingsScope")}}</dt> + <dd>Defines whether zoom changes will persist for the page's origin, or only take effect in this tab.</dd> + <dt>{{WebExtAPIRef("tabs.ZoomSettings")}}</dt> + <dd>Defines zoom settings {{WebExtAPIRef("tabs.ZoomSettingsMode", "mode")}}, {{WebExtAPIRef("tabs.ZoomSettingsScope", "scope")}}, and default zoom factor.</dd> +</dl> + +<h2 id="Properties">Properties</h2> + +<dl> + <dt>{{WebExtAPIRef("tabs.TAB_ID_NONE")}}</dt> + <dd>A special ID value given to tabs that are not browser tabs (for example, tabs in devtools windows).</dd> +</dl> + +<h2 id="Functions">Functions</h2> + +<dl> + <dt>{{WebExtAPIRef("tabs.captureTab()")}}</dt> + <dd>Creates a data URI encoding an image of the visible area of the given tab.</dd> + <dt>{{WebExtAPIRef("tabs.captureVisibleTab()")}}</dt> + <dd>Creates a data URI encoding an image of the visible area of the currently active tab in the specified window.</dd> + <dt>{{WebExtAPIRef("tabs.connect()")}}</dt> + <dd>Sets up a messaging connection between the extension's background scripts (or other privileged scripts, such as popup scripts or options page scripts) and any <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts">content scripts</a> running in the specified tab.</dd> + <dt>{{WebExtAPIRef("tabs.create()")}}</dt> + <dd>Creates a new tab.</dd> + <dt>{{WebExtAPIRef("tabs.detectLanguage()")}}</dt> + <dd>Detects the primary language of the content in a tab.</dd> + <dt>{{WebExtAPIRef("tabs.discard()")}}</dt> + <dd>Discards one or more tabs.</dd> + <dt>{{WebExtAPIRef("tabs.duplicate()")}}</dt> + <dd>Duplicates a tab.</dd> + <dt>{{WebExtAPIRef("tabs.executeScript()")}}</dt> + <dd>Injects JavaScript code into a page.</dd> + <dt>{{WebExtAPIRef("tabs.get()")}}</dt> + <dd>Retrieves details about the specified tab.</dd> + <dt>{{WebExtAPIRef("tabs.getAllInWindow()")}} {{deprecated_inline}}</dt> + <dd>Gets details about all tabs in the specified window.</dd> + <dt>{{WebExtAPIRef("tabs.getCurrent()")}}</dt> + <dd>Gets information about the tab that this script is running in, as a <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/Tabs/Tab" title="This type contains information about a tab."><code>tabs.Tab</code></a> object.</dd> + <dt>{{WebExtAPIRef("tabs.getSelected()")}} {{deprecated_inline}}</dt> + <dd>Gets the tab that is selected in the specified window. <strong>Deprecated: use <a href="https://wiki.developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query" title="Gets all tabs that have the specified properties, or all tabs if no properties are specified."><code>tabs.query({active: true})</code></a> instead.</strong></dd> + <dt>{{WebExtAPIRef("tabs.getZoom()")}}</dt> + <dd>Gets the current zoom factor of the specified tab.</dd> + <dt>{{WebExtAPIRef("tabs.getZoomSettings()")}}</dt> + <dd>Gets the current zoom settings for the specified tab.</dd> + <dt>{{WebExtAPIRef("tabs.goForward()")}}</dt> + <dd>Go forward to the next page, if one is available.</dd> + <dt>{{WebExtAPIRef("tabs.goBack()")}}</dt> + <dd>Go back to the previous page, if one is available.</dd> + <dt>{{WebExtAPIRef("tabs.hide()")}} {{experimental_inline}}</dt> + <dd>Hides one or more tabs.</dd> + <dt>{{WebExtAPIRef("tabs.highlight()")}}</dt> + <dd>Highlights one or more tabs.</dd> + <dt>{{WebExtAPIRef("tabs.insertCSS()")}}</dt> + <dd>Injects CSS into a page.</dd> + <dt>{{WebExtAPIRef("tabs.move()")}}</dt> + <dd>Moves one or more tabs to a new position in the same window or to a different window.</dd> + <dt>{{WebExtApiRef("tabs.moveInSuccession()")}}</dt> + <dd>Modifies the succession relationship for a group of tabs.</dd> + <dt>{{WebExtAPIRef("tabs.print()")}}</dt> + <dd>Prints the contents of the active tab.</dd> + <dt>{{WebExtAPIRef("tabs.printPreview()")}}</dt> + <dd> + <div>Opens print preview for the active tab.</div> + </dd> + <dt>{{WebExtAPIRef("tabs.query()")}}</dt> + <dd>Gets all tabs that have the specified properties, or all tabs if no properties are specified.</dd> + <dt>{{WebExtAPIRef("tabs.reload()")}}</dt> + <dd>Reload a tab, optionally bypassing the local web cache.</dd> + <dt>{{WebExtAPIRef("tabs.remove()")}}</dt> + <dd>Closes one or more tabs.</dd> + <dt>{{WebExtAPIRef("tabs.removeCSS()")}}</dt> + <dd>Removes from a page CSS which was previously injected by calling {{WebExtAPIRef("tabs.insertCSS()")}}.</dd> + <dt>{{WebExtAPIRef("tabs.saveAsPDF()")}}</dt> + <dd>Saves the current page as a PDF.</dd> + <dt>{{WebExtAPIRef("tabs.sendMessage()")}}</dt> + <dd>Sends a single message to the content script(s) in the specified tab.</dd> + <dt>{{WebExtAPIRef("tabs.sendRequest()")}} {{deprecated_inline}}</dt> + <dd>Sends a single request to the content script(s) in the specified tab. <strong>Deprecated</strong>: use {{WebExtAPIRef("tabs.sendMessage()")}} instead.</dd> + <dt>{{WebExtAPIRef("tabs.setZoom()")}}</dt> + <dd>Zooms the specified tab.</dd> + <dt>{{WebExtAPIRef("tabs.setZoomSettings()")}}</dt> + <dd>Sets the zoom settings for the specified tab.</dd> + <dt>{{WebExtAPIRef("tabs.show()")}} {{experimental_inline}}</dt> + <dd>Shows one or more tabs that have been {{WebExtAPIRef("tabs.hide()", "hidden")}}.</dd> + <dt>{{WebExtAPIRef("tabs.toggleReaderMode()")}}</dt> + <dd>Toggles Reader mode for the specified tab.</dd> + <dt>{{WebExtAPIRef("tabs.update()")}}</dt> + <dd>Navigate the tab to a new URL, or modify other properties of the tab.</dd> +</dl> + +<h2 id="Events">Events</h2> + +<dl> + <dt>{{WebExtAPIRef("tabs.onActivated")}}</dt> + <dd>Fires when the active tab in a window changes. Note that the tab's URL may not be set at the time this event fired.</dd> + <dt>{{WebExtAPIRef("tabs.onActiveChanged")}} {{deprecated_inline}}</dt> + <dd>Fires when the selected tab in a window changes. <strong>Deprecated:</strong> use {{WebExtAPIRef("tabs.onActivated")}} instead.</dd> + <dt>{{WebExtAPIRef("tabs.onAttached")}}</dt> + <dd>Fired when a tab is attached to a window, for example because it was moved between windows.</dd> + <dt>{{WebExtAPIRef("tabs.onCreated")}}</dt> + <dd>Fired when a tab is created. Note that the tab's URL may not be set at the time this event fired.</dd> + <dt>{{WebExtAPIRef("tabs.onDetached")}}</dt> + <dd>Fired when a tab is detached from a window, for example because it is being moved between windows.</dd> + <dt>{{WebExtAPIRef("tabs.onHighlightChanged")}} {{deprecated_inline}}</dt> + <dd>Fired when the highlighted or selected tabs in a window change. <strong>Deprecated:</strong> use {{WebExtAPIRef("tabs.onHighlighted")}} instead.</dd> + <dt>{{WebExtAPIRef("tabs.onHighlighted")}}</dt> + <dd>Fired when the highlighted or selected tabs in a window change.</dd> + <dt>{{WebExtAPIRef("tabs.onMoved")}}</dt> + <dd>Fired when a tab is moved within a window.</dd> + <dt>{{WebExtAPIRef("tabs.onRemoved")}}</dt> + <dd>Fired when a tab is closed.</dd> + <dt>{{WebExtAPIRef("tabs.onReplaced")}}</dt> + <dd>Fired when a tab is replaced with another tab due to prerendering.</dd> + <dt>{{WebExtAPIRef("tabs.onSelectionChanged")}} {{deprecated_inline}}</dt> + <dd>Fires when the selected tab in a window changes. <strong>Deprecated:</strong> use {{WebExtAPIRef("tabs.onActivated")}} instead.</dd> + <dt>{{WebExtAPIRef("tabs.onUpdated")}}</dt> + <dd>Fired when a tab is updated.</dd> + <dt>{{WebExtAPIRef("tabs.onZoomChange")}}</dt> + <dd>Fired when a tab is zoomed.</dd> +</dl> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + + + +<p>{{Compat("webextensions.api.tabs")}}</p> + +<p>{{WebExtExamples("h2")}}</p> + +<div class="note"><strong>Acknowledgements</strong> + +<p>This API is based on Chromium's <a href="https://developer.chrome.com/extensions/tabs"><code>chrome.tabs</code></a> API. This documentation is derived from <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/tabs.json"><code>tabs.json</code></a> in the Chromium code.</p> + +<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p> +</div> + +<div class="hidden"> +<pre class="notranslate">// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +</pre> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/api/tema/index.html b/files/pt-br/mozilla/add-ons/webextensions/api/tema/index.html new file mode 100644 index 0000000000..4eb0dc1b8d --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/api/tema/index.html @@ -0,0 +1,55 @@ +--- +title: tema +slug: Mozilla/Add-ons/WebExtensions/API/tema +tags: + - Aplicativo + - Extensões + - Navegador + - Tema + - Temas + - add-on + - extensão +translation_of: Mozilla/Add-ons/WebExtensions/API/theme +--- +<div>{{AddonSidebar}}</div> + +<p>Permite que extensões do navegador alterem seu tema.</p> + +<p>Para usar esta API, uma extensão deve solicitar a <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permission</a> (permissão) de "tema" em seu arquivo<a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json"> manifest.json</a>.</p> + +<div class="note"> +<p><strong>Nota:</strong> Quando configuramos um arquivo de plano de fundo, devemos declarar a <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permission</a> (permissão) de "tema" e, assim sendo, nós não poderemos usar a função <a href="/en-US/Add-ons/WebExtensions/manifest.json/theme">theme</a> (de tema), se esta for incompatível.</p> +</div> + +<h2 id="Tipo">Tipo</h2> + +<dl> + <dt>{{WebExtAPIRef("theme.Theme")}}</dt> + <dd>Representa o conteúdo de um tema.</dd> +</dl> + +<h2 id="Funções">Funções</h2> + +<dl> + <dt>{{WebExtAPIRef("theme.getCurrent()")}}</dt> + <dd>Obtém o tema atual do navegador.</dd> + <dt>{{WebExtAPIRef("theme.update()")}}</dt> + <dd>Atualiza o tema do navegador.</dd> + <dt>{{WebExtAPIRef("theme.reset()")}}</dt> + <dd>Remove quaisquer atualizações de temas feitas em uma chamada para {{WebExtAPIRef("theme.update()")}}.</dd> +</dl> + +<h2 id="Evento">Evento</h2> + +<dl> + <dt>{{WebExtAPIRef("theme.onUpdated")}}</dt> + <dd>Disparada<em> </em>quando o navegador tiver sido alterado.</dd> +</dl> + +<h2 id="Compatibilidade">Compatibilidade</h2> + +<div class="hidden">A tabela de compatibilidade, nesta página, foi gerada a partir de dados estruturados. Se você apreciar contribuir com ela, por favor, verifique a <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> e deixe-nos saber de seu interesse.</div> + +<p>{{Compat("webextensions.api.theme")}}</p> + +<p>{{WebExtExamples("h2")}}</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/browser_support_for_javascript_apis/index.html b/files/pt-br/mozilla/add-ons/webextensions/browser_support_for_javascript_apis/index.html new file mode 100644 index 0000000000..4333baf5b1 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/browser_support_for_javascript_apis/index.html @@ -0,0 +1,15 @@ +--- +title: Browser support for JavaScript APIs +slug: Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs +translation_of: Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs +--- +<div>{{AddonSidebar}}</div> + +<div>{{WebExtAllCompatTables}}</div> + +<p class="hidden">A compatibilidade table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<div class="note"><strong>Acknowledgements</strong> + +<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/empacotando_e_instalando/index.html b/files/pt-br/mozilla/add-ons/webextensions/empacotando_e_instalando/index.html new file mode 100644 index 0000000000..2b210f5125 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/empacotando_e_instalando/index.html @@ -0,0 +1,94 @@ +--- +title: Empacotando e Instalando +slug: Mozilla/Add-ons/WebExtensions/Empacotando_e_instalando +translation_of: Mozilla/Add-ons/WebExtensions/Temporary_Installation_in_Firefox +--- +<h2 id="Packaging_your_extension">Packaging your extension</h2> + +<div class="note"> +<p>Nós estamos trabalhando em uma GUI para empacotar e carregar extensões. Veja <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1185460">Bug 1185460</a> para mais informações. Enquanto isso, siga as etapas abaixo.</p> +</div> + +<p>Firefox extensões são empacotados como arquivos XPI, que nada mais são arquivos ZIP mas com extensão ".xpi".</p> + +<p>Uma dica para empacotar o arquivo você precisa "zipar" todos os arquivos que está na root do seu diretório.</p> + +<h3 id="Windows">Windows</h3> + +<ol> + <li>Abra a pasta com seus arquivos da extensão.</li> + <li>Selecione todos os arquivos.</li> + <li>Clique com o direito e escolha Enviar para → Pasta Compactada.</li> + <li>Renomeie o arquivo de "something.zip" para "something.xpi".</li> +</ol> + +<p><img alt="" src="https://mdn.mozillademos.org/files/11949/install-windows.png" style="display: block; height: 576px; margin-left: auto; margin-right: auto; width: 800px;"></p> + +<h3 id="Mac_OS_X">Mac OS X</h3> + +<ol> + <li>Abra a pasta com seus arquivos da extensão.</li> + <li>Selecione todos os arquivos.</li> + <li>Clique com o direito e escolha Compress <em>n</em> Items.</li> + <li>Renomeie o arquivo de<code> Archive.zip</code> para <code>something.xpi</code>.</li> +</ol> + +<p><img alt="" src="https://mdn.mozillademos.org/files/11951/install-osx.png" style="display: block; height: 449px; margin-left: auto; margin-right: auto; width: 800px;"></p> + +<h3 id="Linux_Mac_OS_X_Terminal">Linux / Mac OS X Terminal</h3> + +<ol> + <li><code>cd path/to/my-extension/</code></li> + <li><code>zip -r ../my-extension.xpi *</code></li> +</ol> + +<h2 id="Installing_your_extension">Installing your extension</h2> + +<ol> + <li>Digite no caminho de URL <code>about:addons</code></li> + <li>Clique e araste o arquivo XPI para dentro da página, ou abra o menu de ferramentas e escolha "Install Add-On From File..."</li> + <li>Clique instalar no dialog que irá aparecer</li> +</ol> + +<h2 id="Instalando_suas_extensões_no_Firefox_OS">Instalando suas extensões no Firefox OS</h2> + +<p>You can install your extension from <a href="/en-US/docs/Tools/WebIDE">WebIDE</a> running on a Desktop connected via USB or Wifi. Open "path/to/my-extension/" as a Packaged App in WebIDE.</p> + +<p>When the manifest.json validation status is valid you will be able to Install and Run your extension on the attached Firefox OS device running a nightly build of Firefox OS.</p> + +<p>The extension will first have to be enabled in Settings->Add-ons on the Firefox OS device.</p> + +<h2 id="Soluções_de_problemas">Soluções de problemas</h2> + +<p>There are a few common problems that you might run into:</p> + +<h3 id="Este_add-on_não_poderá_ser_instalado_porque_não_pode_ser_verificado.">"Este add-on não poderá ser instalado porque não pode ser verificado."</h3> + +<ul> + <li>Make sure you're using <a href="https://nightly.mozilla.org/">Nightly</a> and that <code>xpinstall.signatures.required</code> is <code>false</code> in <code>about:config</code>.</li> + <li>Learn more about <a href="/en-US/docs/Mozilla/Add-ons/Distribution">add-on signing and distribution</a>.</li> +</ul> + +<h3 id="Este_add-on_não_pode_ser_instalado_porque_pode_está_corrompido.">"Este add-on não pode ser instalado porque pode está corrompido."</h3> + +<ul> + <li>Make sure you zipped your add-ons files directly, <em>not</em> the folder <em>containing</em> your add-ons files. Your manifest.json must be at the root of the zip file.</li> + <li>Make sure you are using a <a href="https://nightly.mozilla.org/">Nightly</a> build of Firefox.</li> +</ul> + +<h3 id="Nada_aconteceu">Nada aconteceu</h3> + +<ul> + <li>Make sure your file name actually ends in <code>.xpi</code>, since some operating systems <em>really</em> like to hide file extensions. + + <ul> + <li>On Windows, check with View → Show / Hide: File Name Extensions.</li> + <li>On Mac OS X, check with File → Get Info → Name and Extension.</li> + </ul> + </li> + <li>It's possible you misclicked and dismissed the installation prompt. Look for a puzzle piece icon next to the Back button in Nightly. Click that to bring the popup back.</li> +</ul> + +<h3 id="Observe_o_console">Observe o console</h3> + +<p>Some additional error information relating to how your extension was extracted and loaded might be available in the <a href="/en-US/docs/Tools/Browser_Console">Browser Console</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/examples/index.html b/files/pt-br/mozilla/add-ons/webextensions/examples/index.html new file mode 100644 index 0000000000..3b0c265377 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/examples/index.html @@ -0,0 +1,30 @@ +--- +title: Exemplos de Extensões +slug: Mozilla/Add-ons/WebExtensions/Examples +tags: + - WebExntesoes +translation_of: Mozilla/Add-ons/WebExtensions/Examples +--- +<div>{{AddonSidebar}}</div> + +<div>Para ajudar a ilustrar como desenvolver extensões, nós mantemos um repositório com simples exemplos de extensões em <a href="https://github.com/mdn/webextensions-examples">https://github.com/mdn/webextensions-examples</a>. Este artigo descreve a WebExtension APIs utilizadas neste respositório.</div> + +<div> </div> + +<div>Estes exemplos funcionam no Firefox Nightly: A maioria funciona em versões anteriores do Firefox, porém verifique a chave <a href="/en-US/Add-ons/WebExtensions/manifest.json/applications">strict_min_version</a> no manifest.json da extensão por certificação.</div> + +<div> </div> + +<div>Se você quiser experimentar estes exemplos, você tem três opções principais:</div> + +<div> </div> + +<ol> + <li>Clonar o repositório, então carregue a extensão diretamente de seu diretório de origem, usando o recurso <a href="/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">"Load Temporary Add-on"</a>. A extensão permanecerá carregada até você reiniciar o Firefox.</li> + <li>Clonar o repositório, então use a ferramenta linha de comando <a href="/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext">web-ext</a> para executar o Firefox com a extensão instalada.</li> + <li>Clonar o repositório, então vá até o diretório de <a href="https://github.com/mdn/webextensions-examples/tree/master/build">build</a> (construção). Isto contém as versões construídas e assinadas de todos os exemplos, então você pode simplesmente abrir eles no Firefox (usando Arquivo/Abrir arquivo) e instalar eles permanentemente, como uma extensão que você pode instalar de <a href="https://addons.mozilla.org/en-US/firefox/">addons.mozilla.org</a>.</li> +</ol> + +<p>Se você quer contribuir com o respositório, <a href="https://github.com/mdn/webextensions-examples/blob/master/CONTRIBUTING.md">nos envie um pull request.</a></p> + +<p>{{WebExtAllExamples}}</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/index.html b/files/pt-br/mozilla/add-ons/webextensions/index.html new file mode 100644 index 0000000000..862d00ba21 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/index.html @@ -0,0 +1,138 @@ +--- +title: Extensões do navegador +slug: Mozilla/Add-ons/WebExtensions +tags: + - Extensões + - Passo a passo + - WebExtension +translation_of: Mozilla/Add-ons/WebExtensions +--- +<p class="summary"><span class="seoSummary">Extensões são capazes de extender e modificar a capacidade de um navegador. As extensões para Firefox são criadas usando a API WebExtensions, um sistema comum a vários navegadores para desenvolvimento de extensões.</span> Em grande parte, o sistema é compatível com a <a class="external-icon external" href="https://developer.chrome.com/extensions">API de extensões</a> suportada pelo Google Chrome, Opera e <a href="https://browserext.github.io/browserext/">W3C Draft Community Group</a>.</p> + +<p>Extensões escritas para esses navegadores na maioria dos casos vão funcionar no Firefox ou <a href="https://developer.microsoft.com/microsoft-edge/platform/documentation/extensions/">Microsoft Edge</a> com <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Porting_from_Google_Chrome">apenas algumas alterações</a>. A API é também totalmente compatível com o <a href="https://developer.mozilla.org/Firefox/Multiprocess_Firefox">multiprocessamento do Firefox</a>.</p> + +<p>Se você tem dúvidas ou sugestões, ou precisa de ajuda para migrar um complemento legado para usar APIs WebExtensions, pode entrar em contato conosco pela <a class="external external-icon" href="https://mail.mozilla.org/listinfo/dev-addons">newsletter de desenvolvimento de complementos </a>ou <a href="irc://irc.mozilla.org/webextensions">#webextensions</a> no <a class="external-icon external" href="https://wiki.mozilla.org/IRC">IRC</a>.</p> + +<div class="row topicpage-table"> +<div class="section"> +<h3 id="Começando">Começando</h3> + +<ul> + <li><a href="/Add-ons/WebExtensions/What_are_WebExtensions">O que é uma extensão </a></li> + <li><a href="/Add-ons/WebExtensions/Your_first_WebExtension">Sua primeira extensão</a></li> + <li><a href="/Add-ons/WebExtensions/Your_second_WebExtension">Sua segunda extensão</a></li> + <li><a href="/Add-ons/WebExtensions/Anatomy_of_a_WebExtension">Anatomia de uma extensão</a></li> + <li><a href="/Add-ons/WebExtensions/Examples">Extensões de exemplo</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/What_next_">E depois?</a></li> +</ul> + +<h3 id="Conceitos">Conceitos</h3> + +<ul> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/API">Visão geral da API JavaScript</a></li> + <li><a href="/Add-ons/WebExtensions/Content_scripts">Scripts de conteúdo</a></li> + <li><a href="/Add-ons/WebExtensions/Match_patterns">Padrões de correspondência</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Working_with_files">Trabalhando com arquivos</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Internationalization">Internacionalização</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Security_best_practices">Melhores práticas de segurança</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">Política de segurança de conteúdo</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Native_messaging">Troca de mensagens nativa</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Using_the_devtools_APIs">Usando as APIs devtools</a></li> + <li><a href="/Add-ons/WebExtensions/User_experience_best_practices">Melhores práticas de experiência do usuário</a></li> + <li><a href="/Add-ons/WebExtensions/Native_manifests">Manifestos nativos</a></li> +</ul> + +<h3 id="Interface_do_usuário">Interface do usuário</h3> + +<ul> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface">Introdução</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_action">Botão na barra de ferramenta</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Popups">Botão na barra de ferramenta com um popup</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Page_actions">Botão na barra de endereços</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Popups">Botão na barra de endereços com um popup</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items">Itens de menu de contexto</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars">Painéis laterais</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages">Página de opções</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Bundled_web_pages">Páginas da extensão</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Notifications">Notificação</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/Omnibox">Sugestões na barra de endereços</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/user_interface/devtools_panels">Painéis na ferramenta do desenvolvedor</a></li> +</ul> + +<h3 id="Como">Como</h3> + +<ul> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests">Interceptar solicitações HTTP</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Modify_a_web_page">Modificar uma página da web</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Add_a_button_to_the_toolbar">Adicionar um botão na barra de ferramenta</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Implement_a_settings_page">Implementar uma página de configurações</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipboard">Interagir com a área de transferência</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Working_with_the_Tabs_API">Trabalhar com a API de abas</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Work_with_the_Bookmarks_API">Trabalhar com a API de favoritos</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Work_with_the_Cookies_API">Trabalhar com a API de cookies</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Work_with_contextual_identities">Trabalhar com identidades contextuais</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Safely_inserting_external_content_into_a_page">Inserir conteúdo externo</a></li> +</ul> + +<h3 id="Portabilidade">Portabilidade</h3> + +<ul> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Porting_a_legacy_Firefox_add-on">Portando uma extensão do Google Chrome</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Porting_a_legacy_Firefox_add-on">Portando uma extensão legada do Firefox</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Developing_WebExtensions_for_Firefox_for_Android">Desenvolvendo para o Firefox para Android</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Embedded_WebExtensions">WebExtensions incorporadas</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_the_Add-on_SDK">Comparação com Add-on SDK</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_XUL_XPCOM_extensions">Comparação com extensões XUL/XPCOM</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities">Incompatibilidades com Chrome</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Differences_between_desktop_and_Android">Diferenças entre desktop e Android</a></li> +</ul> + +<h3 id="Fluxo_de_trabalho_do_Firefox">Fluxo de trabalho do Firefox</h3> + +<ul> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/User_experience_best_practices">Experiência do usuário</a></li> + <li><a href="/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">Instalando</a></li> + <li><a href="/Add-ons/WebExtensions/Debugging">Depurando</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Testing_persistent_and_restart_features">Testando funcionalidades de persistência e reinicialização</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Getting_started_with_web-ext">Começando com web-ext</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/web-ext_command_reference">Referência de comandos web-ext</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID">Extensões e ID de complementos</a></li> + <li><a href="/Add-ons/WebExtensions/Alternative_distribution_options">Opções de distribuição alternativas</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Request_the_right_permissions">Solicitando as permissões corretas</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Sharing_objects_with_page_scripts">Compartilhando objetos com scripts de páginas</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Publishing_your_WebExtension">Publicando sua extensão</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Retiring_your_extension">Descontinuando sua extensão</a></li> + <li><a href="/Add-ons/WebExtensions/Tips">Dicas e truques</a></li> +</ul> +</div> + +<div class="section"> +<h3 id="Referências">Referências</h3> + +<h4 id="APIs_JavaScript">APIs JavaScript</h4> + +<ul> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/API">Visão geral da API JavaScript </a></li> + <li><a href="/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs">Tabelas de compatibilidade de navegadores com APIs JavaScript</a></li> +</ul> + +<div class="twocolumns">{{ ListSubpages ("/en-US/Add-ons/WebExtensions/API") }}</div> + +<h4 id="Chaves_do_Manifest">Chaves do Manifest</h4> + +<ul> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/manifest.json">Visão geral do manifest.json</a></li> + <li><a href="/docs/Mozilla/Add-ons/WebExtensions/Browser_compatibility_for_manifest.json">Compatibilidade de navegadores com manifest.json</a></li> +</ul> + +<div class="twocolumns">{{ ListSubpages ("/Add-ons/WebExtensions/manifest.json") }}</div> +</div> +</div> + +<div class="SnapLinksContainer" style="margin-left: 0px; margin-top: 0px; display: none;"> +<div class="SL_SelectionRect"> +<div class="SL_SelectionLabel"></div> +</div> +</div> + +<div>{{AddonSidebar}}</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/intercept_http_requests/index.html b/files/pt-br/mozilla/add-ons/webextensions/intercept_http_requests/index.html new file mode 100644 index 0000000000..f79b4debaa --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/intercept_http_requests/index.html @@ -0,0 +1,155 @@ +--- +title: Interceptando requisições HTTP +slug: Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests +translation_of: Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests +--- +<div>{{AddonSidebar}}</div> + +<p>Para interceptar uma requisição HTTP, utilize a API {{WebExtAPIRef("webRequest")}}. Esta API permite adicionar listeners para vários estágios de uma requisição HTTP. Nos listeners, você pode:</p> + +<ul> + <li>ter acesso ao cabeçalho e o corpo da requisição e, o cabeçalho da resposta</li> + <li>cancelar e redirecionar requisições</li> + <li>modificar requisições e o cabeçalho da resposta</li> +</ul> + +<p>Neste artigo você verá três diferentes usos para o módulo <code>webRequest</code>:</p> + +<ul> + <li>Logando como as URLs da requisição são feitas.</li> + <li>Redirecionando requisições.</li> + <li>Modificando os cabeçalhos da requisição.</li> +</ul> + +<h2 id="Logando_URLs_de_requisição">Logando URLs de requisição</h2> + +<p>Crie um novo diretório chamado "requests". Neste diretório, crie um arquivo chamado "manifest.json" com seguinte conteúdo:</p> + +<pre class="brush: json">{ + "description": "Demonstrating webRequests", + "manifest_version": 2, + "name": "webRequest-demo", + "version": "1.0", + + "permissions": [ + "webRequest", + "<all_urls>" + ], + + "background": { + "scripts": ["background.js"] + } +}</pre> + +<p>A seguir, crie um arquivo chamado"background.js" com o seguinte conteúdo:</p> + +<pre class="brush: js">function logURL(requestDetails) { + console.log("Loading: " + requestDetails.url); +} + +browser.webRequest.onBeforeRequest.addListener( + logURL, + {urls: ["<all_urls>"]} +); + +</pre> + +<p>Aqui vamos usar {{WebExtAPIRef("webRequest.onBeforeRequest", "onBeforeRequest")}} para chamar a função <code>logURL()</code> antes do inicio da requisição. A função <code>logURL()</code> guarda a URL da requisição para o objeto event e efetua log no console do navegador. O <a href="/en-US/Add-ons/WebExtensions/Match_patterns">padrão</a> <code>{urls: ["<all_urls>"]}</code> significa que iremos interceptar as requisições HTTP para todas URLs.</p> + +<p>Para testá-lo, <a href="/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">instale a extensão</a>, <a href="/en-US/docs/Tools/Browser_Console">abra o console do navegador</a>, e abra alguma página da internet. No console do navegador você pode ver as URLs para alguns recursos que o navegador requisita:</p> + +<p>{{EmbedYouTube("X3rMgkRkB1Q")}}</p> + +<h2 id="Redirecionando_requisições">Redirecionando requisições</h2> + +<p>Agora vamos usar o <code>webRequest</code> para redirecionar requisições HTTP. Primeiro, substitua o manifest.json com o seguinte conteúdo:</p> + +<pre class="brush: json">{ + + "description": "Demonstrating webRequests", + "manifest_version": 2, + "name": "webRequest-demo", + "version": "1.0", + + "permissions": [ + "webRequest", + "webRequestBlocking", + "https://developer.mozilla.org/", + "https://mdn.mozillademos.org/" + ], + + "background": { + "scripts": ["background.js"] + } + +}</pre> + +<p>A única alteração aqui é a adição da <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissão</a> <code>"webRequestBlocking"</code>. Precisamos invocar esta permissão extra toda vez que estamos ativamente modificando a requisição.</p> + +<p>A seguir, substitua o "background.js" com o seguinte conteúdo:</p> + +<pre class="brush: js">var pattern = "https://mdn.mozillademos.org/*"; + +function redirect(requestDetails) { + console.log("Redirecting: " + requestDetails.url); + return { + redirectUrl: "https://38.media.tumblr.com/tumblr_ldbj01lZiP1qe0eclo1_500.gif" + }; +} + +browser.webRequest.onBeforeRequest.addListener( + redirect, + {urls:[pattern], types:["image"]}, + ["blocking"] +);</pre> + +<p>Novamente vamos usar event listener {{WebExtAPIRef("webRequest.onBeforeRequest", "onBeforeRequest")}} apenas para executar a função antes que cada requisição seja feita. Está função irá substituir a URL desejada com o <code>redirectUrl</code> especificado na função.</p> + +<p>Desta vez não estamos interceptando cada requisição: a opção <code>{urls:[pattern], types:["image"]}</code> especifica apenas o que deveria interceptar requisições(1) para URLs residindo sob o "https://mdn.mozillademos.org/" (2) para o recurso de imagens. Veja mais em {{WebExtAPIRef("webRequest.RequestFilter")}}.</p> + +<p>Observe também que estamos passando uma opção chamada <code>"blocking"</code>: precisamos informá-la toda vez que desejamos modificar a requisição. Isto faz com que a função bloqueie a requisição de rede, então o navegador espera pelo event listener retornar antes de continuar. Veja a documentação {{WebExtAPIRef("webRequest.onBeforeRequest")}} para mais no <code>"blocking"</code>.</p> + +<p>Teste abrindo uma página no MDN que possua muitas imagens (por exemplo <a href="https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor">https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor</a>), <a href="/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox#Reloading_a_temporary_add-on">recarregue a extensão</a> e então recarregue a página:</p> + +<p>{{EmbedYouTube("ix5RrXGr0wA")}}</p> + +<h2 id="Modificando_os_cabeçalhos_da_requisição">Modificando os cabeçalhos da requisição</h2> + +<p>Finalmente iremos utilizar <code>webRequest</code> para modificar os cabeçalhos da requisição. Neste example iremos modificar o cabeçalho "User-Agent" que identifica o navegador como Opera 12.16, mas apenas quando visitamos páginas sob "http://useragentstring.com/".</p> + +<p>O "manifest.json" pode permanecer do mesmo jeito.</p> + +<p>Modifique o "background.js" com este código:</p> + +<pre class="brush: js">var targetPage = "http://useragentstring.com/*"; + +var ua = "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16"; + +function rewriteUserAgentHeader(e) { + e.requestHeaders.forEach(function(header){ + if (header.name.toLowerCase() == "user-agent") { + header.value = ua; + } + }); + return {requestHeaders: e.requestHeaders}; +} + +browser.webRequest.onBeforeSendHeaders.addListener( + rewriteUserAgentHeader, + {urls: [targetPage]}, + ["blocking", "requestHeaders"] +);</pre> + +<p>Aqui vamos usar event listener {{WebExtAPIRef("webRequest.onBeforeSendHeaders", "onBeforeSendHeaders")}} para executar a função somente quando os cabeçalhos forem enviados.</p> + +<p>O event listener será chamada somente para requisitar as URLs que batem com o <a href="/en-US/Add-ons/WebExtensions/Match_patterns">padrão</a>. Observe também que passamos novamente <code>"blocking"</code> como uma opção. Passamos também <code>"requestHeaders"</code>, que significa que o listener será passado como um array contendo os cabeçalhos da requisição que desejamos enviar. Veja {{WebExtAPIRef("webRequest.onBeforeSendHeaders")}} para mais informações dessas opções.</p> + +<p>A função listener procura pelo cabeçalho "User-Agent" no array de cabeçalhos da requisição, substitui seu valor com o valor <code>ua</code> da variável, e retorna o array modificado. Este array modificado será agora enviado para o servidor.</p> + +<p>Teste abrindo <a href="http://useragentstring.com/">useragentstring.com</a> e veja como ele identifica o navegador como sendo o Firefox. Então, recarregue a extensão, recarregue também o <a href="http://useragentstring.com/">useragentstring.com</a> e veja que agora o Firefox é identificado como Opera:</p> + +<p>{{EmbedYouTube("SrSNS1-FIx0")}}</p> + +<h2 id="Aprenda_mais">Aprenda mais</h2> + +<p>Para aprender sobre todas as coisas que você pode fazer com a API <code>webRequest</code>, veja sua <a href="/en-US/Add-ons/WebExtensions/API/WebRequest">documentação de referência</a>.</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/manifest.json/index.html b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/index.html new file mode 100644 index 0000000000..b8f93649d2 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/index.html @@ -0,0 +1,105 @@ +--- +title: manifest.json +slug: Mozilla/Add-ons/WebExtensions/manifest.json +tags: + - Add-ons + - Extensions + - NeedsTranslation + - TopicStub + - WebExtensions +translation_of: Mozilla/Add-ons/WebExtensions/manifest.json +--- +<div>{{AddonSidebar}}</div> + +<p>The manifest.json file is a <a href="/en-US/docs/Glossary/JSON">JSON</a>-formatted file, and is the only file that every WebExtension must contain.</p> + +<p>Using manifest.json, you specify basic metadata about your extension such as the name and version, and can also specify aspects of your extension's functionality, such as background scripts, content scripts, and browser actions.</p> + +<p>manifest.json keys are listed below:</p> + +<div class="twocolumns">{{ ListSubpages ("/en-US/Add-ons/WebExtensions/manifest.json") }}</div> + +<div class="twocolumns"> </div> + +<p><code>"manifest_version"</code>, <code>"version"</code>, and <code>"name"</code> are the only mandatory keys. <code>"default_locale"</code> must be present if the "_locales" directory is present and must be absent otherwise. <code>"applications"</code> is not supported in Google Chrome, and is mandatory in Firefox before Firefox 48 and Firefox for Android.</p> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<p>{{Compat("webextensions.manifest")}}</p> + +<h2 id="Example">Example</h2> + +<p>Quick syntax example for manifest.json:</p> + +<pre class="brush: json">{ + "applications": { + "gecko": { + "id": "addon@example.com", + "strict_min_version": "42.0" + } + }, + + "background": { + "scripts": ["jquery.js", "my-background.js"], + "page": "my-background.html" + }, + + "browser_action": { + "default_icon": { + "19": "button/geo-19.png", + "38": "button/geo-38.png" + }, + "default_title": "Whereami?", + "default_popup": "popup/geo.html" + }, + + "commands": { + "toggle-feature": { + "suggested_key": { + "default": "Ctrl+Shift+Y", + "linux": "Ctrl+Shift+U" + }, + "description": "Send a 'toggle-feature' event" + } + }, + + "content_security_policy": "script-src 'self' https://example.com; object-src 'self'", + + "content_scripts": [ + { + "exclude_matches": ["*://developer.mozilla.org/*"], + "matches": ["*://*.mozilla.org/*"], + "js": ["borderify.js"] + } + ], + + "default_locale": "en", + + "description": "...", + + "icons": { + "48": "icon.png", + "96": "icon@2x.png" + }, + + "manifest_version": 2, + + "name": "...", + + "page_action": { + "default_icon": { + "19": "button/geo-19.png", + "38": "button/geo-38.png" + }, + "default_title": "Whereami?", + "default_popup": "popup/geo.html" + }, + + "permissions": ["webNavigation"], + + "version": "0.1", + + "web_accessible_resources": ["images/my-image.png"] +}</pre> + +<p> </p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/manifest.json/permissões/index.html b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/permissões/index.html new file mode 100644 index 0000000000..41312323b4 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/permissões/index.html @@ -0,0 +1,184 @@ +--- +title: permissões +slug: Mozilla/Add-ons/WebExtensions/manifest.json/permissões +translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/permissions +--- +<div>{{AddonSidebar}}</div> + +<table class="fullwidth-table standard-table"> + <tbody> + <tr> + <th scope="row" style="width: 30%;">Tipo</th> + <td><code>Array</code></td> + </tr> + <tr> + <th scope="row">Obrigatório</th> + <td>Não</td> + </tr> + <tr> + <th scope="row">Examplo</th> + <td> + <pre class="brush: json no-line-numbers"> +"permissions": [ + "*://developer.mozilla.org/*", + "webRequest" +]</pre> + </td> + </tr> + </tbody> +</table> + +<p>Use a chave <code>permissions</code> para solicitar privilégios especiais para sua extensão. Esta chave é um array de strings, onde cada string é uma solicitação para uma permissão.</p> + +<p>Se você solicitar permissões usando esta chave, o navegador poderá informar ao usuário que a extensão a ser instalada está solicitando certos privilégios, e perguntar se aceita ou não conceder esses privilégios. O navegador também poderá permitir que o usuário inspecione os privilégios de uma extensão depois que essa for instalada.</p> + +<p>A chave pode conter três tipos de permissões:</p> + +<ul> + <li>permissões de servidor (host)</li> + <li>permissões de API</li> + <li>a permissão activeTab (aba ativa)</li> +</ul> + +<h2 id="Permissões_de_servidor_(host)">Permissões de servidor (host)</h2> + +<p>Permissões de servidor são espscificadas como <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns">match patterns</a>. Cada <em>pattern</em> identifica um grupo de URLs para os quais a extensão solicita privilégios adicionais. Por exemplo, uma permissão de servidor poderia ser <code>"*://developer.mozilla.org/*"</code>.</p> + +<p>Os privilégios adicionais incluem:</p> + +<ul> + <li>acesso <a href="/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a> e <a href="/en-US/docs/Web/API/Fetch_API">fetch</a> para aquelas origens sem restrições <em>cross-origin</em> (mesmo para requisições feitas a partir de <em>content scripts</em>)</li> + <li>habilidade de injetar scripts programaticamente (usando <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript">tabs.executeScript</a>) em páginas servidas a partir daquelas origens</li> + <li>habilidade de receber eventos a partir da API <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest</a> para aqueles servidores</li> + <li>habilidade de acessar cookies daquele servidor usando a API <a href="/en-US/Add-ons/WebExtensions/API/cookies">cookies</a>, caso a permissão de API "cookies" também esteja incluída.</li> + <li>desconsiderar a proteção contra rastreamento se o servidor for um domínio completo sem asteriscos. Não funciona com <code><all_urls></code>.</li> +</ul> + +<p>No Firefox, da versão 56 em diante, extensões recebem automaticamente permissões de servidor para sua própria origem, que é na forma:</p> + +<pre><code>moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/</code></pre> + +<p>onde <code>60a20a9b-1ad4-af49-9b6c-c64c98c37920</code> é o ID interno da extensão. A extensão pode obter essa URL programaticamente chamando <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/extension/getURL">extension.getURL()</a>:</p> + +<pre class="brush: js line-numbers language-js"><code class="language-js">browser<span class="punctuation token">.</span>extension<span class="punctuation token">.</span><span class="function token">getURL</span><span class="punctuation token">(</span><span class="string token">""</span><span class="punctuation token">);</span> +// moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/</code></pre> + +<h2 id="Permissões_de_API">Permissões de API</h2> + +<p>Permissões de API são especificadas como palavras-chave. Cada palavra-chave nomeia uma API WebExtension que a extensão gostaria de usar.</p> + +<p>As seguintes palavras-chave estão atualmente disponíveis:</p> + +<ul> + <li><code>activeTab</code></li> + <li><code>alarms</code></li> + <li><code>background</code></li> + <li><code>bookmarks</code></li> + <li><code>browserSettings</code></li> + <li><code>browsingData</code></li> + <li><code>contentSettings</code></li> + <li><code>contextMenus</code></li> + <li><code>contextualIdentities</code></li> + <li><code>cookies</code></li> + <li><code>debugger</code></li> + <li><code>dns</code></li> + <li><code>downloads</code></li> + <li><code>downloads.open</code></li> + <li><code>find</code></li> + <li><code>geolocation</code></li> + <li><code>history</code></li> + <li><code>identity</code></li> + <li><code>idle</code></li> + <li><code>management</code></li> + <li><code>menus</code></li> + <li><code>nativeMessaging</code></li> + <li><code>notifications</code></li> + <li><code>pageCapture</code></li> + <li><code>pkcs11</code></li> + <li><code>privacy</code></li> + <li><code>proxy</code></li> + <li><code>search</code></li> + <li><code>sessions</code></li> + <li><code>storage</code></li> + <li><code>tabHide</code></li> + <li><code>tabs</code></li> + <li><code>theme</code></li> + <li><code>topSites</code></li> + <li><code>webNavigation</code></li> + <li><code>webRequest</code></li> + <li><code>webRequestBlocking</code></li> +</ul> + +<p>Na maioria dos casos, a permissão apenas concede acesso à API, com as seguintes exceções:</p> + +<ul> + <li> <code>tabs</code> dá acesso a <a href="/en-US/Add-ons/WebExtensions/API/tabs">partes privilagiadas da API <code>tabs</code></a>: <code>Tab.url</code>, <code>Tab.title</code> e <code>Tab.faviconUrl</code>. No Firefox, você também precisa <code>tabs</code> se quiser incluir <code>url</code> no parâmetro <code>queryInfo</code> para <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query">tabs.query()</a></code>. O resto ad API <code>tabs</code> pode ser usado sem solicitar nenhuma permissão.</li> + <li><code>webRequestBlocking</code> permite usar o argumento "blocking", assim você pode <a href="/en-US/Add-ons/WebExtensions/API/WebRequest">modificar e cancelar requisições</a>.</li> + <li><code>downloads.open</code> permite usar a API {{WebExtAPIRef("downloads.open()")}}.</li> + <li><code>tabHide</code> permite usar a API {{WebExtAPIRef("tabs.hide()")}}.</li> +</ul> + +<h2 id="Permissão_activeTab_(aba_ativa)">Permissão activeTab (aba ativa)</h2> + +<p>Esta permissão é especificada como <code>"activeTab"</code>. Se uma extensão tem a permissão <code>activeTab</code>, quando o usuário interage com a extensão, a extensão recebe privilégios adicionais somente para a aba ativa.</p> + +<p>"Interação do usuário" inclui:</p> + +<ul> + <li>o usuário clica na ação da extensão, no navegador ou na página</li> + <li>o usuário seleciona um item da extensão no menu de contexto</li> + <li>o usuário ativa um atalho de teclado definido pela extensão</li> +</ul> + +<p>Os privilégios adicionais são:</p> + +<ul> + <li>habilidade de injetar JavaScript ou CSS na aba programaticamente, usando <code><a href="/en-US/Add-ons/WebExtensions/API/tabs/executeScript">browser.tabs.executeScript</a></code> e <code><a href="/en-US/Add-ons/WebExtensions/API/tabs/insertCSS">browser.tabs.insertCSS</a></code></li> + <li>acesso a essas partes privilegiadas da API <em>tabs</em> na aba atual: <code>Tab.url</code>, <code>Tab.title</code> e <code>Tab.faviconUrl</code>.</li> +</ul> + +<p>A intenção desta permissão é permitir que extensões executem um caso de uso comum, sem ter que lhes dar permissões poderosas demais. Muitas extensões querem "fazer alguma coisa com a página atual quando o usuário pede". Por exemplo, considere uma extensão que queira executar um script na página atual quando o usuário clicar em uma ação do navegador. Se a permissão <code>activeTab</code> não existisse, a extensão precisaria pedir a permissão de servidor <code><all_urls></code>. Mas isso daria à extensão mais poder que o necessário: ela poderia executar scripts em qualquer aba e quando quisesse, em vez de apenas na aba atual e somente em resposta a uma ação do usuário.</p> + +<p>Note que você só pode ter acesso à aba ou dado que estava ali, quando a interação do usuário ocorreu (por exemplo, um clique do mouse). Quando a aba ativa muda para outra página, por exemplo devido a concluir o carregamento ou algum outro evento, a permissão não lhe concede mais acesso à aba.</p> + +<p>Normalmente, a aba a qual foi concedido <code>activeTab</code> é somente a aba ativa atual, exceto em um caso. A API <code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/menus">menus</a></code> permite a uma extensão criar um item de menu que é exibido se o usuário abrir o menu de contexto sobre uma aba (ou seja, no elemento na lista de abas que permite ao usuário mudar de uma aba para outra). Se o usuário clicar em um item desses, a permissão <code>activeTab</code> é concedida para a aba em que o usuário clicou, mesmo que essa não seja a aba ativa no momento (de acordo com Firefox 63, {{bug(1446956)}}).</p> + +<h2 id="Acesso_à_área_de_transferência">Acesso à área de transferência</h2> + +<p>Existem duas permissões que permitem à extensão interagir com a área de transferência:</p> + +<ul> + <li><code>clipboardWrite</code>: escrever para a área de transferência usando <code>document.execCommand("copy")</code> ou <code>document.execCommand("cut")</code></li> + <li><code>clipboardRead</code>: ler da área de transferência usando <code>document.execCommand("paste")</code></li> +</ul> + +<p>Consulte <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipboard">Interação com a área de transferência</a> para saber todos os detalhes sobre isso.</p> + +<h2 id="Armazenamento_ilimitado">Armazenamento ilimitado</h2> + +<p>A permissão <code>unlimitedStorage</code>:</p> + +<ul> + <li>permite que extensões exceder qualquer quota imposta pela API {{WebExtAPIRef("storage.local")}}</li> + <li>no Firefox, permite que extensões criem um <a href="/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria#Firefox_specifics">banco de dados IndexedDB "persistente"</a>, sem que o navegador peça ao usuário permissão no momento em que o banco de dados é criado.</li> +</ul> + +<h2 id="Examplos">Examplos</h2> + +<pre class="brush: json no-line-numbers"> "permissions": ["*://developer.mozilla.org/*"]</pre> + +<p>Solicita acesso privilegiado a páginas sob developer.mozilla.org.</p> + +<pre class="brush: json no-line-numbers"> "permissions": ["tabs"]</pre> + +<p>Solicita acesso a partes privilegiadas da API <code>tabs</code>.</p> + +<pre class="brush: json no-line-numbers"> "permissions": ["*://developer.mozilla.org/*", "tabs"]</pre> + +<p>Solicita ambas as permissões anteriores.</p> + +<h2 id="Compatibilidade_com_navegadores">Compatibilidade com navegadores</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("webextensions.manifest.permissions")}}</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/manifest.json/short_name/index.html b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/short_name/index.html new file mode 100644 index 0000000000..10566678d3 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/short_name/index.html @@ -0,0 +1,43 @@ +--- +title: short_name +slug: Mozilla/Add-ons/WebExtensions/manifest.json/short_name +tags: + - Manifesto + - Sort name +translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/short_name +--- +<div>{{AddonSidebar}}</div> + +<table class="fullwidth-table standard-table"> + <tbody> + <tr> + <th scope="row" style="width: 30%;">Tipo</th> + <td><code>String</code></td> + </tr> + <tr> + <th scope="row">Obrigatório</th> + <td>No</td> + </tr> + <tr> + <th scope="row">Exemplo</th> + <td> + <pre class="brush: json no-line-numbers"> +"short_name": "Minha Extensão"</pre> + </td> + </tr> + </tbody> +</table> + +<p>Nome abreviado (short name) da extensão. Se informado, ele será usado em contextos onde o campo de nome for muito longo. É recomendado que o nome abreviado não deva exceder 12 caracteres. Se o campo do nome abreviado não for incluído no manifest.json, então o nome será usado em vez disso e pode ser truncado. </p> + +<p>Isto é um <a href="/en-US/Add-ons/WebExtensions/Internationalization#Internationalizing_manifest.json">propriedade localizável</a>.</p> + +<h2 id="Exemplo">Exemplo</h2> + +<pre class="brush: json no-line-numbers">"short_name": "Minha Extensão"</pre> + +<h2 id="Compatibilidade_de_navegadores">Compatibilidade de navegadores</h2> + +<p class="hidden">A tabela de compatibilidade nesta página é gerada de dados estruturados. Se você gostaria de contribuir para os dados, por favor veja <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> e envie-nos um 'pull request'.</p> + +<p>{{Compat("webextensions.manifest.short_name")}}</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/manifest.json/web_accessible_resources/index.html b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/web_accessible_resources/index.html new file mode 100644 index 0000000000..9d13e7e72c --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/manifest.json/web_accessible_resources/index.html @@ -0,0 +1,97 @@ +--- +title: web_accessible_resources +slug: Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources +tags: + - Add-ons + - Extensões +translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources +--- +<p>{{AddonSidebar}}</p> + +<table class="fullwidth-table standard-table"> + <tbody> + <tr> + <th scope="row" style="width: 30%;">Tipo</th> + <td><code>Array</code></td> + </tr> + <tr> + <th scope="row">Obrigatório</th> + <td>No</td> + </tr> + <tr> + <th scope="row">Exemplo</th> + <td> + <pre class="brush: json no-line-numbers"> +"web_accessible_resources": [ + "images/my-image.png" +]</pre> + </td> + </tr> + </tbody> +</table> + +<h2 id="Descrição">Descrição</h2> + +<p>As vezes, você precisa empacotar recursos — por exemplo, imagens, HTML, CSS ou Javascript — com a sua extensão e fazê-la acessível para as páginas web.</p> + +<p>Por exemplo, a <a href="https://github.com/mdn/webextensions-examples/tree/master/beastify">extensão de exemplo Beastify</a> substitui uma página por uma imagem de um animal selecionado pelo usuário. As imagens foram empacotadas com a extensão. Para fazer visível a imagem selecionada, a extensão adiciona elementos <code><a href="/en-US/docs/Web/HTML/Element/img"><img></a></code> cujo atributo <code>src</code> aponta para a imagem do animal. Para que a página da web possa carregar as imagens, elas devem estar disponíveis na extensão.</p> + +<p>With the <code>web_accessible_resources</code> key, you list all the packaged resources that you want to make available to web pages. You specify them as paths relative to the manifest.json file.</p> + +<p>Note that content scripts don't need to be listed as web accessible resources.</p> + +<p>If an extension wants to use {{WebExtAPIRef("webRequest")}} to redirect a public URL (e.g., HTTPS) to a page that's packaged in the extension, then the extension must list the page in the <code>web_accessible_resources</code> key.</p> + +<h3 id="Using_web_accessible_resources">Using web_accessible_resources</h3> + +<p>For example, suppose your extension includes an image file at images/my-image.png, like this:</p> + +<pre class="no-line-numbers">my-extension-files/ + manifest.json + my-background-script.js + images/ + my-image.png</pre> + +<p>To enable a web page to use an <code><a href="/en-US/docs/Web/HTML/Element/img"><img></a></code> element whose <code>src</code> attribute points to this image, you would specify <code>web_accessible_resources</code> like this:</p> + +<pre class="brush: json no-line-numbers">"web_accessible_resources": ["images/my-image.png"]</pre> + +<p>The file is then available using a URL like:</p> + +<pre class="no-line-numbers">moz-extension://<extension-UUID>/images/my-image.png"</pre> + +<p><code><extension-UUID></code> is <strong>not</strong> your extension's ID. This ID is randomly generated for every browser instance. This prevents websites from fingerprinting a browser by examining the extensions it has installed.</p> + +<div class="blockIndicator note"> +<p>In Chrome, an extension's ID is fixed. When a resource is listed in <code>web_accessible_resources</code>, it is accessible as <code>chrome-extension://<your-extension-id>/<path/to/resource></code>. </p> +</div> + +<p>The recommended approach to obtaining the URL of the resource is to use <code><a href="/en-US/Add-ons/WebExtensions/API/runtime/getURL">runtime.getURL</a></code> passing the path relative to manifest.json, for example:</p> + +<pre class="brush: js no-line-numbers">browser.runtime.getURL("images/my-image.png"); +// something like: +// moz-extension://944cfddf-7a95-3c47-bd9a-663b3ce8d699/images/my-image.png</pre> + +<p>This approach gives you have the correct URL regardless of the browser your extension is running on.</p> + +<h3 id="Wildcards">Wildcards</h3> + +<p><code>web_accessible_resources</code> entries can contain wildcards. For example, the following entry would also work to include the resource at "images/my-image.png":</p> + +<pre class="brush: json no-line-numbers"> "web_accessible_resources": ["images/*.png"]</pre> + +<h3 id="Security">Security</h3> + +<p>Note that if you make a page web-accessible, any website may link or redirect to that page. The page should then treat any input (POST data, for examples) as if it came from an untrusted source, just as a normal web page should.</p> + +<h2 id="Example">Example</h2> + +<pre class="brush: json no-line-numbers">"web_accessible_resources": ["images/my-image.png"]</pre> + +<p>Make the file at "images/my-image.png" web accessible.</p> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("webextensions.manifest.web_accessible_resources")}}</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/o_que_vem_a_seguir_/index.html b/files/pt-br/mozilla/add-ons/webextensions/o_que_vem_a_seguir_/index.html new file mode 100644 index 0000000000..7050516e82 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/o_que_vem_a_seguir_/index.html @@ -0,0 +1,56 @@ +--- +title: O que vem a seguir ? +slug: Mozilla/Add-ons/WebExtensions/O_que_vem_a_seguir_ +translation_of: Mozilla/Add-ons/WebExtensions/What_next_ +--- +<div>{{AddonSidebar}}</div> + +<p>Você está pronto para começar a tornar a tua ideia de extensão de navegador uma realidade. Antes de iniciar essa jornada, vale a pena estar ciente de algumas coisas que te ajudarão a torná-la tranquila.</p> + +<h2 id="Teu_ambiente_de_desenvolvimento">Teu ambiente de desenvolvimento</h2> + +<p>Você não precisa de ferramentas de desenvolvimento especiais para criar extensões de navegador: é inteiramente possível criar ótimas extensões de navegador sem mais que um editor de textos. Porém, talvez você tenha desenvolvido para a web e tenha um conjunto de ferramentas e um ambiente que quer usar. Se for assim, você precisa estar ciente de algumas coisas.</p> + +<p>Se você usa ferramentas de minificação ou obfuscação para entregar seu código final, você precisará entregar seu código fonte para <a href="#The_review_process">o processo de revisão AMO</a>. Além disso, as ferramentas que você utiliza, — para minificação, obfuscação e contrução — devem ser open source ( ou oferecer uso gratuito sem limites ) e disponíveis para execução no computador do revisor (Windows, Mac ou Linux). Infelizmente, nossos revisores não podem trabalhar com ferramentas comerciais ou baseadas em web.</p> + +<p><a href="/en-US/Add-ons/Source_Code_Submission#About_build_tools">Aprenda mais acerca de ferramentas de construção</a></p> + +<h2 id="Third-party_libraries">Third-party libraries</h2> + +<p>Third-party libraries are a great way to add complex features or functionality to your browser extensions quickly. When you submit an extension to the <a href="#The_review_processv">AMO review process</a>, the process will also consider any third-party libraries used. To streamline the review, make sure you always download third-party libraries from their official website or repository, and if the library is minified provide a link to the source code. Please note that third-party libraries cannot be modified in any way.</p> + +<p><a href="/en-US/Add-ons/Source_Code_Submission">Learn more about submitting source code</a></p> + +<h2 id="The_Firefox_Add-on_Distribution_Agreement">The Firefox Add-on Distribution Agreement</h2> + +<p>Browser extensions need to be signed to install into the release or beta versions of Firefox. Signing takes place in addons.mozilla.org (AMO) and is subject to the terms and conditions of the Firefox Add-on Distribution Agreement. The goal of the agreement is to ensure Firefox users get access to well supported, quality add-ons that enhance the Firefox experience.</p> + +<p><a href="/Add-ons/AMO/Policy/Agreement">Read the agreement</a></p> + +<p><a href="/en-US/Add-ons/WebExtensions/Distribution">Learn more about signing</a></p> + +<h2 id="The_review_process">The review process</h2> + +<p>When a browser extension is submitted for signing, it's subject to automated review. It may also be subject to a manual review, when the automated review determines that a manual review is needed. Your browser extension won't be signed until it’s passed the automated review and may have its signing revoked if it fails to pass the manual review. The review process follows a strict set of guidelines, so it’s easy to check and avoid any likely review problems.</p> + +<p><a href="/en-US/Add-ons/AMO/Policy/Reviews">Check out the review policy and guidelines</a></p> + +<h2 id="AMO_featured_browser_extensions">AMO featured browser extensions</h2> + +<p>If you choose to list your browser extension on AMO, your extension could be featured on the AMO website, in the Firefox browser’s add-on manager, or elsewhere on a Mozilla website. We've compiled a list of guidelines about how extensions are selected for featuring, by following these guidelines you give your extension the best chance of being featured.</p> + +<p><a href="/en-US/Add-ons/AMO/Policy/Featured">Learn more about getting your add-ons featured</a></p> + +<h2 id="Continue_your_learning_experience">Continue your learning experience</h2> + +<p>Now you know what lies ahead, it's time to dive into more details about browser extension development. In the sections that follow, you’ll discover:</p> + +<ul> + <li>More about the fundamental concepts behind browser extensions, starting with details on how to <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Using_the_JavaScript_APIs">use the JavaScript APIs</a>.</li> + <li>A guide to the <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface">user interface components</a> available to your browser extensions.</li> + <li>A collection of how-to guides on achieving key tasks in your extensions or making use of the JavaScript APIs.</li> + <li>Information on how to port other browser extensions to Firefox.</li> + <li>Details about the Firefox specific workflows you can use to develop browser extensions.</li> + <li>A full reference guide to the JavaScript APIs.</li> + <li>A full reference guide to the Manifest keys.</li> +</ul> diff --git a/files/pt-br/mozilla/add-ons/webextensions/passo-a-passo/index.html b/files/pt-br/mozilla/add-ons/webextensions/passo-a-passo/index.html new file mode 100644 index 0000000000..1e49d92e3c --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/passo-a-passo/index.html @@ -0,0 +1,306 @@ +--- +title: Passo-a-Passo +slug: Mozilla/Add-ons/WebExtensions/Passo-a-Passo +tags: + - Extensões Web + - extensões firefox + - passo-a-passo +translation_of: Mozilla/Add-ons/WebExtensions/Your_second_WebExtension +--- +<p>Neste artigo iremos criar uma Extensão para Firefox do início ao fim.</p> + +<p>A extensão adicionará um novo botão na barra de ferramentas do Firefox. Quando clicar no botão se exibirá um popup habilitando a escolha de um animal. Uma vez que o usuário escolher um animal, a página atual do navegador será substituida por uma imagem do animal escolhido.</p> + +<p>Para implementar esse extensão, será necessário:</p> + +<ul> + <li><strong>definir a ação do navegador, que é um botão ligado a barra de ferramentas</strong>.<br> + Para o botão nós iremos fornecer: + <ul> + <li>um icone chamado "beasts.png"</li> + <li>um popup para abrir quando o botão for pressionado. O popup irá ter incluso HTML, CSS e JavaScript.</li> + </ul> + </li> + <li><strong>escrever um content script, "beastify.js" que irá ser injetado na página web</strong>.<br> + Este é o código que irá modificar a página.</li> + <li><strong>empacotar alguma imagens de animais para substituir na página</strong>.<br> + Nós iremos criar as imagens "web accessible resources" então a página poderá referenciar eles.</li> +</ul> + +<p>Você pode visualizar toda a estrutura da extensão da seguinte forma:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/11467/beastify-anatomy.svg" style="display: block; height: 664px; margin-left: auto; margin-right: auto; width: 500px;"></p> + +<p>É uma extensão extremamente simples, mas mostra muitos conceitos básicos da API de Extensões:</p> + +<ul> + <li>adicionando um botão na barra de ferramentas</li> + <li>Definindo um panel de popup usando HTML, CSS e JavaScript</li> + <li>Injetando content scripts nas páginas</li> + <li>comunicação entre content scripts e o resto das extensões</li> + <li>empacotando recursos com sua extensão que serão usadas nas páginas</li> +</ul> + +<p>Você pode encontrar o código completo da extensão no <a href="https://github.com/mdn/webextensions-examples/tree/master/beastify">GitHub</a>.</p> + +<p>Para criar essa extensão você precisará do Firefox 45 ou mais recente.</p> + +<h2 id="Escrevendo_a_WebExtension">Escrevendo a WebExtension</h2> + +<p>Crie um novo diretório e navegue até ele:</p> + +<pre class="brush: bash">mkdir beastify +cd beastify</pre> + +<h3 id="manifest.json">manifest.json</h3> + +<p>Agora crie um novo arquivo chamado "manifest.json", e insira o seguinte conteúdo:</p> + +<pre class="brush: json">{ + + "manifest_version": 2, + "name": "Beastify", + "version": "1.0", + + "applications": { + "gecko": { + "id": "beastify@mozilla.org" + } + }, + + "permissions": [ + "http://*/*", + "https://*/*" + ], + + "browser_action": { + "default_icon": "button/beasts.png", + "default_title": "Beastify", + "default_popup": "popup/choose_beast.html" + }, + + "web_accessible_resources": [ + "beasts/frog.jpg", + "beasts/turtle.jpg", + "beasts/snake.jpg" + ] + +} +</pre> + +<ul> + <li>As primeiras três chaves : <strong><code>manifest_version</code></strong>, <strong><code>name</code></strong>, e <strong><code>version</code></strong>, são obrigatórias e contém metadados básicos para a extensão.</li> + <li><strong><code>permissions</code></strong> lista as permisões que a extensão precisa. Nós iremos apenas perguntar se pediremos permissão para modificar todas as páginas HTTP e HTTPS : veja a documentação para as chaves de <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissions</a></code>. Nós prefirimos por usar a permissão <code>activeTab</code> aqui , mas atualmente não é suportada pela Firefox.</li> + <li><strong><code>browser_action</code></strong> especifica o botão da barra de ferramentas. Iremos fornecer três informações aqui: + <ul> + <li><strong><code>default_icon</code></strong> é obrigatório, e aponta para o icone do botão</li> + <li><strong><code>default_title</code></strong> é opicional, e mostra a mensagem em um tooltip</li> + <li><strong><code>default_popup</code></strong> é usado se você quer que um popup seja mostrado quando o usuário clicar no botão. Nós fazemos isto, então incluímos esta chave e apontamos para um arquivo HTML incluído na extensão.</li> + </ul> + </li> + <li><strong><code>web_accessible_resources</code></strong> lista arquivos que queremos criar tornar acessível para as páginas. Uma vez que a extensão substitui as imagens da página com imagens que já empacotamos com a extensão , nós precisamos fazer estas imagens acessíveis à página.</li> +</ul> + +<p>Perceba que todos os caminhos são relativos ao manifest.json.</p> + +<h3 id="O_Botão_na_barra_de_ferramentas">O Botão na barra de ferramentas</h3> + +<p>O botão na barra de ferramentas precisa de um icone, e nosso manifest.json informa que nós teriamos um icone em "button/beasts.png".</p> + +<p>Crie o diretório "button" e copie o icone com o nome "beasts.png". Você poderá usar um dos nossos <a href="https://github.com/mdn/webextensions-examples/blob/master/beastify/button/beasts.png">exemplo,</a> que é retirado do <a href="https://www.iconfinder.com/iconsets/free-retina-icon-set">Aha-Soft’s Free Retina iconset</a> e usado sob os termos de sua <a href="http://www.iconbeast.com/faq/">licença</a>.</p> + +<p>Se você não fornecer um popup, então um evento de click é lançado para sua extensão quando o usuário clicar no botão. Se você fornecer um popup, o evento de click não envia, mas ao invés disso, o popup é aberto. Nós queremos abrir um popup, então vamos criá-lo na próxima etapa.</p> + +<h3 id="O_popup">O popup</h3> + +<p>A função do popup é ativar a escolha do usuário para um dos três animais.</p> + +<p>Crie um novo diretório chamado "popup" na raiz do projeto. Aqui é onde nós criar os códigos para o popup. O popup irá ser constituido em três arquivos :</p> + +<ul> + <li><strong><code>choose_beast.html</code></strong> Define o conteúdo do panel</li> + <li><strong><code>choose_beast.css</code></strong> Estilo do conteúdo</li> + <li><strong><code>choose_beast.js</code></strong> Captura a escolha do usuário executando um content script a aba ativa</li> +</ul> + +<h4 id="choose_beast.html">choose_beast.html</h4> + +<p>O arquivo HTML criado é este:</p> + +<pre class="brush: html"><!DOCTYPE html> + +<html> + <head> + <meta charset="utf-8"> + <link rel="stylesheet" href="choose_beast.css"/> + </head> + + <body> + <div class="beast">Frog</div> + <div class="beast">Turtle</div> + <div class="beast">Snake</div> + + <script src="choose_beast.js"></script> + </body> + +</html></pre> + +<p>Nós temos um elemento para cada escolha de animal. Perceba que nós incluimos os arquivo CSS e JS nesse arquivo, igual a uma página web.</p> + +<h4 id="choose_beast.css">choose_beast.css</h4> + +<p>O CSS ajusta o tamanho do popup, garantindo que as três escolhas irão preencher o espaço, e daremos a eles algum estilo básico:</p> + +<pre class="brush: css">html, body { + height: 100px; + width: 100px; + margin: 0; +} + +.beast { + height: 30%; + width: 90%; + margin: 3% auto; + padding-top: 6%; + text-align: center; + font-size: 1.5em; + background-color: #E5F2F2; + cursor: pointer; +} + +.beast:hover { + background-color: #CFF2F2; +}</pre> + +<h4 id="choose_beast.js">choose_beast.js</h4> + +<p>No JavaScript para o popup, nós iremos "escutar" o evento de click . Se o clique foi em uma das três escolhas de animais, nós iremos injetar um content script na aba ativa. Um vez que o content script é carregado , nós enviaremos uma mensagem com o animal escolhido:</p> + +<pre class="brush: js">document.addEventListener("click", function(e) { + if (!e.target.classList.contains("beast")) { + return; + } + + var chosenBeast = e.target.textContent; + + chrome.tabs.executeScript(null, { + file: "/content_scripts/beastify.js" + }); + + chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, {beast: chosenBeast}); + }); + +}); +</pre> + +<p>É usado três funções da API WebExtension:</p> + +<ul> + <li><strong><code>chrome.tabs.executeScript</code></strong> Para injetar um content script que se encontra em "content_scripts/beastify.js" na aba ativa</li> + <li><strong><code>chrome.tabs.query</code></strong> Obter a aba ativa</li> + <li><strong><code>chrome.tabs.sendMessage</code></strong> para enviar uma mensagem para o content scripts executando na aba ativa. A mensagem irá conter as propriedades do animal escolhido.</li> +</ul> + +<h3 id="O_content_script">O content script</h3> + +<p>Crie a novo diretório na pasta root do projeto chamado "content_scripts" e crie um novo arquivo com o nome "beastify.js", com o seguinte conteúdo:</p> + +<pre class="brush: js">// Assign beastify() as a listener for messages from the extension. +chrome.runtime.onMessage.addListener(beastify); + +function beastify(request, sender, sendResponse) { + removeEverything(); + insertBeast(beastNameToURL(request.beast)); + chrome.runtime.onMessage.removeListener(beastify); +} + +function removeEverything() { + while (document.body.firstChild) { + document.body.firstChild.remove(); + } +} + +function insertBeast(beastURL) { + var beastImage = document.createElement("img"); + beastImage.setAttribute("src", beastURL); + beastImage.setAttribute("style", "width: 100vw"); + beastImage.setAttribute("style", "height: 100vh"); + document.body.appendChild(beastImage); +} + +function beastNameToURL(beastName) { + switch (beastName) { + case "Frog": + return chrome.extension.getURL("beasts/frog.jpg"); + case "Snake": + return chrome.extension.getURL("beasts/snake.jpg"); + case "Turtle": + return chrome.extension.getURL("beasts/turtle.jpg"); + } +} + +</pre> + +<p>O content script adiciona um listener da mensagem para a extensão (especificamente , para "choose_beast.js"). No listener:</p> + +<ul> + <li>remover todos os elementos em <code>document.body</code></li> + <li>transforma os nomes dos animais em uma URL para ser usada na imagem</li> + <li>Cria uma tag <code><img></code>, e insere no DOM</li> + <li>Remove a mensagem da listener</li> +</ul> + +<h3 id="Os_animais">Os animais</h3> + +<p>Finalmente, nós precisamos incluir as imagens dos animais.</p> + +<p>Crie um novo diretório chamado "beasts", e adicione as três imagens nos diretório, com os nomes apropriados. Você pode obter as imagens aqui no <a href="https://github.com/mdn/webextensions-examples/tree/master/beastify/beasts">GitHub</a>, ou aqui:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/11459/frog.jpg" style="display: inline-block; height: 200px; margin: 20px; width: 200px;"><img alt="" src="https://mdn.mozillademos.org/files/11461/snake.jpg" style="display: inline-block; height: 200px; margin: 20px; width: 200px;"><img alt="" src="https://mdn.mozillademos.org/files/11463/turtle.jpg" style="display: inline-block; height: 200px; margin: 20px; width: 200px;"></p> + +<h2 id="Empacotando_e_instalando">Empacotando e instalando</h2> + +<p>Verifique se os seus arquivos estão estruturados de acordo com as informações abaixo:</p> + +<pre>beastify/ + + beasts/ + frog.jpg + snake.jpg + turtle.jpg + + button/ + beasts.png + + content_scripts/ + beastify.js + + popup/ + choose_beast.css + choose_beast.html + choose_beast.js + + manifest.json</pre> + +<p>Extensões Firefox são empacotados como arquivos XPI, que são apenas arquivos ZIP com a extensão "XPI".</p> + +<p>Um truque é que o arquivo ZIP deve ser um dos arquivos de extensão . Portanto, para criar um XPI a partir dos arquivos beastify , navegue até o diretório " beastify " em um shell de comando e digite:</p> + +<pre class="brush: bash"> # in beastify/ + zip -r ../beastify.xpi *</pre> + + + +<p>Ou você pode compactar com alguma ferramenta do tipo WinRar escolhe a forma de empacotação ZIP e subistituir .zip para XPI</p> + +<p>Para instalar o XPI, você apenas irá abrir o Firefox:</p> + +<ul> + <li>Vá até o Arquivos, seleciona Abrir arquivo, ou pressione Ctrl/Cmd+O</li> + <li>selecione "beastify.xpi" na caixa de dialógo que abriu</li> +</ul> + +<p>Você deverá receber um aviso de que você está instalando uma extensão não assinada. Aceite o aviso de advertência.</p> + +<p>Você poderá ver o icone aparecer na barra de ferramentas. Abra uma nova página web, então click no icone, selecione um animal e veja a imagem que você escolheu na página.</p> diff --git a/files/pt-br/mozilla/add-ons/webextensions/pre-requisitos/index.html b/files/pt-br/mozilla/add-ons/webextensions/pre-requisitos/index.html new file mode 100644 index 0000000000..4e7e854644 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/pre-requisitos/index.html @@ -0,0 +1,23 @@ +--- +title: Pré-requisitos +slug: Mozilla/Add-ons/WebExtensions/pre-requisitos +translation_of: Mozilla/Add-ons/WebExtensions/Prerequisites +--- +<p>Para desenvolver utilizando as APIs de uma WebExtension, você precisa de uma configuração mínima.</p> + +<ul> + <li>baixar, instalar e abrir o <a href="https://www.mozilla.org/en-US/firefox/developer/">Firefox Developer Edition</a> ou o <a class="external text" href="https://nightly.mozilla.org/" rel="nofollow">Firefox Nightly</a>. Use o Nightly caso queira as atualizações mais recentes.</li> + <li>altere a preferência que permite que o Firefox instale add-ons sem assinatura. Essa opção de configuração só está disponível nas versões do Firefox citadas no item anterior. + <ul> + <li>digite <code>about:config</code> na barra de endereço do Firefox</li> + <li>na caixa de pesquisa digite <code>xpinstall.signatures.required</code></li> + <li>dê um duplo clique na preferência ou clique com o botão direito e selecione a opção "Inverter valor" para alternar de <code>verdadeiro</code> para <code>falso</code>.</li> + </ul> + </li> +</ul> + +<div id="forvo" style="position: absolute; background-color: green; color: white; top: 87px; left: 100px;"> </div> + +<div id="forvo" style="position: absolute; background-color: green; color: white;"> </div> + +<div id="forvo" style="position: absolute; background-color: green; color: white;"> </div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/sua_primeira_webextension/index.html b/files/pt-br/mozilla/add-ons/webextensions/sua_primeira_webextension/index.html new file mode 100644 index 0000000000..9d3045e28a --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/sua_primeira_webextension/index.html @@ -0,0 +1,150 @@ +--- +title: Sua primeira extensão +slug: Mozilla/Add-ons/WebExtensions/sua_primeira_WebExtension +translation_of: Mozilla/Add-ons/WebExtensions/Your_first_WebExtension +--- +<div>{{AddonSidebar}}</div> + +<p><span id="result_box" lang="pt"><span>Neste artigo vamos percorrer, do início ao fim, os passos necessários para a criação de uma extensão para o Firefox.</span> <span>A extensão apenas adicionará uma borda vermelha em todas as páginas carregadas em "mozilla.org" ou qualquer um de seus subdomínios</span></span>.</p> + +<p>O código fonte para este exemplo está no GitHub: <a href="https://github.com/mdn/webextensions-examples/tree/master/borderify">https://github.com/mdn/webextensions-examples/tree/master/borderify</a>.</p> + +<p><span id="result_box" lang="pt"><span>Para começar, você precisará do Firefox versão 45 ou posterior</span></span>.</p> + +<h2 id="Construindo_a_Extensão">Construindo a Extensão</h2> + +<p>Crie uma nova pasta dando o nome de "<span id="result_box" lang="pt"><span>borderify</span></span>" e navegue para dentro dela.</p> + +<pre class="brush: bash">mkdir borderify +cd borderify</pre> + +<h3 id="manifest.json">manifest.json</h3> + +<p><span id="result_box" lang="pt"><span>Dentro dessa pasta crie um novo arquivo chamado "manifest.json" e</span> c<span>oloque o seguinte conteúdo no arquivo</span></span>:</p> + +<pre class="brush: json">{ + + "manifest_version": 2, + "name": "Borderify", + "version": "1.0", + + "description": "<span id="result_box" lang="pt"><span>Adiciona uma borda vermelha a todas as páginas da Web correspondentes a</span></span> mozilla.org.", + + "icons": { + "48": "icons/border-48.png" + }, + + "content_scripts": [ + { + "matches": ["*://*.mozilla.org/*"], + "js": ["borderify.js"] + } + ] + +}</pre> + +<ul> + <li>As primeiras tres chaves: <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/manifest_version">manifest_version</a></code>, <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/name">name</a></code>, e <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/version">version</a></code>, são obrigatórias e contém os metadados básicos sobre a extensão.</li> + <li><code><a href="/en-US/Add-ons/WebExtensions/manifest.json/description">description</a></code> é opcional contudo é recomendada pois aparece no gerenciador de complementos.</li> + <li><code><a href="/en-US/Add-ons/WebExtensions/manifest.json/icons">icons</a></code> é opcional porém recomendada pois define os ícones que aparecem no gerenciador de complementos.</li> +</ul> + +<p><span id="result_box" lang="pt"><span>A chave mais interessante aqui é</span></span> <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/content_scripts">content_scripts</a></code>, <span id="result_box" lang="pt"><span>que diz ao Firefox para carregar um script em páginas da Web cujo URL corresponde a um padrão específico.</span> <span>Nesse caso, pedimos ao Firefox para carregar um script chamado "borderify.js" em todas as páginas HTTP ou HTTPS oriundas de "mozilla.org" ou em qualquer um de seus subdomínios.</span></span></p> + +<ul> + <li><a href="/en-US/Add-ons/WebExtensions/Content_scripts">Saiba mais sobre scripts de conteúdo.</a></li> + <li><a href="/en-US/Add-ons/WebExtensions/Match_patterns">Saiba mais sobre padrões de correspondência</a>.</li> +</ul> + +<div class="warning"> +<p><a href="/en-US/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID#When_do_you_need_an_Add-on_ID">Em algumas situações, você precisa especificar uma ID para sua extensão</a>. Se você precisar especificar um ID de extensão, inclua a chave <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/applications">applications</a></code> no <code>manifest.json</code> e configure sua propriedade <code>id</code>:</p> + +<pre class="brush: json">"applications": { + "gecko": { + "id": "borderify@example.com" + } +}</pre> +</div> + +<h3 id="iconsborder-48.png">icons/border-48.png</h3> + +<p><span id="result_box" lang="pt"><span>A extensão deve ter um ícone.</span> Ele<span> será mostrado ao lado da listagem de extensões no Gerenciador de Extensões.</span> <span>Nosso manifest.json indica que teríamos um ícone localizado na pasta "icons/border-48.png".</span></span></p> + +<p><span id="result_box" lang="pt"><span>Crie o diretório "icons" diretamente sob o diretório "borderify".</span> <span>Salve um ícone chamado "border-48.png"</span></span>. Você pode usar o icone <a href="https://github.com/mdn/webextensions-examples/blob/master/borderify/icons/border-48.png">do nosso exemplo</a>, que foi retirado a coleção de ícone do Google Material Design, e é utilizado sob os termos da licença <a href="https://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike</a>.</p> + +<p><span id="result_box" lang="pt"><span>Se você escolher criar seu próprio ícone, deve ser 48x48 pixels formato .PNG e</span><span> também deve criar um ícone de 96x96 pixels também .PNG, para telas de alta resolução, e se você fizer isso será especificado como a propriedade 96 do objeto icons em manifest.json</span></span>:</p> + +<pre class="brush: json">"icons": { + "48": "icons/border-48.png", + "96": "icons/border-96.png" +}</pre> + +<p><span id="result_box" lang="pt"><span>Como alternativa, você pode criar um ícone em formato SVG e ele será dimensionado corretamente</span></span>.</p> + +<ul> + <li><a href="/en-US/Add-ons/WebExtensions/manifest.json/icons">Saiba mais sobre como especificar ícones.</a></li> +</ul> + +<h3 id="borderify.js">borderify.js</h3> + +<p><span id="result_box" lang="pt"><span>Finalmente, crie um arquivo chamado "borderify.js" diretamente dentro do diretório "borderify" com o seguinte</span><span> conteúdo:</span></span></p> + +<pre class="brush: js">document.body.style.border = "5px solid red";</pre> + +<p><span id="result_box" lang="pt"><span>Este script será carregado nas páginas que correspondem ao padrão especificado na chave </span></span> <code>content_scripts</code> do manifest.json. <span id="result_box" lang="pt"><span>O script tem acesso direto ao documento, igual aos scripts carregados pela própria página.</span></span></p> + +<ul> + <li><a href="/en-US/Add-ons/WebExtensions/Content_scripts">Saiba mais sobre scripts de conteúdo.</a></li> +</ul> + +<h2 id="Testando">Testando</h2> + +<p>Primeiro, verifique se você está com os arquivos corretos nos lugares certos:</p> + +<pre>borderify/ + icons/ + border-48.png + borderify.js + manifest.json</pre> + +<h3 id="Instalando">Instalando</h3> + +<p><span id="result_box" lang="pt"><span>Acesse a área de Debugging do Firefox digitando diretamente na barra de endereço: "about: debugging", em seguida clique em "Load Temporary Add-on" e selecione o "</span></span>borderify.js<span lang="pt"><span>".</span></span></p> + +<p>{{EmbedYouTube("cer9EUKegG4")}}</p> + +<p><span id="result_box" lang="pt"><span>A Extensão agora será instalado e ficará assim até que você reinicie o Firefox.</span><br> + <br> + <span>Como alternativa, você pode executar a Extansão a partir da linha de comando usando a ferramenta </span></span> <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Getting_started_with_web-ext">web-ext</a>.</p> + +<h3 id="Testando_2">Testando</h3> + +<p><span id="result_box" lang="pt"><span>Agora visitar uma página em "mozilla.org" e você deve ver uma borda vermelha em volta da página:</span></span></p> + +<p>{{EmbedYouTube("rxBQl2Z9IBQ")}}</p> + +<div class="note"> +<p><span id="result_box" lang="pt"><span>Não tente acessar addons.mozilla.org!</span> <span>Os scripts de conteúdo são bloqueados nesse domínio</span></span>.</p> +</div> + +<p><span id="result_box" lang="pt"><span>Experimente um pouco.</span> <span>Edite o script de conteúdo para alterar a cor da borda ou faça outra coisa com o conteúdo da página.</span> <span>Salve o script de conteúdo e, em seguida, recarregue os arquivos da extensão clicando no botão "Reload" em about: debugging.</span> <span>Você poderá ver as mudanças imediatamente:</span></span></p> + +<p>{{EmbedYouTube("NuajE60jfGY")}}</p> + +<ul> + <li><a href="/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">Saiba mais sobre o carregamento de extensões</a></li> +</ul> + +<h2 id="Empacotando_e_publicando">Empacotando e publicando</h2> + +<p><span id="result_box" lang="pt"><span>Para que outras pessoas usem seu complemento, você precisa compactá-lo e enviá-lo para a Mozilla para assinatura.</span> <span>Para saber mais sobre isso, consulte</span></span> <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Publishing_your_WebExtension">"Publicando sua Extensão"</a>.</p> + +<h2 id="Próximos_passos">Próximos passos</h2> + +<p><span id="result_box" lang="pt"><span>Agora você tem uma idéia do processo de desenvolvimento de um WebExtension para o Firefox, que tal:</span></span></p> + +<ul> + <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension">Anatomia de uma Extensão</a></li> + <li><a href="/en-US/Add-ons/WebExtensions/Your_second_WebExtension">Criar uma Extensão mais complexa</a></li> + <li><a href="/en-US/Add-ons/WebExtensions/API">Saber mais sobre JavaScript APIs disponíveis para Extensões.</a></li> +</ul> diff --git a/files/pt-br/mozilla/add-ons/webextensions/user_interface/index.html b/files/pt-br/mozilla/add-ons/webextensions/user_interface/index.html new file mode 100644 index 0000000000..78b988a523 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/user_interface/index.html @@ -0,0 +1,97 @@ +--- +title: User interface +slug: Mozilla/Add-ons/WebExtensions/user_interface +tags: + - Landing + - NeedsTranslation + - TopicStub + - User Interface + - WebExtensions +translation_of: Mozilla/Add-ons/WebExtensions/user_interface +--- +<div>{{AddonSidebar}}</div> + +<p>Extensions that use WebExtension APIs are provided with several user interface options so that their functionality can be made available to the user. A summary of those options is provided below, with a more detailed introduction to each user interface option in this section.</p> + +<div class="note"> +<p>For advice on using these UI components to create a great user experience in your extension, please see the <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/User_experience_best_practices">User experience best practices</a> article.</p> +</div> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">UI option</th> + <th scope="col">Description</th> + <th scope="col" style="width: 350px;">Example</th> + </tr> + </thead> + <tbody> + <tr> + <td><a href="/Add-ons/WebExtensions/user_interface/Browser_action">Toolbar button</a> (browser action)</td> + <td>A button on the browser toolbar that dispatches an event to the extension when clicked. By default, the button is visible in all tabs.</td> + <td><img alt="Example showing a toolbar button (browser action)." src="https://mdn.mozillademos.org/files/15751/browser-action.png" style="height: 364px; width: 700px;"></td> + </tr> + <tr> + <td>Toolbar button with a <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Popups">popup</a></td> + <td>A popup on a button in the browser toolbar that opens when the button is clicked. The popup is defined in an HTML document that handles the user interaction.</td> + <td><img alt="Example of the pop-up on a toolbar button" src="https://mdn.mozillademos.org/files/15753/popup-shadow.png" style="height: 624px; width: 700px;"></td> + </tr> + <tr> + <td><a href="/Add-ons/WebExtensions/user_interface/Page_actions">Address bar button</a> (page action)</td> + <td>A button on the browser address bar that dispatches an event to the extension when clicked. By default, the button is hidden in all tabs.</td> + <td><img alt="Example showing an address bar button (page action) " src="https://mdn.mozillademos.org/files/15745/address_bar_button.png" style="height: 348px; width: 700px;"></td> + </tr> + <tr> + <td>Address bar button with a <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Popups">popup</a></td> + <td>A popup on a button in the browser address bar that opens when the button is clicked. The popup is defined in an HTML document that handles the user interaction.</td> + <td><img alt="Example of a popup on the address bar button" src="https://mdn.mozillademos.org/files/15747/page_action_popup.png" style="height: 524px; width: 700px;"></td> + </tr> + <tr> + <td><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items">Context menu item</a></td> + <td>Menu items, checkboxes, and radio buttons on one or more of the browser's context menus. Also, menus can be structured by adding separators. When menu items are clicked, an event is dispatched to the extension.</td> + <td><img alt="Example of content menu items added by a WebExtension, from the context-menu-demo example" src="https://mdn.mozillademos.org/files/15756/context_menu_example.png" style="height: 942px; width: 864px;"></td> + </tr> + <tr> + <td><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars">Sidebar</a></td> + <td> + <p dir="ltr">An HTML document displayed next to a web page, with the option for unique content per page. The sidebar is opened when the extension is installed, then obeys the user's sidebar visibility selection. User interaction within the sidebar is handled by its HTML document.</p> + </td> + <td><img alt="Example of a sidebar" src="https://mdn.mozillademos.org/files/15755/bookmarks-sidebar.png" style="height: 846px; width: 700px;"></td> + </tr> + <tr> + <td><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages">Options page</a></td> + <td>A page that enables you to define preferences for your extension that your users can change. The user can access this page from the browser's add-ons manager.</td> + <td><img alt="Example showing the options page content added in the favorite colors example." src="https://mdn.mozillademos.org/files/15748/options_page.png"></td> + </tr> + <tr> + <td><a href="/Add-ons/WebExtensions/user_interface/Extension_pages">Extension page</a></td> + <td>Use web pages included in your extension to provide forms, help, or any other content required, within windows or tabs.</td> + <td><img alt="Example of a simple bundled page displayed as a detached panel." src="https://mdn.mozillademos.org/files/15752/bundled_page_as_panel_small.png" style="height: 432px; width: 700px;"></td> + </tr> + <tr> + <td><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Notifications">Notification</a></td> + <td>Transient notifications displayed to the user through the underlying operating system's notifications mechanism. Dispatches an event to the extension when the user clicks a notification, or when a notification closes (either automatically or at the user's request).</td> + <td><img alt="Example of an extension triggered system notification" src="https://mdn.mozillademos.org/files/15754/notify-shadowed.png" style="height: 294px; width: 780px;"></td> + </tr> + <tr> + <td><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Omnibox">Address bar suggestion</a></td> + <td>Offer custom address bar suggestions when the user enters a keyword.</td> + <td><img alt="Example showing the result of the firefox_code_search WebExtension's customization of the address bar suggestions." src="https://mdn.mozillademos.org/files/15749/omnibox_example_small.png" style="height: 464px; width: 700px;"></td> + </tr> + <tr> + <td><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/devtools_panels">Developer tools panel</a></td> + <td>A tab with an associated HTML document that displays in the browser's developer tools.</td> + <td><img alt="Example showing the result of the firefox_code_search WebExtension's customization of the address bar suggestions." src="https://mdn.mozillademos.org/files/15746/developer_panel_tab.png" style="height: 224px; width: 700px;"></td> + </tr> + </tbody> +</table> + +<p>The following how-to guides provide step-by-step guidance to creating some of these user interface options:</p> + +<ul> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Accessibility_guidelines">Accessibility guidelines</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Add_a_button_to_the_toolbar">Add a button to the toolbar</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_styles">Browser styles</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Extending_the_developer_tools">Extending the developer tools</a></li> + <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Implement_a_settings_page">Implement a settings page</a></li> +</ul> diff --git a/files/pt-br/mozilla/add-ons/webextensions/user_interface/itens_do_menu_de_contexto/index.html b/files/pt-br/mozilla/add-ons/webextensions/user_interface/itens_do_menu_de_contexto/index.html new file mode 100644 index 0000000000..cf8e2d7198 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/user_interface/itens_do_menu_de_contexto/index.html @@ -0,0 +1,58 @@ +--- +title: Itens do menu de contexto +slug: Mozilla/Add-ons/WebExtensions/user_interface/Itens_do_menu_de_contexto +tags: + - WebExtensions +translation_of: Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items +--- +<div>{{AddonSidebar}}</div> + +<div> +<p><span class="seoSummary">Esta opção da interface de usuário adiciona um ou mais itens para o menu de contexto do navegador.</span>Este é o menu de contexto disponível quando um usuário clica com o botão direito numa página web. As guias também podem ter menus de contexto, disponível através da API <a href="/en-US/Add-ons/WebExtensions/API/menus">browser.menus</a>.</p> + +<p><img alt="Example of content menu items added by a WebExtension, from the context-menu-demo example" src="https://mdn.mozillademos.org/files/15756/context_menu_example.png" style="display: block; height: 382px; margin-left: auto; margin-right: auto; width: 350px;"></p> + +<p>Você usaria essa opção para expor recursos relevantes para contextos específicos de navegadores ou páginas da web. Por exemplo, você poderia mostrar recursos para abrir um editor gráfico quando o usuário clica em uma imagem ou pode oferecer um recurso para salvar o conteúdo da página quando uma parte da página é selecionada. Você pode adicionar itens planos de menu, caixas de seleção, grupos de botões de rádio, e separadores para os menus. Quando um item de menu de contexto for adicionado usando {{WebExtAPIRef("contextMenus.create")}}, é mostrado em todas as guias do navegador, mas você pode escondê-lo usando {{WebExtAPIRef("contextMenus.remove")}}.</p> + +<p>A lista inteira dos contextos suportados está disponível em {{WebExtAPIRef("menus.ContextType")}} e inclui contextos de fora de uma página web, como itens de favoritos na interface do navegador. Por exemplo, a extensão "<a href="https://github.com/Rob--W/bookmark-container-tab">Open bookmark in Container Tab</a>" adiciona um item de menu que permite que o usuário abra a URL dos favoritos em uma nova guia de container:</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/16554/extension_context_menu.png" style="border: 1px solid black; display: block; height: 637px; margin: 0px auto; width: 505px;"></p> + +<h2 id="Especificando_itens_do_menu_de_contexto">Especificando itens do menu de contexto</h2> + +<p>Você controla os itens do menu de contexto programaticamente, usando a API {{WebExtAPIRef("contextMenus")}}. No entanto, você precisa requisitar a permissão <code>contextMenus</code> em seu manifest.json para poder tomar vantagem desta API.</p> + +<pre class="brush: json">"permissions": ["contextMenus"]</pre> + +<p>Você pode então adicionar (e atualizar ou apagar) os itens do menu de contexto em seu script de "background" (segundo plano) da sua extensão. Para criar um item de menu, você especifica um id, seu título, e os menus de contexto em que ele deve aparecer:</p> + +<pre class="brush: js">browser.contextMenus.create({ + id: "log-selection", + title: browser.i18n.getMessage("contextMenuItemSelectionLogger"), + contexts: ["selection"] +}, onCreated);</pre> + +<p>Sua extensão então escuta os cliques nos itens do menu. As informações passadas sobre o item clicado, o contexto em que o clique ocorreu e os detalhes da guia em que o clique ocorreu podem ser usadas para chamar a funcionalidade de extensão apropriada.</p> + +<pre class="brush: js">browser.contextMenus.onClicked.addListener(function(info, tab) { + switch (info.menuItemId) { + case "log-selection": + console.log(info.selectionText); + break; + ... + } +})</pre> + +<h2 id="Ícones">Ícones</h2> + +<p>Para mais detalhes sobre como criar ícones para usar no seu menu de contexto, veja <a href="https://design.firefox.com/photon/visuals/iconography.html">Iconography</a> na documentação <a class="grey-90 no-underline hover-no-underline" href="https://design.firefox.com/photon/index.html">Photon Design System</a>.</p> + +<h2 id="Exemplos">Exemplos</h2> + +<p>O repositório <a class="external external-icon" href="https://github.com/mdn/webextensions-examples">webextensions-examples</a> no GitHub contém dois exemplos de extensões que implementam itens do menu de contexto:</p> + +<ul> + <li><a href="https://github.com/mdn/webextensions-examples/tree/master/menu-demo">menu-demo</a> adiciona muitos itens para o menu de contexto do navegador.</li> + <li><a href="https://github.com/mdn/webextensions-examples/tree/master/context-menu-copy-link-with-types">context-menu-copy-link-with-types</a> adiciona um item de menu de contexto aos links que copiam o URL do link para a área de transferência, como texto sem formatação e HTML avançado.</li> +</ul> +</div> diff --git a/files/pt-br/mozilla/add-ons/webextensions/what_are_webextensions/index.html b/files/pt-br/mozilla/add-ons/webextensions/what_are_webextensions/index.html new file mode 100644 index 0000000000..629cc94a9d --- /dev/null +++ b/files/pt-br/mozilla/add-ons/webextensions/what_are_webextensions/index.html @@ -0,0 +1,22 @@ +--- +title: O que são extensões? +slug: Mozilla/Add-ons/WebExtensions/What_are_WebExtensions +translation_of: Mozilla/Add-ons/WebExtensions/What_are_WebExtensions +--- +<div>{{AddonSidebar}}</div> + +<p>Extensões são bits de código que modificam a funcionalidade do navegador. Eles são escritos usando as tecnologias padrões da Web - JavaScript, HTML e CSS - além de APIs JavaScript dedicadas. Entre outras coisas, extensões podem adicionar novas funcionalidades para o navegador, ou mudar sua aparência, ou o conteúdo de páginas particulares.</p> + +<p>Extensões para Firefox são construídas usando <em>WebExtensions APIs</em>, um sistema multi-navegador (<em>cross-browser</em>) para o desenvolvimento de extensões. Para uma maior portabilidade, a API é compatível com a <a class="external external-icon" href="https://developer.chrome.com/extensions"><em>extension API</em>,</a> suportada pelo Google Chrome e pelo Opera. Extensões escritas para esses navegadores, na maioria dos casos, vão rodar no Firefox ou Microsoft Edge <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Porting_from_Google_Chrome">com poucas mudanças</a>. A API é também totalmente compatível com o <em><a href="https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox">multiprocess Firefox</a></em>.</p> + +<p>No passado, você poderia desenvolver extensões para Firefox usando um dos três <span class="gt-baf-word-clickable">métodos</span> diferentes: <em><a href="/en-US/Add-ons/Overlay_Extensions">XUL/XPCOM overlays</a>, <a href="/en-US/docs/Mozilla/Add-ons/Bootstrapped_extensions">bootstrapped extensions</a></em> ou o <em><a href="/en-US/docs/Mozilla/Add-ons/SDK">Add-on SDK</a></em>. A partir do fim de Novembro de 2017, <em>WebExtensions APIs</em> será o único meio de desenvolver extensões para Firefox, e os outros <span class="gt-baf-word-clickable">métodos</span> serão descontinuados.</p> + +<p>Se você tem dúvidas ou sugestões, ou precisa de ajuda para migrar um <em>add-on</em> antigo para o <em>WebExtensions APIs</em>, você pode entrar em contato conosco pela <a href="https://mail.mozilla.org/listinfo/dev-addons"><em>dev-addon mailing list</em> </a>ou pelo canal <em><a href="irc://irc.mozilla.org/extdev">#extdev</a></em> no <a class="external external-icon" href="https://wiki.mozilla.org/IRC">IRC</a>.</p> + +<h2 id="Próximos_passos">Próximos passos</h2> + +<ul> + <li>Para experimentar alguns exemplos de extensões, veja <a href="/en-US/Add-ons/WebExtensions/Examples">Exemplos de extensões</a></li> + <li>Para aprender sobre a estrutura de uma extensão, acesse <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension">Anatomia de uma Extensão.</a></li> + <li>Para acompanhar <span class="gt-baf-word-clickable">do início ao fim</span> o desenvolvimento de uma simples extensão, veja <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension">Sua primeira Extensão.</a></li> +</ul> diff --git a/files/pt-br/mozilla/bugzilla/index.html b/files/pt-br/mozilla/bugzilla/index.html new file mode 100644 index 0000000000..1d55ba55a0 --- /dev/null +++ b/files/pt-br/mozilla/bugzilla/index.html @@ -0,0 +1,55 @@ +--- +title: Bugzilla +slug: Mozilla/Bugzilla +tags: + - Bugzilla + - Developing Mozilla + - NeedsTranslation + - QA + - Tools + - TopicStub +translation_of: Mozilla/Bugzilla +--- +<p><a class="link-https" href="https://bugzilla.mozilla.org/">bugzilla.mozilla.org</a> (geralmente abreviado b.m.o) <span id="result_box" lang="pt"><span>é o sistema de rastreamento de erros do Mozilla.org,</span></span> <span id="result_box" lang="pt"><span>um banco de dados para registrar erros</span></span> <span id="result_box" lang="pt"><span>e solicitações de aprimoramento para o Firefox, Thunderbird, SeaMonkey, Camino e outros projetos do mozilla.org.</span></span></p> + +<div class="row topicpage-table"> +<div class="section"> +<h2 class="Documentation" id="Documentation" name="Documentation">Documentação sobre B.M.O.</h2> + +<dl> + <dt><a href="/en-US/docs/What_to_do_and_what_not_to_do_in_Bugzilla" title="en/What_to_do_and_what_not_to_do_in_Bugzilla">O que fazer e o que não fazer no Bugzilla</a></dt> + <dd><span id="result_box" lang="pt"><span>Dicas sobre como usar o Bugzilla, bem como coisas que você deve evitar.</span></span></dd> + <dt><a class="link-https" href="https://bugzilla.mozilla.org/page.cgi?id=etiquette.html">Etiqueta Bugzilla</a></dt> + <dd><span id="result_box" lang="pt"><span class="alt-edited">Um guia de etiqueta;</span></span> <span id="result_box" lang="pt"><span>este guia irá ajudá-lo a entender a melhor forma de conduta no b.m.o.</span></span> <span id="result_box" lang="pt"><span>e como usar maneiras adequadas e civilidade ajudará a garantir que seu problema seja resolvido</span></span> o quanto antes.</dd> + <dt><a href="http://www.mozilla.org/quality/help/beginning-duplicate-finding.html" title="http://www.mozilla.org/quality/help/beginning-duplicate-finding.html">Como saber se um erro já foi relatado</a></dt> + <dd><span id="result_box" lang="pt"><span>É útil (mas não obrigatório) para verificar se o problema que você está reportando já foi rastreado.</span> <span>Este guia irá ajudá-lo a fazê-lo.</span></span></dd> + <dt><a href="/en-US/docs/Mozilla/QA" title="/en-US/docs/Mozilla/QA">Garantia da qualidade</a></dt> + <dd><span id="result_box" lang="pt"><span>Documentação sobre garantia de qualidade na Mozilla.</span></span></dd> + <dt><a href="/en-US/docs/Mozilla/QA/Bug_writing_guidelines" title="/en-US/docs/Mozilla/QA/Bug_writing_guidelines">Instruções de escritas de erros</a></dt> + <dd><span id="result_box" lang="pt"><span>Um guia para descrever bem, e de forma compreensível,</span></span> um <span id="result_box" lang="pt"><span>erro que será facilmente acompanhado pela equipe de desenvolvimento.</span></span></dd> + <dt><a href="/en-US/docs/Developer_Guide/How_to_Submit_a_Patch" title="/en-US/docs/Developer_Guide/How_to_Submit_a_Patch">Como enviar uma correção</a></dt> + <dd><span id="result_box" lang="pt"><span>Se você corrigiu um erro ou implementou um novo recurso, </span></span> você precisará enviar para revisão <span id="result_box" lang="pt"><span>para que ele possa se tornar parte do produto.</span></span> <span id="result_box" lang="pt"><span>Este guia irá ensinar-lhe como!</span></span></dd> +</dl> + +<p><span class="alllinks"><a href="/en-US/docs/tag/Bugzilla" title="/en-US/docs/tag/CSS">Veja tudo...</a></span></p> +</div> + +<div class="section"> +<h2 id="Outros_materiais">Outros materiais</h2> + +<ul> + <li><a class="external" href="http://www.bugzilla.org/about/">Uma introdução ao Bugzilla</a></li> + <li><a class="external" href="http://blog.johnath.com/2010/02/04/bugzilla-for-humans">Bugzilla para humanos</a></li> + <li><a class="external" href="https://bugzilla.mozilla.org/page.cgi?id=quicksearch.html">Página de ajuda do Bugzilla QuickSearch</a>. <span id="result_box" lang="pt"><span>QuickSearch é uma maneira rápida, fácil e muito eficaz de consultar rapidamente o bugzilla.</span></span></li> + <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Bugzilla/Testopia" title="https://developer.mozilla.org/en-US/docs/Mozilla/Bugzilla/Testopia">Testopia</a> - <span id="result_box" lang="pt"><span>extensão para gerenciamento de casos de teste</span></span></li> + <li><a class="external" href="http://www.bugzilla.org">bugzilla.org</a> - o site do projeto</li> + <li>{{ interwiki('wikipedia', 'Bugzilla', 'wikipedia:Bugzilla') }} - <span id="result_box" lang="pt"><span>descrição geral do Bugzilla </span></span> <span id="result_box" lang="pt"><span>(não específico para projetos Mozilla)</span></span></li> +</ul> + +<h2 class="Tools" id="Tools" name="Tools">Ferramentas</h2> + +<ul> + <li><a href="http://harthur.github.io/bugzilla-todos/" title="http://harthur.github.io/bugzilla-todos/">Bugzilla Todos</a> lista erros e correções para revisões e verifiações.</li> +</ul> +</div> +</div> diff --git a/files/pt-br/mozilla/bugzilla/testopia/index.html b/files/pt-br/mozilla/bugzilla/testopia/index.html new file mode 100644 index 0000000000..5b92d38e16 --- /dev/null +++ b/files/pt-br/mozilla/bugzilla/testopia/index.html @@ -0,0 +1,168 @@ +--- +title: Testopia +slug: Mozilla/Bugzilla/Testopia +tags: + - Casos de Testes + - Testador + - Testopia +translation_of: Mozilla/Bugzilla/Testopia +--- +<p>Testopia é uma extensão do gerenciamento de casos de teste para Bugzilla. Ele é projetado para ser uma ferramenta genérica para rastrear casos de teste, permitindo a organizações de controle para integrar relatórios de erros com seus casos de teste e resultados da execução. Embora tenha sido concebido com testes de software em mente, ele pode ser usado para rastrear os testes em praticamente qualquer coisa no processo de engenharia.</p> + +<h2 id="Testopia_3.0_(ainda_não_lançado)">Testopia 3.0 (ainda não lançado)</h2> + +<p>Se você atualizou para Bugzilla 5.0, provavelmente notou que o Testopia 2.5 <em>não </em>é compatível com essa versão. Apesar de o Bugzilla 5.0 já ter sido lançado alguns meses atrás, nós não planejamos lançar uma correção para o Testopia imediatamente, porque atualmente está sob trabalho pesado para fazê-lo uma extensão totalmente autônoma, o que significa que todos os scripts tr_*.cgi que estiverem atualmente no diretório bugzilla/root estão sendo movidos para extensions/Testopia/lib/. Isso <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=743652">não é uma tarefa trivial</a>, requer tempo (começou em Agosto/2014), e nós decidimos que não era uma boa ideia lançar um código feito pela metade, que ainda precisa de teste para garantir que não regredimos em nada.</p> + +<p>A boa notícia é que o <a href="https://github.com/bugzilla/extensions-Testopia">código atual no repósitório git</a><em> </em>já funciona com o Bugzilla 5.0, e então, se você já atualizou para o 5.0, e não se importa em ter uma extensão ainda em produção na sua máquina, você pode decidir puxar o código do repositório. Isso também nos daria feedback antecipado caso você encontre regressões.</p> + +<p>Se você encontrar bugs no código disponível do git, por favor <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Testopia&component=General">nos reporte</a> para que possamos arrumar os mais críticos a tempo do Testopia 3.0. Não pergunte quando planejamos lançar o 3.0, pois nós ainda não sabemos. "Assim que possível" é nossa melhor resposta.</p> + +<h2 id="Testopia_2.5">Testopia 2.5</h2> + +<p>Esta versão suporta Bugzilla 4.2 e a melhor notícia é que ele não requer um patch para o Bugzilla. Se você estiver atualizando, por favor reverter ligação da versão existente antes de instalar. Uma nova instalação requer apenas que você descompacte o arquivo .tar em seu Bugzilla no diretório raiz e executar checksetup. Os agradecimentos vão para LpSolit da equipe Bugzilla por seu trabalho no sentido de tornar isso possível.</p> + +<h2 id="Testopia_2.4">Testopia 2.4</h2> + +<p>Essa versão suporta Bugzilla 3.6.</p> + +<p><strong>NOTÍCIA IMPORTANTE:</strong> Se você estiver atualizando em um caso sensível sistema de arquivos é necessário remover a pasta testopia existente no diretório de extensões. Se você fez modificações no código fonte testopia, você precisará fundi-los para a nova pasta Testopia (capital T). Se você estiver em Windows ou outro sistema de arquivos caso insensível primeiro você deve renomear a pasta (testopia de idade, por exemplo) e só em seguida, descompactar o arquivo tar. Você pode, então, mesclar suas alterações antes de apagar a versão antiga.</p> + +<p><strong>USUÁRIOS DE API TOMEM NOTA: Os parâmetros posicionais são agora obsoletos. Todos os parâmetros devem agora ser enviados em um hash (struct, dict, hashmap ou qualquer idioma de sua escolha chama-chave, pares de valores). Apesar de todas as tentativas serem feitas para fornecer suporte contínuo para parâmetros posicionais, por favor, esteja ciente de que algumas chamadas de API podem falhar até que você faça essa alteração. Além disso, as versões futuras pode remover esse suporte completamente.</strong></p> + +<p>Como sempre guardar backup de sua instalação antes de tentar instalar ou atualizar.</p> + +<h2 id="Pontos_de_Integração">Pontos de Integração</h2> + +<ul> + <li style="margin-bottom: 0in;">Testopia integra com produtos Bugzilla, componentes, versões e marcas para permitir uma interface de gerenciamento única para objetos de alto nível.</li> + <li style="margin-bottom: 0in;">Testopia permite aos usuários acessar uma ferramenta e usa as permissões do grupo Bugzilla para limitar o acesso à modificação de objetos de teste.</li> + <li style="margin-bottom: 0in;">Testopia permite aos usuários anexar bugs para testar casos resultados de execução da gestão centralizada do processo de engenharia de software.</li> +</ul> + +<h2 id="Recursos_para_Versão_2.4_(Bugzilla_3.6.x)" style="margin-top: 0in; margin-bottom: 0in;">Recursos para Versão 2.4 (Bugzilla 3.6.x)</h2> + +<ul> + <li>Suporte Bugzilla 3.6</li> +</ul> + +<h2 id="Recursos_para_Versão_2.3_(Bugzilla_3.4.x)" style="margin-top: 0in; margin-bottom: 0in;">Recursos para Versão 2.3 (Bugzilla 3.4.x)</h2> + +<ul> + <li>Apoio à exportação XML e importação de planos de teste e crianças</li> + <li>Apoio CSV exportação de casos de teste e resultados.</li> + <li>Novos relatórios: pior criminoso e caso roll-up</li> + <li>Definir prioridades em caso indidual-runs</li> + <li>Novas opções de clones</li> + <li>Utiliza a mais recente biblioteca Extjs 3.0</li> + <li>Converte Testopia em uma extensão Bugzilla verdade</li> + <li>Numerosas correções de bugs</li> +</ul> + +<h2 id="Recursos_para_Versão_2.2_(Bugzilla_3.2_and_3.0.x)" style="margin-top: 0in; margin-bottom: 0in;">Recursos para Versão 2.2 (Bugzilla 3.2 and 3.0.x)</h2> + +<p>Esta versão é principalmente um bug corrigir lançamento e fazer Testopia compatível com o Bugzilla 3.2 e 3.0.6 Bugzilla. Por favor, não se esqueça de fazer o download do pacote correto com base na sua versão Bugzilla.</p> + +<p>Para instalar faça o seguinte (veja o <a href="http://wiki.mozilla.org/Testopia:README">README</a> para mais detalhes de instalação):</p> + +<ol> + <li>Descompacte o arquivo tar Testopia 2.2 dentro do seu diretório Bugzilla.</li> + <li>Remendar os arquivos Bugzilla.</li> +</ol> + +<p>Em sistemas Linux ele deve ser algo como:</p> + +<p style="border: 1px solid red; padding: 3px; width: 250px;"><code><strong>patch -p0 -i extensions/testopia/patch-3.6</strong></code></p> + +<ol> + <li>Execute checksetup.pl</li> +</ol> + +<p>Para atualizar uma instalação existente Testopia você siga os mesmos passos só você precisa primeiro reverter o antigo patch antes untarring os arquivos. Se estiver atualizando o Bugzilla, ao mesmo tempo, isso deve ser feito antes que tão bem .</p> + +<p><code><strong>patch -p0 -R -i extensions/testopia/patch-<version></strong></code></p> + +<p>Onde <versão> representa a versão do patch de ter aplicado (versão Bugzilla).</p> + +<h2 id="Requirements">Requirements</h2> + +<p>Como nosso desenvolvimento avançou, nós decidimos tentar manter a par da última versão estável do Bugzilla (atualmente 4.4). Isto dá-nos uma base de código estável para trabalhar. Desenvolvimento de plugins ou extensões para qualquer software é como tentar acertar um alvo em movimento. Esta decisão permite que nos concentremos nosso tempo mais no lançamento de novos recursos e muitas vezes precoce, em vez de voltar a portabilidade. No entanto, isso significa que a maioria das principais características não vai ser adaptadas para versões anteriores a menos e até que tenhamos tempo para fazer isso. Qualquer pessoa que queira ajudar neste esforço é mais do que bem-vindo.</p> + +<ul> + <li> + <p style="margin-bottom: 0in;">Bugzilla 4.x</p> + </li> + <li> + <p style="margin-bottom: 0in;">Mysql 5.0 or PostgreSQL 8.3</p> + </li> + <li> + <p style="margin-bottom: 0in;">Mozilla compatible browser ;-)</p> + </li> + <li> + <p style="margin-bottom: 0in;">Módulos Adicionais Perl: Text::CSV XML::Schema Validator XML::Schema::Parser (for importer) e JSON 2.10</p> + </li> +</ul> + +<h2 id="TUDO">TUDO</h2> + +<ul> + <li> + <p style="margin-bottom: 0in;">Preferência do Usuário</p> + </li> + <li> + <p style="margin-bottom: 0in;">Notificações de Email</p> + </li> + <li> + <p style="margin-bottom: 0in;">Mais relatórios</p> + </li> +</ul> + +<p>Veja o <a href="http://wiki.mozilla.org/Testopia:Roadmap">Roadmap</a> e <a href="https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Testopia&long_desc_type=substring&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailtype1=exact&email1=&emailassigned_to2=1&emailreporter2=1&emailqa_contact2=1&emailtype2=exact&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=">Bug List</a> para mais detalhes.</p> + +<h2 id="Links">Links</h2> + +<ul> + <li> + <p style="margin-bottom: 0in;"><a href="http://wiki.mozilla.org/Testopia:FAQ">FAQ</a></p> + </li> + <li> + <p style="margin-bottom: 0in;"><a href="http://wiki.mozilla.org/Testopia">Wiki</a></p> + </li> + <li> + <p style="margin-bottom: 0in;"><a href="http://landfill.mozilla.org/testopia2/testopia/doc/Manual.pdf">Docs</a></p> + </li> + <li> + <p style="margin-bottom: 0in;"><a href="https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&product=Testopia&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=UNCONFIRMED">Bugs</a> (Por favor leia <a href="https://wiki.mozilla.org/Testopia:Bug_Reporting_Guide">Bug Reporting Guide)</a></p> + </li> + <li> + <p style="margin-bottom: 0in;">Official Testopia <a href="http://testopia.blogspot.com/">Blog</a></p> + </li> + <li> + <p style="margin-bottom: 0in;">IRC: <a href="irc://irc.mozilla.org/testopia">#testopia</a> or <a href="irc://irc.mozilla.org/mozwebtools">#mozwebtools </a></p> + </li> + <li> + <p style="margin-bottom: 0in;">Ajuda usuário (Inglês) <a href="mailto:support-webtools@lists.mozilla.org">support-webtools@lists.mozilla.org</a></p> + </li> + <li> + <p style="margin-bottom: 0in;">Desenvolvedores <a href="mailto:dev-apps-webtools@lists.mozilla.org">dev-apps-webtools@lists.mozilla.org</a></p> + </li> +</ul> + +<h2 id="Downloads">Downloads</h2> + +<ul> + <li> + <p style="margin-bottom: 0in;"><a href="https://ftp.mozilla.org/pub/mozilla.org/webtools/testopia/testopia-2.5-BUGZILLA-4.2.tar.gz">Download 2.5 (Bugzilla 4.2)</a></p> + </li> + <li> + <p style="margin-bottom: 0in;"><a href="ftp://ftp.mozilla.org/pub/mozilla.org/webtools/testopia/testopia-2.4-BUGZILLA-3.6.tar.gz">Download 2.4 (Bugzilla 3.6 and 4.0)</a></p> + </li> + <li> + <p style="margin-bottom: 0in;"><a href="ftp://ftp.mozilla.org/pub/mozilla.org/webtools/testopia/">Archived Versions</a></p> + </li> +</ul> + +<h2 id="Desenvolvedores">Desenvolvedores</h2> + +<p>Greg Hendricks<br> + Vance Baarda (Ex-Desenvolvedor)<br> + Ed Fuentetaja (Ex-Desenvolvedor)</p> diff --git a/files/pt-br/mozilla/chrome_registration/index.html b/files/pt-br/mozilla/chrome_registration/index.html new file mode 100644 index 0000000000..1ccfc7f277 --- /dev/null +++ b/files/pt-br/mozilla/chrome_registration/index.html @@ -0,0 +1,347 @@ +--- +title: Chrome registration +slug: Mozilla/Chrome_Registration +translation_of: Mozilla/Chrome_Registration +--- +<h2 id="What_is_Chrome.3F" name="What_is_Chrome.3F">What is chrome?</h2> + +<p><a href="/en/Chrome" title="en/Chrome">Chrome</a> is the set of user interface elements of the application window that are outside the window's content area. Toolbars, menu bars, progress bars, and window title bars are all examples of elements that are typically part of the chrome.</p> + +<p>Mozilla locates and reads the root <code>chrome.manifest</code> file for extensions and themes.</p> + +<div class="note"> +<p><strong>Note:</strong> With {{Gecko("1.9.2")}} and older, Mozilla reads <code>chrome/*.manifest</code> files from applications. Starting with {{Gecko("2.0")}}, the root <code>chrome.manifest</code> is the only manifest used; you can add <a href="/en/Chrome_Registration#manifest" title="en/Chrome Registration#manifest"><code>manifest</code></a> commands to that file to load secondary manifests.</p> +</div> + +<h2 id="Chrome_Providers" name="Chrome_Providers">Chrome providers</h2> + +<p>A supplier of chrome for a given window type (e.g., for the browser window) is called a chrome provider. The providers work together to supply a complete set of chrome for a particular window, from the images on the toolbar buttons to the files that describe the text, content, and appearance of the window itself.</p> + +<p>There are three basic types of chrome providers:</p> + +<dl> + <dt>Content</dt> + <dd>The main source file for a window description comes from the content provider, and it can be any file type viewable from within Mozilla. It will typically be a XUL file, since XUL is designed for describing the contents of windows and dialogs. The JavaScript files that define the user interface are also contained within the content packages, as well as most XBL binding files.</dd> + <dt>Locale</dt> + <dd>Localizable applications keep all their localized information in locale providers. This allows translators to plug in a different chrome package to translate an application without altering the rest of the source code. The two main types of localizable files are DTD files and Java-style properties files.</dd> + <dt>Skin</dt> + <dd>A skin provider is responsible for providing a complete set of files that describe the visual appearance of the chrome. Typically a skin provider will provide CSS files and images.</dd> +</dl> + +<div class="note"> +<p><strong>Note:</strong> Scripts (including those found in <a href="/en/XBL" title="en/XBL">XBL</a>) loaded from skin packages will not execute.</p> +</div> + +<h2 id="The_Chrome_Registry" name="The_Chrome_Registry">The chrome registry</h2> + +<p>The Gecko runtime maintains a service known as the chrome registry that provides mappings from chrome package names to the physical location of chrome packages on disk.</p> + +<p>This chrome registry is configurable and persistent, and thus a user can install different chrome providers, and select a preferred skin and locale. This is accomplished through xpinstall and the extension manager.</p> + +<p>In order to inform the chrome registry of the available chrome, a text manifest is used: this manifest is "chrome.manifest" in the root of an extension, or theme, or XULRunner application.</p> + +<p>The plaintext chrome manifests are in a simple line-based format. Each line is parsed individually; if the line is parsable the chrome registry takes the action identified by that line, otherwise the chrome registry ignores that line (and prints a warning message in the runtime error console).</p> + +<pre class="eval" style="white-space: pre-wrap;">locale packagename localename path/to/files +skin packagename skinname path/to/files +</pre> + +<div class="note"> +<p><strong>Note:</strong> The characters @ # ; : ? / are not allowed in the packagename.</p> +</div> + +<p></p><div class="warning">Firefox 2, Thunderbird 2, and SeaMonkey 1.1 will not find the chrome when <code>packagename</code> is mixed case. If the above example had a <code>packagename</code> of <strong>C</strong>amel<strong>C</strong>ase<strong>P</strong>ackage, you would get an error message similar to "No chrome registered for chrome://<strong>c</strong>amel<strong>c</strong>ase<strong>p</strong>ackage/path/to/files". Firefox 3, Thunderbird 3, and SeaMonkey 2 support mixed case. Bug resolved in Mozilla 1.9; see {{bug(132183)}}.</div><p></p> + +<h2 id="Manifest_Instructions" name="Manifest_Instructions">Manifest instructions</h2> + +<h3 id="comments" name="comments">comments</h3> + +<p>A line is a comment if it begins with the character '#'; any other character in the line is ignored.</p> + +<pre class="eval" style="white-space: pre-wrap;"># this line is a comment - you can put whatever you want here +</pre> + +<h3 id="manifest" name="manifest">manifest</h3> + +<p>{{ gecko_minversion_inline("2.0b4") }}</p> + +<pre>manifest <em>subdirectory/foo.manifest [flags]</em> +</pre> + +<p>This will load a secondary manifest file. This can be useful for separating component and chrome registration instructions, or separate platform-specific registration data.</p> + +<h3 id="binary-component">binary-component</h3> + +<p>{{ gecko_minversion_inline("2.0b2") }}</p> + +<pre>binary-component <em>components/mycomponent.dll [flags]</em> +</pre> + +<p>Instructs Mozilla to register and use a binary component. It should be combined with the abi flag, since binary components are ABI-specific. <a href="/en/XPCOM/XPCOM_changes_in_Gecko_2.0" title="en/XPCOM/XPCOM changes in Gecko 2.0">Prior to Firefox 4</a>, files in the components directory were registered automatically.</p> + +<h3 id="interfaces">interfaces</h3> + +<p>{{ gecko_minversion_inline("2.0b2") }}</p> + +<pre>interfaces <em>component/mycomponent.xpt [flags]</em> +</pre> + +<p>Instructs Mozilla to load interface information from a typelib file produced by XPIDL. <a href="/en/XPCOM/XPCOM_changes_in_Gecko_2.0" title="en/XPCOM/XPCOM changes in Gecko 2.0">Prior to Firefox 4</a>, files in the components directory were registered automatically.</p> + +<h3 id="component">component</h3> + +<p>{{ gecko_minversion_inline("2.0b2") }}</p> + +<pre>component <em>{00000000-0000-0000-0000-000000000000} components/mycomponent.js [flags]</em> +</pre> + +<p>Informs Mozilla about a component CID implemented by an XPCOM component implemented in JavaScript (or another scripting language, if applicable). The ClassID {0000...} must match the ClassID implemented by the component. To generate a unique ClassID, use a UUID generator program or site.</p> + +<h3 id="contract">contract</h3> + +<p>{{ gecko_minversion_inline("2.0b2") }}</p> + +<pre>contract <em>@foobar/mycontract;1 <em>{00000000-0000-0000-0000-000000000000} [flags]</em></em> +</pre> + +<p>Maps a contract ID (a readable string) to the ClassID for a specific implementation. Typically a contract ID will be paired with a component entry immediately preceding.</p> + +<h3 id="category">category</h3> + +<p>{{ gecko_minversion_inline("2.0b2") }}</p> + +<pre>category <em>category entry-name value [flags]</em> +</pre> + +<p>Registers an entry in the <a href="/en/XPCOM_Interface_Reference/nsICategoryManager" title="en/XPCOM Interface Reference/nsICategoryManager">category manager</a>. The specific format and meaning of category entries depend on the category.</p> + +<h3 id="content" name="content" style="min-height: 0;">content</h3> + +<p>A content package is registered with the line</p> + +<pre>content <em>packagename</em> <em>uri/to/files/</em> <em>[flags]</em> +</pre> + +<p>This will register a location to use when resolving the URI <code>chrome://<em>packagename</em>/content/...</code>. The URI may be absolute or relative to the location of the manifest file. Note: it must end with a '/'.</p> + +<h3 id="locale" name="locale">locale</h3> + +<p>A locale package is registered with the line</p> + +<pre class="eval" style="white-space: pre-wrap;">locale <em>packagename</em> <em>localename</em> <em>uri/to/files/</em> <em>[flags]</em> +</pre> + +<p>This will register a locale package when resolving the URI chrome://<em>packagename</em>/locale/... . The <em>localename</em> is usually a plain language identifier "en" or a language-country identifier "en-US". If more than one locale is registered for a package, the chrome registry will select the best-fit locale using the user's preferences.</p> + +<h3 id="skin" name="skin">skin</h3> + +<p>A skin package is registered with the line</p> + +<pre class="eval" style="white-space: pre-wrap;">skin <em>packagename</em> <em>skinname</em> <em>uri/to/files/</em> <em>[flags]</em> +</pre> + +<p>This will register a skin package when resolving the URI <a class="external" rel="freelink">chrome://packagename/skin/</a>... . The <em>skinname</em> is an opaque string identifying an installed skin. If more than one skin is registered for a package, the chrome registry will select the best-fit skin using the user's preferences.</p> + +<h3 id="style" name="style">style</h3> + +<p>Style overlays (custom CSS which will be applied to a chrome page) are registered with the following syntax:</p> + +<pre class="eval" style="white-space: pre-wrap;">style chrome://<em>URI-to-style</em> chrome://<em>stylesheet-URI</em> <em>[flags]</em> +</pre> + +<div class="note"><strong>Note:</strong> Only stylesheets at chrome URIs can be applied in this way.</div> + +<h3 id="override" name="override">override</h3> + +<p>In some cases an extension or embedder may wish to override a chrome file provided by the application or XULRunner. In order to allow for this, the chrome registration manifest allows for "override" instructions:</p> + +<pre class="eval" style="white-space: pre-wrap;">override chrome://<em>package</em>/<em>type</em>/<em>original-uri.whatever</em> <em>new-resolved-URI</em> <em>[flags]</em> +</pre> + +<p>Note: overrides are not recursive (so overriding <a class="external" rel="freelink">chrome://foo/content/bar/</a> with <a class="external" rel="freelink">file:///home/john/blah/</a> will not usually do what you want or expect it to do). Also, the path inside overridden files is relative to the overridden path, not the original one (this can be annoying and/or useful in CSS files, for example).</p> + +<div class="note"> +<p><strong>Note:</strong> There was a bug in {{Gecko("1.8.1.5")}} (Firefox 2.0.0.5) and earlier where you could not use a relative URL for the <em>new-resolved-URI</em> parameter. You needed to provide an absolute URL. See {{ Bug(323455) }}.</p> +</div> + +<h3 id="resource" name="resource">resource</h3> + +<p>{{ Fx_minversion_inline("3") }}</p> + +<p>Aliases can be created using the <code>resource</code> instruction:</p> + +<pre class="eval" style="white-space: pre-wrap;">resource <em>aliasname</em> <em>uri/to/files/</em> <em>[flags]</em> +</pre> + +<p>This will create a mapping for <code>resource://<aliasname><span style="font-family: Verdana,Tahoma,sans-serif;">/</span></code> URIs to the path given.</p> + +<div class="note"> +<p><strong>Note:</strong> There are no security restrictions preventing web content from including content at resource: URIs, so take care what you make visible there.</p> +</div> + +<h2 id="Manifest_Flags" name="Manifest_Flags">Manifest flags</h2> + +<p>Manifest lines can have multiple, space-delimited flags added at the end of the registration line. These flags mark special attributes of chrome in that package, or limit the conditions under which the line is used.</p> + +<h3 id="application" name="application">application</h3> + +<p>Extensions may install into multiple applications. There may be chrome registration lines which only apply to one particular application. The flag</p> + +<pre class="eval" style="white-space: pre-wrap;">application=<em>app-ID</em> +</pre> + +<p>indicates that the instruction should only be applied if the extension is installed into the application identified by <em>app-ID</em>. Multiple application flags may be included on a single line, in which case the line is applied if any of the flags match.</p> + +<p>This example shows how a different overlay can be used for different applications:</p> + +<pre style="white-space: pre-wrap;">overlay chrome://browser/content/browser.xul chrome://myaddon/content/ffOverlay.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} +overlay chrome://messenger/content/mailWindowOverlay.xul chrome://myaddon/content/tbOverlay.xul application={3550f703-e582-4d05-9a08-453d09bdfdc6} +overlay chrome://songbird/content/xul/layoutBaseOverlay.xul chrome://myaddon/content/sbOverlay.xul application=songbird@songbirdnest.com +</pre> + +<h3 id="appversion" name="appversion">appversion</h3> + +<p>Extensions may install into multiple versions of an application. There may be chrome registration lines which only apply to a particular application version. The flag</p> + +<pre class="eval" style="white-space: pre-wrap;">appversion=<em>version</em> +appversion<<em>version</em> +appversion<=<em>version</em> +appversion><em>version</em> +appversion>=<em>version</em> +</pre> + +<p>indicates that the instruction should only be applied if the extension is installed into the application version identified. Multiple <code>appversion</code> flags may be included on a single line, in which case the line is applied if any of the flags match. The version string must conform to the <a href="/en/Toolkit_version_format" title="en/Toolkit_version_format">Toolkit version format</a>.</p> + +<div class="note"> +<p><strong>Note:</strong> Versions of Gecko before {{Gecko("1.8.0.13")}} and {{Gecko("1.8.1.5")}} contained a bug where if you use the comparisons <, > or =, the version string had be two or more characters long. If not, you would get a message in the error console that the <code>appversion</code> flag was not recognized. See {{ Bug(380398) }}.</p> +</div> + +<h3 id="platformversion" name="platformversion">platformversion</h3> + +<p>{{ gecko_minversion_inline("8.0") }} When supporting more then one application, it is often more convenient for an extension to specify which Gecko version it is compatible with. This is particularly true for binary components. If there are chrome registration lines which only apply to a particular Gecko version, the flag</p> + +<pre class="eval" style="white-space: pre-wrap;">platformversion=<em>version</em> +platformversion<<em>version</em> +platformversion<=<em>version</em> +platformversion><em>version</em> +platformversion>=<em>version</em> +</pre> + +<p>indicates that the instruction should only be applied if the extension is installed into an application using the Gecko version identified. Multiple <code>platformversion</code> flags may be included on a single line, in which case the line is applied if any of the flags match.</p> + +<h3 id="contentaccessible" name="contentaccessible">contentaccessible</h3> + +<p>{{ Fx_minversion_inline("3") }} Chrome resources can no longer be referenced from within <img>, <script>, or other elements contained in, or added to, content that was loaded from an untrusted source. This restriction applies to both elements defined by the untrusted source and to elements added by trusted extensions. If such references need to be explicitly allowed, set the <code>contentaccessible</code> flag to <code>yes</code> to obtain the behavior found in older versions of Firefox. <span class="comment">See {{ bug("436989") }}.</span></p> + +<p>The <code>contentaccessible</code> flag applies only to content packages: it is not recognized for locale or skin registration. However, the matching locale and skin packages will also be exposed to content.</p> + +<p><strong>n.b.:</strong> Because older versions of Firefox do not understand the <code>contentaccessible</code> flag, any extension designed to work with both Firefox 3 and older versions of Firefox will need to provide a fallback. For example:</p> + +<pre style="white-space: pre-wrap;">content packagename chrome/path/ +content packagename chrome/path/ contentaccessible=yes +</pre> + +<h3 id="os" name="os">os</h3> + +<p>{{ Fx_minversion_inline("3") }} Extensions (or themes) may offer different features depending on the operating system on which Firefox is running. The value is compared to the value of <a href="/en/OS_TARGET" title="en/OS_TARGET">OS_TARGET</a> for the platform.</p> + +<pre class="eval" style="white-space: pre-wrap;">os=WINNT +os=Darwin +</pre> + +<p>See <a href="/en/OS_TARGET" title="en/OS_TARGET">OS_TARGET</a> for a more complete list of os names. The os name is case insensitive.</p> + +<h3 id="osversion" name="osversion">osversion</h3> + +<p>{{ Fx_minversion_inline("3") }} An extension or theme may need to operate differently depending on which version of an operating system is running. For example, a theme may wish to adopt a different look on Mac OS X 10.5 than 10.4:</p> + +<pre class="eval" style="white-space: pre-wrap;">osversion>=10.5 +</pre> + +<h3 id="platform_.28Platform-specific_packages.29" name="platform_.28Platform-specific_packages.29">abi</h3> + +<p>{{ Fx_minversion_inline("4") }} If a component is only compatible with a particular ABI, it can specify which ABI/OS by using this directive. The value is taken from the <a href="/en/XPCOM_Interface_Reference/nsIXULRuntime" title="https://developer.mozilla.org/en/nsIXULRuntime">nsIXULRuntime</a> OS and XPCOMABI values (concatenated with an underscore). For example:</p> + +<pre>binary-component component/myLib.dll abi=WINNT_<code>x86-MSVC +</code>binary-component component/myLib.so abi=Linux_<code>x86-gcc3 </code> +</pre> + +<p>See <a href="/en/XPCOM_ABI" title="en/XPCOM ABI">XPCOM ABI</a> for more details.</p> + +<h3 id="platform_.28Platform-specific_packages.29" name="platform_.28Platform-specific_packages.29">platform (Platform-specific packages)</h3> + +<p>Some packages are marked with a special flag indicating that they are platform specific. Some parts of content, skin, and locales may be different based on the platform being run. These packages contain three different sets of files, for Windows and OS/2, Macintosh, and Unix-like platforms. For example, the order of the "OK" and "Cancel" buttons in a dialog is different, as well as the names of some items.</p> + +<p>The "platform" modifier is only parsed for content registration; it is not recognized for locale or skin registration. However, it applies to content, locale, and skin parts of the package, when specified.</p> + +<p>To indicate that a package is platform-specific, add the "platform" modifier to the "content" line after the path, for example:</p> + +<pre class="eval" style="white-space: pre-wrap;">content global-platform jar:toolkit.jar!/toolkit/content/global-platform/ platform +</pre> + +<p>Once that is specified in your manifest you then ensure that under the directory global-platform are subdirectories <code>win</code> (Windows/OS2), <code>mac</code> (OS9/OSX), or <code>unix</code> (Everything Else). Anything residing outside of these subdirectories will be ignored.</p> + +<h3 id="xpcnativewrappers" name="xpcnativewrappers">xpcnativewrappers</h3> + +<p>Chrome packages can decide whether to use the <a href="/en/XPCNativeWrapper" title="en/XPCNativeWrapper">XPCNativeWrapper</a> security mechanism to automatically protect their code against malicious content that they might access. See <a href="/en/Safely_accessing_content_DOM_from_chrome" title="en/Safely_accessing_content_DOM_from_chrome">Safely accessing content DOM from chrome</a> for details.</p> + +<p>This flag is enabled by default since Firefox 1.5. Disabling it manually was possible by specifying <code>xpcnativewrappers=no</code> until Firefox 4.</p> + +<div class="note"> +<p><strong>Note:</strong> Support for this flag has been removed in {{Gecko("2.0")}}. You can no longer disable <code>XPCNativeWrapper</code>s. To update your add-on to work without this flag:</p> + +<ul> + <li>If your add-on depends upon XBL bindings attached to content objects (that is, it needs to be able to call functions or get and set properties created by the XBL binding), you'll need to use the object's <a href="/en/wrappedJSObject" title="en/wrappedJSObject"><code>wrappedJSObject</code></a> property to obtain a wrapped object.</li> + <li>If you need to call functions or access properties defined by the content -- for example, if your add-on wants to add a button to the page that calls a JavaScript function defined by the page.</li> +</ul> +</div> + +<p>The <code>xpcnativewrappers</code> flag applies only to content packages; it is not recognized for locale or skin registration.</p> + +<h2 id="Example_Chrome_Manifest" name="Example_Chrome_Manifest">Example chrome manifest</h2> + +<pre class="eval" style="white-space: pre-wrap;">content necko jar:comm.jar!/content/necko/ +locale necko en-US jar:en-US.jar!/locale/en-US/necko/ +content xbl-marquee jar:comm.jar!/content/xbl-marquee/ +content pipnss jar:pipnss.jar!/content/pipnss/ +locale pipnss en-US jar:en-US.jar!/locale/en-US/pipnss/ +# Firefox-only +overlay <a class="external" rel="freelink">chrome://browser/content/pageInfo.xul</a> <a class="external" rel="freelink">chrome://pippki/content/PageInfoOverlay.xul</a> application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} +# SeaMonkey-only +overlay <a class="external" rel="freelink">chrome://navigator/content/pageInfo.xul</a> <a class="external" rel="freelink">chrome://pippki/content/PageInfoOverlay.xul</a> application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} +overlay <a class="external" rel="freelink">chrome://communicator/content/pref/preftree.xul</a> <a class="external" rel="freelink">chrome://pippki/content/PrefOverlay.xul</a> +content pippki jar:pippki.jar!/content/pippki/ +locale pippki en-US jar:en-US.jar!/locale/en-US/pippki/ +content global-platform jar:toolkit.jar!/content/global-platform/ platform +skin global classic/1.0 jar:classic.jar!/skin/classic/global/ +override <a class="external" rel="freelink">chrome://global/content/netError.xhtml</a> jar:embedder.jar!/global/content/netError.xhtml +content inspector jar:inspector.jar!/content/inspector/ +</pre> + +<h2 id="Instructions_supported_in_bootstrapped_add_ons" name="Instructions_supported_in_bootstrapped_add_ons">Instructions supported in bootstrapped add-ons</h2> + +<p>The following instructions are supported in <a href="/en/Extensions/Bootstrapped_extensions" title="en/Extensions/Bootstrapped extensions">Bootstrapped extensions</a>:</p> + +<ul> + <li><code>manifest</code></li> + <li><code>content</code></li> + <li><code>locale</code></li> + <li><code>skin</code></li> + <li><code>override</code></li> +</ul> + +<h2 id="Debugging_a_Chrome_Manifest_file" name="Debugging_a_Chrome_Manifest_file">Debugging a chrome manifest file</h2> + +<p>The <a class="link-https" href="https://addons.mozilla.org/firefox/addon/chrome-list">Chrome List</a> extension (for Firefox 3.6 and older) shows all registered chrome. This is very helpful when trying to write a <code>chrome.manifest</code> file as you can inspect where the files are being mapped from (jar files, local directory, etc.)</p> + +<h2 id="Old-style_contents.rdf_manifests" name="Old-style_contents.rdf_manifests">Old-style contents.rdf manifests</h2> + +<p>Before the plaintext manifests were introduced (which happened in Firefox 1.5, Toolkit 1.8), RDF manifests named "contents.rdf" were used to register chrome. This format is deprecated; however, SeaMonkey versions before version 2 do not support the plaintext manifest format yet, so <code>contents.rdf</code> manifests are required for extensions that wish to maintain backwards compatibility with Firefox 1.0 or the suite.</p> + +<p>{{ gecko_minversion_note("1.9.2", "The <code>contents.rdf</code> manifest format is no longer supported at all starting with Gecko 1.9.2; add-ons already installed using this format will continue to work but can no longer be installed. Be sure to remove your add-on and reinstall it to ensure that it installs correctly after updating it to use a plaintext manifest.") }}</p> + +<h2 id="Official_References_for_Toolkit_API" name="Official_References_for_Toolkit_API">Official references for <a href="/en/Toolkit_API" title="en/Toolkit_API">Toolkit API</a></h2> + +<p>{{ page("en-US/docs/Toolkit_API/Official_References") }}</p> + +<p>{{ languages( { "fr": "fr/Enregistrement_chrome", "ja": "ja/Chrome_Registration", "pl": "pl/Rejestracja_Chrome" ,"zh-cn":"zh-cn/Chrome_Registration"} ) }}</p> diff --git a/files/pt-br/mozilla/connect/index.html b/files/pt-br/mozilla/connect/index.html new file mode 100644 index 0000000000..366129db72 --- /dev/null +++ b/files/pt-br/mozilla/connect/index.html @@ -0,0 +1,126 @@ +--- +title: Conecte-se ao Mozilla +slug: Mozilla/Connect +tags: + - Landing +translation_of: Mozilla/Connect +--- +<div class="summary"> +<p>Capacite-se, inspire-se e colabore para fazer a Web a primeira plataforma usada para criar experiências com todos os dispositivos conectados.</p> +</div> + +<div> +<div class="column-container dev-program-callouts dev-program-block dev-program-first dev-program-column-wrapper"> +<div class="dev-program-callout"> +<div class="callout-link-container"> +<h2 id="Hacks_blog">Hacks blog</h2> + +<p>Um recurso fundamental para pessoas que estão desenvolvendo para a Open Web, o blog Mozilla Hacks oferece notícias e discussões das últimas tecnologias Web e novidades do navegador.</p> + +<div class="callout-link-wrapper"><a class="callout-link ignore-external" href="https://hacks.mozilla.org/" style="white-space: normal;">Leia agora </a></div> +</div> +</div> + +<div class="dev-program-callout"> +<div class="callout-link-container"> +<h2 id="Canais_de_feedback">Canais de feedback</h2> + +<p>Você tem uma <a href="http://mzl.la/devtools">grande ideia de Ferramentas para Desenvolvedores</a>? Deixe-nos saber e ajudar-lhe a moldar essas novas funcionalidades.</p> + +<p>Construindo algo e precisa de ajuda? Faça sua pergunta no Stack Overflow!<br> + <span class="smaller"><strong>{{anch("Developer discussions", "Search the Q&A below")}}</strong></span></p> + +<div class="callout-link-wrapper"><a class="callout-link ignore-external" href="http://stackoverflow.com/r/mozilla" style="white-space: normal;">Mozilla Q&A on Stack Overflow </a></div> +</div> +</div> + +<div class="dev-program-callout"> +<div class="callout-link-container"> +<h2 id="Junte-se_à_MDN">Junte-se à MDN</h2> + +<p>Junte-se à MDN! Você será capaz de <a href="/en-US/docs/MDN/Contribute"> editar documentações</a> aqui, crie um perfil para mostrar o seu trabalho, e tenha acesso a novos recursos ao longo do tempo a medida que forem lançadas.</p> + +<div class="callout-link-wrapper"><a class="callout-link" href="/profile/edit" style="white-space: normal;">Cadastre-se ou Entre </a></div> +</div> +</div> +</div> + +<div class="dev-program-explanation dev-program-block"> +<h2 id="Conectar_com_a_Mozilla">Conectar com a Mozilla</h2> + +<p>Os desenvolvedores estão criando o futuro através da construção de serviços e aplicativos para pessoas de todo o mundo. O objetivo de Relações com Desenvolvedores da Mozilla é ajudar os desenvolvedores a usar tecnologias web abertas e padronizadas para ter sucesso em alcançar seus objetivos. Além da documentação aqui na MDN, oferecemos ajuda e outros recursos para atingir esse objetivo, através de vários canais. Nós convidamos você a se conectar, aprender e compartilhar seu próprio conhecimento.</p> + +<p>Estamos oferecendo ajuda através do <a href="http://stackoverflow.com/r/mozilla">Q&A no Stack Overflow</a>, para resolver problemas e desafios que possa ter técnicas específicas. Temos também uma newsletter mantê-lo informado sobre os últimos acontecimentos na cena web em torno de aplicativos da web e muito mais. <a href="https://marketplace.firefox.com/developers/#newsletter-signup">Assine a newsletter Apps & Hacks</a>.</p> + +<p>Se você compartilhar a <a href="https://www.mozilla.org/en-US/mission/">missão</a> e os <a href="https://www.mozilla.org/en-US/about/manifesto/">principios</a> da Mozilla, e querer ajudar a espalhar eles para mais desenvolvedores, confira as maneiras que você pode se envolver com a <a href="https://wiki.mozilla.org/Engagement/Developer_Engagement/Technical_Evangelism/Get_Involved">técnica de evangelismo</a>, e junte-se ao nosso <a href="https://lists.mozilla.org/listinfo/evangelism">grupo de discussão evangelismo Mozilla</a>.</p> + +<p>Temos um monte de planos e ideias para de forma iterativa expandir nossas ofertas de relações com desenvolvedores, e nós queremos que você envolvidas como nós fazê-lo! Então, <a href="http://stackoverflow.com/r/mozilla">siga as tags no Stack Overflow</a>, <a href="https://hacks.mozilla.org/">assine o blog Hacks</a>, <a href="https://marketplace.firefox.com/developers/#newsletter-signup">subscrever a newsletter</a>, <a href="/profile/edit">e se inscrever para uma conta</a>!</p> + +<h2 id="Junte-se_à_Mozilla" style="line-height: 30px;"><strong>Junte-se à Mozilla</strong></h2> + +<p>Se você quiser ir além de conexão com a Mozilla, você pode se juntar e ajudar a concretizar a <a href="https://www.mozilla.org/mission/">nossa missão de construir uma Internet melhor</a>. Como um desenvolvedor, você tem habilidades para contribuir em muitas áreas, bem como a oportunidade de aprimorar suas habilidades. Mozilla é um projeto open source, por isso, "o padrão para abrir." Você pode "ver a fonte" e contribuir para os nossos projetos de desenvolvimento de software, como o navegador Firefox para desktop e Android, o Firefox OS, e próprios sites da Mozilla. Você pode tornar-se parte de uma comunidade internacional e obter o reconhecimento por seus esforços. Aqui estão algumas das vantagens de contribuir com o projeto Mozilla.</p> + +<h3 id="Oportunidade_de_aprender_algo_novo"><strong>Oportunidade de aprender algo novo </strong></h3> + +<div> +<p>Ao escrever código para um projeto open source, você pode enfrentar problemas que você não tenha encontrado antes, que apresentam oportunidades de aprendizagem para você. Você pode experimentar novas ferramentas e técnicas em um projeto open source. Por exemplo, se você nunca fez qualquer teste de unidade, e não pode obter permissão do seu chefe para fazê-lo em seu trabalho regular, a escrever algum código para um projeto open source seria um excelente lugar para experimentá-lo. Contribuindo para o código aberto dá-lhe a oportunidade de colaborar com e conhecer muitas pessoas ao redor do mundo que têm interesses semelhantes. Além disso, uma organização de código aberto como o Mozilla tem muitos contribuintes que podem ajudá-lo a resolver problemas que você encontrar. Se você está apenas começando a contribuir, você pode procurar por alguns bugs "orientados", um colaborador experiente se oferece para ajudar um recém-chegado à corrigi-los.</p> + +<h3 id="O_que_posso_obter_contribuindo"><strong>O que posso obter contribuindo?</strong></h3> + +<p>Explorar muitas coisas e obter reconhecimento na comunidade -- estes são os benefícios intangíveis de contribuir para a Mozilla. Embora não possamos garantir benefícios tangíveis específicos, muitos contribuintes de valor recebem ferramentas da Mozilla de graça e convites para eventos relacionados à Mozilla, e são os primeiros na fila a serem considerado para estágios. Além disso, sua experiência em contribuir para um projeto open source pode ajudá-lo a encontrar um emprego. Mais e mais empregadores de desenvolvedores estão olhando para contribuições em código aberto. Eles gostam de ver que você está blogando e contribuindo para listas de discussão, e eles gostariam de vê-lo listado como um contribuidor em um projeto open source. Também pode ajudar com a seção de experiência de trabalho do seu currículo.</p> + +<h3 id="Como_eu_posso_contribuir_com_a_Mozilla"><strong>Como eu posso contribuir com a Mozilla?</strong></h3> + +<p>Há muitos projetos de área para a qual você pode contribuir para a Mozilla. Você pode encontrar, uma lista completa, visite a página atual Mozilla <a href="https://www.mozilla.org/contribute">Veja a página do contribuinte</a>. Algumas áreas que podem lhe interessar como um desenvolvedor incluem:</p> + +<ul> + <li><a href="http://www.whatcanidoformozilla.org/">Codificação</a></li> + <li><a href="http://www.whatcanidoformozilla.org/">Desenvolvimento Web</a></li> + <li><a href="/en-US/Firefox_OS/Developing_Gaia">Firefox OS</a></li> + <li><a href="https://quality.mozilla.org/teams/">QA</a></li> + <li><a href="https://wiki.mozilla.org/Marketplace/Contributing/Addons">Complementos</a></li> + <li><a href="https://wiki.mozilla.org/Marketplace/Contributing/Apps">Aplicativos</a></li> + <li><a href="/en-US/docs/MDN/Getting_started">Documentação do Desenvolvedor (Aqui no MDN)</a></li> +</ul> +</div> +</div> + +<div class="column-container dev-program-block"> +<div class="column-half" id="Developer_discussions"> +<h2 id="QA_no_Stack_Overflow_Veja_Todo_o_QA...">Q&A no Stack Overflow <a class="heading-link" href="http://stackoverflow.com/r/mozilla">Veja Todo o Q&A...</a></h2> + +<p>Nós temos Q&A para discutir desafios e questões ao desenvolver, em particular para Firefox OS e para Web Aberta nos dispositivos moveis. Está disponível no Stack Overflow nesta URL <a href="http://stackoverflow.com/r/mozilla">http://stackoverflow.com/r/mozilla</a>.</p> + +<div class="stack-form">Stack form</div> + +<h3 id="Últimos_Tópicos_QA">Últimos Tópicos Q&A</h3> +</div> + +<div class="column-half dev-program-hacks dev-program-block"> </div> +</div> + +<p class="dev-program-block"><img alt="Developers at a Firefox OS workshop in Madrid." src="https://mdn.mozillademos.org/files/6611/PhonesUp.jpg" style="display: block; height: 359px; margin: 0px auto; max-width: 100%; width: 720px;"></p> + +<div class="column-container dev-program-block"> +<div class="column-7 dev-program-events"> +<h2 id="Onde_está_a_Mozilla">Onde está a Mozilla?</h2> + +<p><a class="heading-link" href="https://developer.mozilla.org/en/events">Veja os participantes e detalhes na nossa Pagina de Eventos...</a></p> +</div> + +<div class="column-5"> +<h2 id="Outros_Recursos">Outros Recursos</h2> + +<ul class="no-bullets"> + <li><a href="http://www.youtube.com/user/mozhacks">Mozilla Hacks no YouTube</a> + + <ul> + <li><a href="http://www.youtube.com/playlist?list=PLo3w8EB99pqIHIUUv08hBCHq1OgPKhdo0">Videos do Firefox OS</a></li> + <li><a href="http://www.youtube.com/playlist?list=PLo3w8EB99pqLZNY22xKbTEzMfYo9PXAlm">Videos de Ferramentas de Desenvolvimento Firefox</a></li> + </ul> + </li> + <li><a href="https://twitter.com/mozhacks">@mozhacks no Twitter</a></li> +</ul> +</div> +</div> +</div> diff --git a/files/pt-br/mozilla/developer_guide/codigo_fonte/index.html b/files/pt-br/mozilla/developer_guide/codigo_fonte/index.html new file mode 100644 index 0000000000..7d56685269 --- /dev/null +++ b/files/pt-br/mozilla/developer_guide/codigo_fonte/index.html @@ -0,0 +1,70 @@ +--- +title: Trabalhando com o código-fonte Mozilla +slug: Mozilla/Developer_guide/Codigo_Fonte +translation_of: Mozilla/Developer_guide/Source_Code +--- +<p>Os artigos abaixo vão ajuda-lo a obter o código-fonte Mozilla, aprender a navegar pelo código e como ter as suas modificações aceitas para inclusão no repositório principal.</p> +<table class="mainpage-table"> + <tbody> + <tr> + <td colspan="2"> + <h2 id="Tópicos_da_documentação">Tópicos da documentação</h2> + </td> + </tr> + <tr> + <td> + <dl> + <dt> + <a class="internal" href="/En/Developer_Guide/Source_Code/Mercurial" title="En/Mozilla Source Code (Mercurial)">Obtendo o código do repositório Mercurial</a></dt> + <dd> + Se você planeja contribuir com o projeto Mozilla, a melhor forma de obter o código-fonte é fazendo checkout do repositório versionado. Aprenda aqui como fazê-lo.</dd> + <dt> + <a class="internal" href="/En/Developer_Guide/Source_Code/Downloading_Source_Archives" title="En/Mozilla Source Code (HTTP//FTP)">Baixando o código usando HTTP ou FTP</a></dt> + <dd> + Se você quer obter o código de uma versão específica ou de um produto Mozilla em particular, você pode optar por baixar um pacote de código-fonte.</dd> + <dt> + <a class="internal" href="/en/Viewing_and_searching_Mozilla_source_code_online" title="En/Viewing and searching Mozilla source code online">Vendo e buscando pelo código-fonte Mozilla online</a></dt> + <dd> + Aprenda a usar a MXR, a ferramenta Mozilla de busca e navegação para acessar o código-fonte. Esta não é uma boa forma de baixar o código, mas é uma ótima maneira de fazer buscas nele.</dd> + <dt> + <a class="internal" href="/en/Mozilla_Source_Code_Directory_Structure" title="en/Mozilla Source Code Directory Structure">Navegando no código-fonte Mozilla</a></dt> + <dd> + Aprenda a respeito das várias pastas na árvore de código-fonte da Mozilla e como encontrar o que você está procurando.</dd> + <dt> + <a class="external" href="/en/Introduction#Find_a_bug_we%27ve_identified_as_being_good_for_newcomers" title="/en/Introduction#Find_a_bug_we%27ve_identified_as_being_good_for_newcomers">Bugs para novatos</a></dt> + <dd> + Se você é novo no projeto e quer algo para trabalhar, olhe aqui.</dd> + </dl> + </td> + <td> + <dl> + <dt> + <a class="internal" href="/En/Developer_Guide/Coding_Style" title="En/Mozilla Coding Style Guide">Guia de estilo do código Mozilla</a></dt> + <dd> + O guia de estilo do código provê informações sobre como você deve formatar o seu código-fonte para garantir que você não sofra bullying dos revisadores.</dd> + <dt> + <a href="/En/Developer_Guide/Interface_development_guide" title="En/Developer Guide/Interface development guide">Guia de desenvolvimento de interfaces</a></dt> + <dd> + Diretrizes e documentação sobre como criar e atualizar interfaces XPCOM.</dd> + <dt> + <a class="link-https" href="https://wiki.mozilla.org/Build:TryServer" title="https://wiki.mozilla.org/Build:TryServer">Servidores de teste</a></dt> + <dd> + Os produtos Mozilla são compilados em pelo menos três plataformas. Se você não tem acesso a todas elas, você pode usar os servidores de teste para testar seus patches e ter certeza que eles passam nos testes.</dd> + <dt> + <a class="internal" href="/en/Creating_a_patch" title="En/Creating a patch">Criando um patch</a></dt> + <dd> + Após fazer mudanças no código Mozilla, o próximo passo (depois de ter certeza que ele funciona) é criar um patch e envia-lo para revisão. <em>Esse artigo precisa ser completamente atualizado para o Mercurial.</em></dd> + <dt> + <a class="external" href="http://www.mozilla.org/hacking/committer/" title="http://www.mozilla.org/hacking/committer/">Obtendo acesso para fazer commit no código-fonte</a></dt> + <dd> + Sentindo-se preparado para untar-se aos poucos e orgulhosos <em>committers</em>? Descubra como obter acesso para gravação no código Mozilla.</dd> + <dt> + <a class="internal" href="/En/Developer_Guide/Source_Code/CVS" title="En/Mozilla Source Code (CVS)">Obtendo o código Mozilla antigo usando CVS</a></dt> + <dd> + Versões antigas do código-fonte Mozilla, assim como as versões atuais do NSS e NSPR, são mantidas num repositório CVS. Aprenda sobre isso nesse artigo.</dd> + </dl> + </td> + </tr> + </tbody> +</table> +<p>{{ languages( { "de": "de/Entwicklerhandbuch/Quelltexte", "ja": "ja/Developer_Guide/Source_Code" } ) }}</p> diff --git a/files/pt-br/mozilla/developer_guide/index.html b/files/pt-br/mozilla/developer_guide/index.html new file mode 100644 index 0000000000..67a437715d --- /dev/null +++ b/files/pt-br/mozilla/developer_guide/index.html @@ -0,0 +1,140 @@ +--- +title: Guia do Desenvolvedor +slug: Mozilla/Developer_guide +translation_of: Mozilla/Developer_guide +--- +<p><span id="result_box" lang="pt"><span class="hps">Seja você</span> <span class="hps">um veterano</span> <span class="hps">ou</span> <span class="hps">apenas um iniciante,</span> <span class="hps alt-edited">os artigos que você pode</span> <span class="hps">encontrar</span> <span class="hps">a partir desta</span> <span class="hps">página</span> <span class="hps">irá ajudá-lo</span> <span class="hps">enquanto você está trabalhando</span> <span class="hps">no desenvolvimento</span> <span class="hps">da Mozilla.</span></span></p> +<h2 id="Primeira_vez"><span class="short_text" id="result_box" lang="pt"><span class="hps">Primeira vez?</span></span></h2> +<dl> + <dt> + <a href="/pt-BR/docs/Introducao" title="En/Introduction">Introdução</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Um guia para</span> <span class="hps">iniciantes</span> <span class="hps">passo</span> <span class="hps">a passo</span> <span class="hps">para</span> <span class="hps">se envolver</span> <span class="hps">com a Mozilla</span><span>.</span></span></dd> +</dl> +<table class="mainpage-table"> + <tbody> + <tr> + <td> + <h2 id="Tópicos_da_documentação"><span class="short_text" id="result_box" lang="pt"><span class="hps">Tópicos da documentação</span></span></h2> + <dl> + <dt> + <a class="internal" href="/pt-BR/docs/Developer_Guide/Codigo_Fonte" title="En/Developer_Guide/Source_Code"><span class="short_text" id="result_box" lang="pt"><span class="hps">Trabalhando com o</span> <span class="hps">Código Fonte</span> <span class="hps">Mozilla</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Uma visão geral</span> <span class="hps">do código,</span> <span class="hps">como</span> </span>obtê-lo<span id="result_box" lang="pt"><span>, e o</span> <span class="hps">guia de</span> <span class="hps">estilo de codificação.</span></span></dd> + <dt> + <a class="internal" href="/En/Developer_Guide/Build_Instructions" title="En/Developer_Guide/Build_Instructions"><span class="short_text" id="result_box" lang="pt"><span class="hps">Instruções</span> de <span class="hps alt-edited">Compilação</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps alt-edited">Como compilar</span> <span class="hps">o Firefox</span><span>, Thunderbird,</span> <span class="hps">SeaMonkey,</span> <span class="hps">ou outras aplicações</span> <span class="hps">Mozilla.</span></span></dd> + <dt> + <a href="/En/Developer_Guide/Development_process_overview" title="En/Developer Guide/Development process overview"><span class="short_text" id="result_box" lang="pt"><span class="hps">Visão geral do processo</span> <span class="hps">de desenvolvimento</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Uma visão geral do</span> <span class="hps">processo de desenvolvimento</span> <span class="hps">da Mozilla.</span></span></dd> + <dt> + <a href="/en/Mozilla/Multiple_Firefox_Profiles" title="en/Mozilla/Multiple_Firefox_Profiles"><span class="short_text" id="result_box" lang="pt"><span class="hps">Gerenciando</span> <span class="hps alt-edited">múltiplos perfis</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Ao trabalhar com</span> <span class="hps">versões</span> <span class="hps alt-edited">de pré-lançamento do</span> <span class="hps">Firefox</span><span>, é</span> <span class="hps">sempre útil</span> <span class="hps">ter</span> <span class="hps alt-edited">múltiplos perfis</span> <span class="hps">do Firefox</span><span>, como</span> <span class="hps">um para cada canal</span><span>, ou</span> <span class="hps">para diferentes tipos de</span> <span class="hps">testes.</span></span></dd> + <dt> + <a class="internal" href="/en/Mozilla_automated_testing" title="en/Mozilla automated testing"><span class="short_text" id="result_box" lang="pt"><span class="hps">Teste Automatizado</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Como executar</span> <span class="hps">testes automatizados</span> <span class="hps">da Mozilla</span><span>,</span> <span class="hps">e como escrever</span> <span class="hps">novos testes</span><span>.</span></span></dd> + <dt> + <a class="internal" href="/En/Developer_Guide/How_to_Submit_a_Patch" title="En/Getting your patch in the tree"><span class="short_text" id="result_box" lang="pt"><span class="hps">Como</span> <span class="hps">enviar um patch</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps alt-edited">Após </span> <span class="hps alt-edited">o seu patch</span> <span class="hps alt-edited">ser escrito, você</span> <span class="hps alt-edited">precisa colocá-lo para ser </span> <span class="hps">verificado</span> <span class="hps alt-edited">na árvore de diretórios.</span> <span class="hps">Este artigo explica</span> <span class="hps">o processo de revisão</span> <span class="hps">e como obter</span> <span class="hps">o seu patch</span> <span class="hps">aprovado.</span></span></dd> + <dt> + <a href="/En/Developer_Guide/Getting_documentation_updated" title="En/Developer_Guide/Getting documentation updated"><span class="short_text" id="result_box" lang="pt"><span class="hps">Obtendo</span> <span class="hps">a documentação atualizada</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Como garantir</span> <span class="hps">que a documentação seja</span> <span class="hps">mantida atualizada</span> <span class="hps alt-edited">à medida que você desenvolve</span><span>.</span></span></dd> + <dt> + <a class="internal" href="/en/Mozilla_Modules_and_Module_Ownership" title="En/Mozilla Modules and Module Ownership"><span id="result_box" lang="pt"><span class="hps">Módulos</span> <span class="hps alt-edited">da Mozilla</span> <span class="hps">e suas propriedades</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Este artigo fornece informações</span> <span class="hps">sobre os módulos</span> <span class="hps">da Mozilla</span><span>,</span> <span class="hps alt-edited">qual</span> <span class="hps">o papel</span> <span class="hps alt-edited">de um proprietário</span> <span class="hps alt-edited">do módulo</span><span class="hps alt-edited">, e</span> <span class="hps">como os proprietários</span> <span class="hps">do módulo</span> <span class="hps">são selecionados.</span></span></dd> + <dt> + <a class="internal" href="/en/Code_snippets" title="en/Code_snippets"><span class="short_text" id="result_box" lang="pt"><span class="hps">Trechos de código</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Exemplos de códigos</span> <span class="hps">úteis para</span> <span class="hps">uma ampla variedade de</span> <span class="hps">coisas que você</span> <span class="hps">pode precisar</span> <span class="hps">para descobrir</span> <span class="hps">como fazer</span><span>.</span></span></dd> + <dt> + <a class="internal" href="/en/Mozilla_Development_Strategies" title="En/Mozilla Development Strategies"><span class="short_text" id="result_box" lang="pt">E<span class="hps">stratégias de desenvolvimento</span></span></a> <a class="internal" href="/en/Mozilla_Development_Strategies" title="En/Mozilla Development Strategies"><span class="short_text" id="result_box" lang="pt"><span class="hps alt-edited">da Mozilla</span></span></a><a class="internal" href="/en/Mozilla_Development_Strategies" title="En/Mozilla Development Strategies"><span class="short_text" id="result_box" lang="pt"> </span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Dicas</span> <span class="hps">de como</span> <span class="hps alt-edited">tirar o máximo proveito</span> <span class="hps">do seu tempo trabalhando</span> <span class="hps">no projeto</span> <span class="hps alt-edited">da Mozilla</span><span>.</span></span></dd> + <dt> + <a class="internal" href="/En/Debugging" title="en/Debugging">Depuração</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Encontre dicas</span> <span class="hps">úteis</span> <span class="hps">e guias para</span> <span class="hps">a depuração do código</span> <span class="hps">do Mozilla.</span></span></dd> + <dt> + <a href="/en/Performance" title="en/Performance"><span id="result_box" lang="pt"><span class="hps">Desempenho</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Guias</span> <span class="hps">de desempenho</span> <span class="hps">e utilitários</span> <span class="hps">para ajudar você a</span> <span class="hps alt-edited">fazer o seu código ter</span> <span class="hps">um bom desempenho</span> <span class="hps">(e</span> <span class="hps alt-edited">trabalhar bem com</span> <span class="hps alt-edited">outros</span><span>).</span></span></dd> + <dt> + <a class="internal" href="/En/The_Mozilla_platform" title="En/The Mozilla platform"><span class="short_text" id="result_box" lang="pt"><span class="hps">A plataforma</span> <span class="hps">Mozilla</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Informações</span> <span class="hps">sobre o funcionamento</span> <span class="hps">da plataforma</span> <span class="hps">Mozilla.</span></span></dd> + <dt> + <a href="/En/Developer_Guide/Adding_APIs_to_the_navigator_object" title="en/Developer_Guide/Adding_APIs_to_the_navigator_object"><span class="short_text" id="result_box" lang="pt"><span class="hps">Adicionando</span> <span class="hps">as APIs</span> <span class="hps">para o objeto</span> <span class="hps">navigator</span></span></a></dt> + <dt> + {{ gecko_minversion_inline("9.0") }}</dt> + <dd> + Como argumentar o objeto {{ domxref("window.navigator") }} com APIs adicionais.</dd> + <dt> + <a href="/En/Developer_Guide/Interface_Compatibility" title="En/Developer Guide/Interface Compatibility"><span class="short_text" id="result_box" lang="pt"><span class="hps">Compatibilidade</span> <span class="hps">de Interface</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Diretrizes para</span> <span class="hps">modificar</span> <span class="hps">APIs</span> <span class="hps alt-edited">programáveis e</span> <span class="hps alt-edited">binárias no</span> <span class="hps">Mozilla</span><span>.</span></span></dd> + <dt> + <a href="/En/Developer_Guide/Customizing_Firefox" title="En/Developer Guide/Customizing Firefox"><span class="short_text" id="result_box" lang="pt"><span class="hps">Personalizando</span> <span class="hps">o Firefox</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Informações sobre como criar</span> <span class="hps">versões personalizadas do</span> <span class="hps">Firefox.</span></span></dd> + <dt> + <a href="/en/Developer_Guide/Virtual_ARM_Linux_environment" title="Virtual ARM Linux environment">Ambiente Virtual ARM Linux</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Como configurar</span> <span class="hps">um emulador</span> <span class="hps">ARM</span> <span class="hps">rodando Linux</span> <span class="hps">para testar</span> <span class="hps atn">ARM-</span><span>específico, mas não</span> <span class="hps">necessariamente</span> <span class="hps">código específico da plataforma</span><span>.</span> <span class="hps">Útil para desenvolvedores</span> <span class="hps">móveis.</span></span></dd> + </dl> + </td> + <td> + <h2 id="Ferramentas">Ferramentas</h2> + <dl> + <dt> + <a class="link-https" href="https://bugzilla.mozilla.org/" title="https://bugzilla.mozilla.org/">Bugzilla</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">O banco de dados</span> </span><a class="link-https" href="https://bugzilla.mozilla.org/" title="https://bugzilla.mozilla.org/">Bugzilla</a> é <span id="result_box" lang="pt"><span class="hps">usado</span> <span class="hps alt-edited">para rastrear problemas</span> <span class="hps alt-edited">nos</span> <span class="hps">projetos Mozilla.</span></span></dd> + <dt> + <a class="external" href="http://mxr.mozilla.org/" title="http://mxr.mozilla.org/">MXR</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Navegar e pesquisar</span> <span class="hps">o repositório de código</span> <span class="hps">fonte</span> <span class="hps">Mozilla</span> <span class="hps">na web.</span></span></dd> + <dt> + <a class="external" href="http://bonsai.mozilla.org/cvsqueryform.cgi" title="http://bonsai.mozilla.org/cvsqueryform.cgi">Bonsai</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">A ferramenta</span> </span><a class="internal" href="https://developer.mozilla.org/en/Bonsai" title="En/Bonsai">Bonsai</a><span id="result_box" lang="pt"> <span class="hps">permite que você</span> <span class="hps alt-edited">descubra quem</span> <span class="hps">mudou o</span> <span class="hps">arquivo no repositório</span><span>,</span> <span class="hps">e quando</span> <span class="hps">o fizeram.</span></span></dd> + <dt> + <a class="internal" href="/en/Mercurial" title="en/Mercurial">Mercurial</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">O</span> <span class="hps">sistema distribuído</span> <span class="hps">de controle de versão</span> <span class="hps">utilizado para</span> <span class="hps">gerenciar o código</span><span>-fonte do</span> <span class="hps">Mozilla</span><span>.</span></span></dd> + <dt> + <a class="external" href="http://tinderbox.mozilla.org/showbuilds.cgi" title="http://tinderbox.mozilla.org/showbuilds.cgi">Tinderbox</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">O</span><span class="hps"> </span></span><a class="internal" href="https://developer.mozilla.org/en/Tinderbox" title="En/Tinderbox">Tinderbox</a> <span id="result_box" lang="pt"><span class="hps">mostra o estado</span> <span class="hps atn">da árvore (</span><span>Se está ou não construída </span><span class="hps">com sucesso)</span><span>.</span> <span class="hps">Verifique isso antes</span> <span class="hps">e</span> <span class="hps">depois,</span> <span class="hps">para ter certeza de</span> <span class="hps">que você está trabalhando</span> <span class="hps">com uma</span> <span class="hps">árvore de trabalho</span><span>.</span></span></dd> + <dt> + <a class="internal" href="/en/Crash_reporting" title="en/Crash reporting">Monitoramento de falhas</a></dt> + <dd> + Informações sobre <a class="link-https" href="https://crash-reports.mozilla.com/reports" title="https://crash-reports.mozilla.com/reports">Socorro</a> e <a class="external" href="http://talkback-public.mozilla.org/search/start.jsp" title="http://talkback-public.mozilla.org/search/start.jsp">Talkback</a> relato falhas no sistema.</dd> + <dt> + <a class="external" href="http://graphs.mozilla.org/" title="http://graphs.mozilla.org/">Monitoramento de desempenho</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Veja</span> <span class="hps">informações de desempenho para</span> <span class="hps">projetos Mozilla.</span></span></dd> + <dt> + <a href="/en/Developer_Guide/Callgraph" title="en/Developing Mozilla/Callgraph">Callgraph</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Uma ferramenta para</span> <span class="hps">ajudar a realizar</span> <span class="hps">a análise estática</span> <span class="hps">do código</span> <span class="hps">Mozilla</span><span>, gerando</span> <span class="hps">callgraphs</span> <span class="hps">automaticamente.</span></span></dd> + <dt> + <a class="external" href="http://www.mozilla.org/community/developer-forums.html" title="http://www.mozilla.org/community/developer-forums.html">Fórums de desenvolvedor</a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">A</span> <span class="hps">lista de tópicos</span> <span class="hps">específicos</span> <span class="hps">de fóruns de discussão</span> <span class="hps">onde você pode falar</span> <span class="hps">sobre questões de desenvolvimento</span> <span class="hps">da Mozilla</span><span>.</span></span></dd> + <dt> + <a class="external" href="http://www.brianbondy.com/mozilla/cheatsheet/" title="http://www.brianbondy.com/mozilla/cheatsheet/"><span class="short_text" id="result_box" lang="pt"><span class="hps">Plataforma</span> <span class="hps">de Desenvolvimento</span> <span class="hps">Mozilla</span> <span class="hps">Cheat Sheet</span></span></a></dt> + <dd> + <span id="result_box" lang="pt"><span class="hps">Lista</span> <span class="hps">de </span></span><span id="result_box" lang="pt"><span class="hps">Brian</span> <span class="hps">Bondy</span> c<span class="hps">om </span><span class="hps">informações frequentemente</span> <span class="hps">referenciado para</span> <span class="hps">desenvolvedores da plataforma</span><span>.</span></span></dd> + </dl> + </td> + </tr> + </tbody> +</table> +<p>{{ languages( { "de": "de/Entwicklerhandbuch", "zh-cn": "Cn/Developer_Guide", "ja": "ja/Developer_Guide" } ) }}</p> diff --git a/files/pt-br/mozilla/developer_guide/mozilla_build_faq/index.html b/files/pt-br/mozilla/developer_guide/mozilla_build_faq/index.html new file mode 100644 index 0000000000..5083040403 --- /dev/null +++ b/files/pt-br/mozilla/developer_guide/mozilla_build_faq/index.html @@ -0,0 +1,185 @@ +--- +title: FAQ de Compilação da Mozilla +slug: Mozilla/Developer_guide/Mozilla_build_FAQ +translation_of: Mozilla/Developer_guide/Mozilla_build_FAQ +--- +<h2 id="Questões_Gerais">Questões Gerais</h2> + +<dl> + <dt id="platform"><span id="result_box" lang="pt"><span class="hps">Quais sistemas</span> <span class="hps">são suportados</span> <span class="hps">plataformas</span> <span class="alt-edited hps">de compilação</span> <span class="hps">Mozilla</span><span>?</span></span></dt> + <dd>Ver <a href="/en/Supported_build_configurations" title="en/Supported_build_configurations">Supported build configurations</a>.</dd> +</dl> + +<h2 id="Localizando_erros"><span class="short_text" id="result_box" lang="pt"><span class="hps">Localizando</span> <span class="hps">erros</span></span></h2> + +<dl> + <dt><span id="result_box" lang="pt"><span class="alt-edited hps">A Compilação</span> <span class="hps">falhou</span> <span class="hps">sem qualquer</span> <span class="hps">mensagem de erro,</span> <span class="hps">como eu posso</span> <span class="hps">encontrar o problema</span><span>?</span></span></dt> + <dd><span id="result_box" lang="pt"><span class="hps">No seu diretório</span> <span class="hps">obj</span><span>, vá para o</span> <span class="hps">diretório no qual</span> <span class="alt-edited hps">de compilação</span> <span class="hps">falhou</span> <span class="alt-edited hps">e o tipo</span></span> <code>make</code> (ou <code>gmake</code> se necessario). <span id="result_box" lang="pt"><span class="hps">Isso vai</span> <span class="hps">relançar a</span> <span class="alt-edited hps">compilação para</span> <span class="hps">este pedaço</span> <span class="alt-edited hps">de código específico</span><span>, exibindo</span> <span class="hps">mensagens de erro</span> <span class="hps">mais</span> <span class="hps">detalhadas.</span></span></dd> +</dl> + +<h2 id="Questões_específicas_do_Win32"><span class="short_text" id="result_box" lang="pt"><span class="hps">Questões específicas do</span> <span class="hps">Win32</span></span></h2> + +<div class="note"><strong>Nota:</strong> Veja <strong><a href="/En/Developer_Guide/Build_Instructions/Windows_Prerequisites" title="en/Windows_Build_Prerequisites">Windows Build Prerequisites</a> </strong><span class="short_text" id="result_box" lang="pt"><span class="hps">para obter informações adicionais</span><span>.</span></span></div> + +<dl> + <dt>configure: error: installation or configuration problem: C compiler cannot create executables.</dt> + <dd>Look at the <code>config.log</code> in the obj... directory. Try checking to make sure your PATH variable includes all the necessary directories. If you are using mozilla-build, then you need to start ming32 with one of the <code>start-msvc*.bat</code> files. If your build environment has changed, you may need to delete your config.cache file (in your mozilla or object directory) and then build again.</dd> + <dt>xpt_link.exe: cannot find msvcr80d.dll.</dt> + <dd>This occurs with option <code>--enable-optimize=-Od</code> to disable any optimizations. The xpt_link.exe tool is also created using this <code>-Od</code> option. To fix this, copy <code>obj-dir/xpcom/typelib/xpt/tools/xpt_link.exe.manifest</code> to <code>obj-dir/dist/bin</code>. There is another manifest file there, for xpt_dump.exe. Copy that as well. This error will probably appear for any compiled tool that is used during the build process when <code>-Od</code> is specified. To copy all manifest files to the <code>dist/bin</code> directory, issue: <code>find ./ -iname *.exe.manifest -print0 | xargs -0 -t -i cp {} dist/bin</code> from the <code>obj-dir</code></dd> + <dt>client.mk:121 *** This source tree appears to have Windows-style line endings.</dt> + <dd>This occurs when you are using git and do not have the proper line ending settings. The commands to set the proper line endings are: + <pre class="bz_comment_text" id="comment_text_12"><span class="quote">git config core.autocrlf false +git config core.eof lf +git ls-files -z | xargs -0 rm +git checkout .</span> +</pre> + </dd> +</dl> + +<h2 id="Mingw32-specific_questions">Mingw32-specific questions</h2> + +<ul> + <li>If the configure or build fails due to a missing w32api, add the mingw32's /include directory to the end of your INCLUDE environment variable. Mingw32 libraries or binaries should not be needed, only the headers.</li> +</ul> + +<h2 id="Unix-specific_questions">Unix-specific questions</h2> + +<dl> + <dt>How do I build on Solaris 10 x86?</dt> + <dd>See <a href="/En/Developer_Guide/Build_Instructions/Solaris_Prerequisites" title="en/Solaris_Build_Prerequisites">Solaris Build Prerequisites</a>.</dd> +</dl> + +<h2 id="Mac-specific_questions">Mac-specific questions</h2> + +<dl> + <dt> </dt> + <dt>It doesn't work</dt> + <dd>That's not a question :) For common Mac build errors and additional troubleshooting tips, see <a href="/En/Developer_Guide/Build_Instructions/Mac_OS_X_Prerequisites#Troubleshooting" title="en/Mac_OS_X_Build_Prerequisites#Troubleshooting">Troubleshooting</a> in <a href="/En/Developer_Guide/Build_Instructions/Mac_OS_X_Prerequisites" title="en/Mac_OS_X_Build_Prerequisites">Mac OS X Build Prerequisites</a>. In particular, <code>bootstrap.py</code> can diagnose and suggest fixes for most common errors (wrong Xcode version, missing build dependencies).</dd> +</dl> + +<pre class="bz_comment_text" id="comment_text_12">curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py > bootstrap.py && python bootstrap.py</pre> + +<dl> + <dt> </dt> + <dt>Can I build a Mozilla application as a Universal Binary?</dt> + <dd>Yes. See <a href="/en/Mac_OS_X_Universal_Binaries" title="en/Mac_OS_X_Universal_Binaries">Mac OS X Universal Binaries</a> for instructions.</dd> +</dl> + +<h2 id="Fazer_Compilar_mais_rápido"><span class="short_text" id="result_box" lang="pt"><span class="alt-edited hps">Fazer</span> <span class="alt-edited hps">Compilar</span> <span class="hps">mais rápido</span></span></h2> + +<p><a name="rebuild_from_objdir"> </a></p> + +<ul> + <li><a name="rebuild_from_objdir"><span id="result_box" lang="pt"><span class="hps">Em geral</span><span>, a mudança</span> <span class="hps">em sua</span> <span class="hps">objdir</span><span>, mude</span><span>-se</span> <span class="hps">para o diretório específico</span> <span class="hps">onde pretende</span> <span class="alt-edited hps">de compilação</span> <span class="atn hps">(</span><span>a estrutura de diretórios</span> <span class="hps">do</span> <span class="hps">objdir</span> <span class="hps">corresponde à estrutura</span> <span class="hps">dos</span> <span class="hps">diretórios</span> <span class="hps">de origem</span><span>)</span><span>,</span> <span class="alt-edited hps">e o tipo</span> <span class="hps">apenas </span></span>"make" (or "gmake" if necessary). This only works if you find a directory that contains a "Makefile" (the equivalent directory in the source tree will contain a "Makefile.in"). If you want to get even more specific than that, you can try "make <filename>.obj".</a></li> + <li><a name="rebuild_from_objdir">If you have changed code of Gecko, e.g. in content/, dom/ or layout/, you also need to build <code>make -C layout/build/</code></a></li> + <li><a name="rebuild_from_objdir">With libxul (all code in one library, which is the default for opt builds now), you need to also build <code>make -C toolkit/library/</code></a></li> + <li><a name="rebuild_from_objdir">On Mac, you will also have to build<code> make -C browser/app</code></a></li> +</ul> + +<p><a name="rebuild_from_objdir"> </a></p> + +<p>Simply set the integer value after -j to the max number of parellel processes to use. For optimal builds, this should be around the number of processor cores in your system.</p> + +<dl> + <dd><a name="rebuild_from_objdir">See also </a><a href="/en/Incremental_Build" title="en/Incremental_Build">Incremental Build</a>.</dd> + <dt> </dt> + <dt>Windows builds using make are slow, is there any way to speed them up?</dt> + <dd> + <p>Yes! You should be using <a href="/en/pymake" title="en/pymake">PyMake</a> instead. PyMake recurses in a single process reducing the number of shell invocations, which are <a class="external" href="http://benjamin.smedbergs.us/blog/2009-04-02/pymake-25-faster-than-msys-make/" title="http://benjamin.smedbergs.us/blog/2009-04-02/pymake-25-faster-than-msys-make/">particularly expensive on Windows</a>. PyMake also allows for parallel builds on Windows without deadlocks.</p> + </dd> + <dt>Do parallel (make -j) builds work for Mozilla?</dt> + <dd> + <p>Yes. See the <a class="external" href="http://www.gnu.org/software/make/manual/html_node/Parallel.html">GNU Make Parallel Execution</a> manual entry for optimal usage.</p> + On Windows you must use PyMake if doing parallel builds (see above - keep in mind this is done automatically if building with <code>mach</code>). + + <p>As of December 2012, running builds through <code>mach </code>or<code> client.mk</code> will result in the optimal values being passed to make automatically. If you would like to change the default values, add something like the following to your mozconfig file:</p> + + <pre>mk_add_options MOZ_MAKE_FLAGS=-j8 +</pre> + </dd> + <dt>I have less than 4GB RAM, is there any way I can speed up linking?</dt> + <dd> + <p>Yes, disabling debugging symbols can speed up linking considerably. Add the following to your .mozconfig:</p> + + <pre>ac_add_options --disable-debug-symbols +</pre> + </dd> + <dt>How can I turn on distcc to help compilation?</dt> + <dd> + <p>In your .mozconfig file, add:</p> + + <pre>mk_add_options MOZ_MAKE_FLAGS="CC='distcc gcc' CXX='distcc g++' -jN" +</pre> + + <p>See the notes for parallel builds.</p> + </dd> + <dt>Can I use ccache to speed up builds?</dt> + <dd> + <p>Yes. See the <a href="/en/ccache" title="en/ccache">ccache</a> page for more details. Use of ccache is highly encouraged to speed up builds.</p> + </dd> + <dt>Where else can I save cycles?</dt> + <dd>Redirecting stdout, rather than dumping it into a terminal, can save between 30 seconds and 5 minutes on a build. Displaying lots of text is slow!</dd> +</dl> + +<h2 id="Build_configurations">Build configurations</h2> + +<dl> + <dt>Can I build multiple Mozilla-based projects from a single source tree?</dt> + <dd>Yes! Each project must be built in its own objdir.</dd> + <dt>What is a .mozconfig file?</dt> + <dd>It tells which Mozilla application to build and contains configuration options. See <a href="/en/Configuring_Build_Options#Using_a_.mozconfig_Configuration_File" title="https://developer.mozilla.org/en/configuring_build_options#Using_a_.mozconfig_Configuration_File">Using a .mozconfig configuration file</a>.</dd> + <dt>What is an objdir?</dt> + <dd> + <p>An objdir build refers to the process of creating the output files in a different place than where the source lives. This is a standard feature of most configure-based projects. It allows you to build for multiple configurations, including multiple platforms if you use a network filesystem, from a single source tree. It also avoids tainting your source tree so that you know that the files in your tree have not been modified by the build process.</p> + + <p>If you run configure by hand, you can use the standard method of creating an empty directory any place on the disk, changing to that directory and running /path/to/mozilla/configure from there.</p> + + <pre class="eval">mkdir obj-debug +cd obj-debug +../mozilla/configure +</pre> + + <p>If you use client.mk to build, you can add the following to your mozconfig file:</p> + + <pre class="eval">mk_add_options MOZ_OBJDIR=/path/to/objdir +</pre> + </dd> + <dt>Can I cross-compile Mozilla?</dt> + <dd>Yes, see the <a class="external" href="http://www.mozilla.org/build/cross-compiling.html">Cross-Compiling Mozilla</a> document for details.</dd> + <dt>How do I force the build system to pick up any of the changes made to my mozconfig file?</dt> + <dd>Touch any of the configure scripts in the tree. There is no explicit dependency upon the mozconfig file as the file can reside anywhere via the MOZCONFIG environment variable.</dd> + <dt> </dt> +</dl> + +<h2 id="Implementation_questions">Implementation questions</h2> + +<dl> + <dt>What type of build system does Mozilla use?</dt> + <dd>Mozilla uses a thin GNU configure layer on top of a recursive makefile build system on all platforms. Like most configure-based projects, it uses GNU autoconf to generate the configure script. GNU make is used to drive the build process.</dd> + <dt>Why use GNU make?</dt> + <dd>GNU make has been ported to a lot of systems. This makes porting Mozilla to those systems a bit easier. Using only the subset of make features that are supported by the native make program on 10 different platforms would make the build system unnecessarily complicated.</dd> + <dt>Will any other version of make work?</dt> + <dd>No. The Mozilla makefiles use GNU make specific features which will only work with gnu make.</dd> + <dt>Why aren't you using automake?</dt> + <dd>Part of Netscape's legacy system involved using GNU make's -include feature to include a common set of rules from a handful of files in every Makefile that needed to use them. With this centralized rule system, one of the primary selling points of automake was made inconsequential. Also, at the time, Mozilla's method of building libraries did not mesh well with libtool.</dd> + <dt>What happened to the nmake and CodeWarrior build systems?</dt> + <dd>They no longer exist in the current tree. nmake build support was dropped during the Mozilla 1.2a release cycle. The Mac CFM build system was dropped along with OS 9 support shortly after the Mozilla 1.3 release.</dd> + <dt>Why not ant, tmake, scons or <em>insert your favorite build system here</em>?</dt> + <dd>Mainly, because no one has implemented these systems for Mozilla. When Mozilla was first open sourced, it only contained the legacy Netscape system. The autoconf layer was added on a branch and maintained in parallel for 6 months before it became the standard build system for the unix build. Several experimental ports to various systems have failed because of the size of the project. Because building Mozilla involves much more than just compiling, any port requires system investment in creating custom rules.</dd> + <dt>If I wanted to implement my favorite build system for Mozilla, would Mozilla start using it? I don't want to waste my time if you aren't going to use it.</dt> + <dd>There's no guarantee that any code written for Mozilla will be accepted into the default tree. Any build system that is implemented would have to show that it's better overall than the current build system. Speed, flexibility, portability and the ability for a large group of developers who have 3+ years experience with the current build system to easily transition to the new system would be the major factors in deciding to switch. If you are serious and willing to do lots of work, contact <a href="/User:Benjamin_Smedberg" title="User:Benjamin_Smedberg">User:Benjamin Smedberg</a> to discuss the details of your proposal.</dd> + <dt>Why doesn't Mozilla support autoconf 2.5x?</dt> + <dd> + <p>Simply put, autoconf 2.5x does not offer anything to make the upgrade worth the effort. Autoconf 2.5x is not backwards compatible with autoconf 2.13 and the additional restrictions made by the newer versions of autoconf would require a major rewrite of the Mozilla build system for questionable gain.</p> + + <p>Some of the 2.13 features, such as the ability to pass additional arguments to sub-configures, are not available in 2.5x. People have asked repeated about those features on the autoconf mailing list without any favorable response. Rewriting the configures of the sub-projects of Mozilla (NSPR & LDAP) is not an acceptable tradeoff. The sub-projects are also standalone projects and forking an entire codebase because of a build system incompatiblity is silly.</p> + </dd> + <dt>Why doesn't NSS use autoconf?</dt> + <dd>The NSS project is also used outside of the Mozilla project and the NSS project members did not feel that moving to autoconf was worth the cost. See <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=52990" title="https://bugzilla.mozilla.org/show_bug.cgi?id=52990">bug 52990</a> for details.</dd> +</dl> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="/en/Debugging_Mozilla_on_Windows_FAQ" title="en/Debugging_Mozilla_on_Windows_FAQ">Debugging Mozilla on Windows FAQ</a>: Tips on how to debug Mozilla on Windows</li> +</ul> diff --git a/files/pt-br/mozilla/firefox/building_firefox_with_rust_code/index.html b/files/pt-br/mozilla/firefox/building_firefox_with_rust_code/index.html new file mode 100644 index 0000000000..7f50b8a9c2 --- /dev/null +++ b/files/pt-br/mozilla/firefox/building_firefox_with_rust_code/index.html @@ -0,0 +1,34 @@ +--- +title: Building Firefox with Rust code +slug: Mozilla/Firefox/Building_Firefox_with_Rust_code +translation_of: Archive/Mozilla/Firefox/Building_Firefox_with_Rust_code +--- +<div>{{FirefoxSidebar}}</div><p>Em maio de 2015, foi lançada a primeira versão 1.0 estável da <a href="http://www.rust-lang.org/">linguagem de programação Rust</a>, e vários experimentos para escrever partes do Gecko em Rust iniciaram. Esta página é um simples guia para pessoas trabalhando nesta área.</p> + +<h2 id="Adicionando_código_Rust">Adicionando código Rust</h2> + +<p>O suporte básico para buildar códigos em Rust foi lançado no <a class="bz_bug_link + bz_status_RESOLVED bz_closed" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1161339" title="RESOLVED FIXED - Support rust files in moz.build SOURCES">bug 1161339</a>. Se você possui <em>rustc</em> no seu path, você pode adicionar arquivos .rs ao SOURCES em moz.build. Então adicione</p> + +<pre>ac_add_options --enable-rust</pre> + +<p>ao seu <a href="/en-US/docs/Configuring_Build_Options">mozconfig</a> e provavelmente funcionará.</p> + +<p>A biblioteca padrão do Rust utiliza armazenamento thread-local, que não é suportado no MacOS X 2.6, então se você está buildando em um Mac, você também precisará disso:</p> + +<pre>ac_add_options --enable-macos-target=10.7</pre> + +<p>Alternativamente, você pode compilar com um conjunto de ferramentas costumizadas com -<code>-disable-elf-tls</code>. Veja <a class="bz_bug_link + bz_status_NEW " href="https://bugzilla.mozilla.org/show_bug.cgi?id=1164109" title="NEW - rust code fails to link on macosx because of thread-local storage">bug 1164109</a> para detalhes.</p> + +<p>Graças as limitações do <em>cargo</em> e do sistema de build do Firefox, atualmente nós buildamos uma biblioteca estática stand-alone para cada arquivo rust listado em SOURCES. Você precisa portanto listar apenas os arquivos rust de alto nível. Tudo precisa ser um único <em>crate</em>, como uma compilação manual unificada. O compilador rust irá pesquisar por módulos interiores pelo nome do arquivo-fonte, mas referências <em>crate</em> externas não serão resolvidas.</p> + +<p>Veja o <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1135640">bug 1135640</a> ('oxidation') para monitoramento global.</p> + +<h2 id="Testando_código_Rust">Testando código Rust</h2> + +<p>There's a simple linkage teste unitários in the tree. Você pode utilizá-lo para verificar se Rust está habilitado e funcionando com your build setup.</p> + +<pre>./mach gtest rust.*</pre> + +<p>Look for the <strong>rust.CallFromCpp</strong> test to pass, along with any others.</p> diff --git a/files/pt-br/mozilla/firefox/developer_edition/index.html b/files/pt-br/mozilla/firefox/developer_edition/index.html new file mode 100644 index 0000000000..5ae8204f4c --- /dev/null +++ b/files/pt-br/mozilla/firefox/developer_edition/index.html @@ -0,0 +1,57 @@ +--- +title: Edição do Programador +slug: Mozilla/Firefox/Developer_Edition +tags: + - Firefox + - Iniciante + - Landing +translation_of: Mozilla/Firefox/Developer_Edition +--- +<div>{{FirefoxSidebar}}</div> + +<p style="text-align: center;"><img alt="" src="https://mdn.mozillademos.org/files/9143/firefox-dev-ed_logo-only_1024.png" style="display: block; height: 256px; margin-left: auto; margin-right: auto; width: 256px;">Uma versão do Firefox sob medida para desenvolvedores web.</p> + +<p><a href="https://www.mozilla.org/pt-BR/firefox/developer/" style="width: 250px; display: block; margin-left: auto; margin-right: auto; padding: 10px; text-align: center; border-radius: 4px; background-color: #81BC2E; white-space: nowrap; color: white; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.2), 0px -1px 0px 0px rgba(0, 0, 0, 0.3) inset;">Download Firefox Developer Edition</a></p> + +<hr> +<div class="column-container"> +<div class="column-half"> +<h3 id="Os_recursos_mais_recentes_do_Firefox"><strong>Os recursos mais recentes do Firefox</strong></h3> + +<p>O Firefox Developer Edition substitui o canal Aurora no <a href="https://wiki.mozilla.org/Release_Management/Release_Process">Processo de lançamento do Firefox</a>. Como no Aurora, os recursos vão para o Developer Edition a cada seis semanas, depois de serem estabilizados no Nightly builds.</p> + +<p>Ao usar o Developer Edition, você ganha acesso a ferramentas e recursos da plataforma pelo menos 12 semanas antes de chegar ao principal canal de lançamento do Firefox.</p> + +<p><a href="/en-US/Firefox/Releases/69">Descubra o que há de novo na Edição do Programador.</a></p> +</div> + +<div class="column-half"> +<h3 id="Um_tema_distinto"><strong>Um tema distinto</strong></h3> + +<p>Incluindo acesso mais rápido às ferramentas de desenvolvimento.</p> + +<h3 id="Ferramentas_de_desenvolvimento_experimentais"><strong>Ferramentas de desenvolvimento experimentais</strong></h3> + +<p><span id="result_box" lang="pt"><span>Vamos</span> <span>incluir ferramentas</span> <span>experimentais</span> <span>que ainda não</span> <span class="alt-edited">estão prontas para liberação</span><span>.</span></span></p> + +<p>Por exemplo, o Developer Edition inclui o <a href="/en-US/docs/Tools/Valence">Valence add-on</a>, <span class="short_text" id="result_box" lang="pt"><span>que permite que você</span> <span>conecte o</span></span> <a href="/en-US/docs/Tools">Firefox developer tools</a> a<span id="result_box" lang="pt"> <span>outros navegadores como o</span> <span>Chrome</span> <span>no Android e</span> o <span>Safari</span> <span>no iOS</span></span>.</p> +</div> +</div> + +<div class="column-container"> +<div class="column-half"> +<h3 id="Um_perfil_separado"><strong>Um perfil separado</strong></h3> + +<p>Firefox Developer Edition utiliza um perfil separado de outras versões do Firefox instalado em sua máquina. Isto significa que você pode facilmente executar o Developer Edition ao lado de seu lançamento ou versão beta do Firefox.</p> + +<div class="note"> +<p><strong>Note:</strong> <span id="result_box" lang="pt"><span>Isto significa que a</span> <span>primeira vez que você</span> <span>iniciar o</span> <span>Developer Edition</span><span>, você verá</span> <span>um navegador</span> <span>completamente</span> <span class="alt-edited">não personalizado</span><span>,</span> <span>sem complementos</span><span>, bookmarks</span> <span>ou histórico</span></span>. Você pode <a href="https://support.mozilla.org/en-US/kb/how-do-i-set-up-firefox-sync">usar Firefox Sync</a> <span id="result_box" lang="pt"><span>se você quer</span> <span>unificar</span> <span>suas</span> <span>configurações entre o</span> <span>Developer Edition</span> <span>e</span> <span>outras edições do</span> <span>Firefox</span></span>.</p> +</div> +</div> + +<div class="column-half"> +<h3 id="Set_up_para_desenvolvedores_web"><strong>Set up para desenvolvedores web</strong></h3> + +<p>Nós definimos valores de preferência padrões adaptados para desenvolvedores web. Por exemplo, {{glossary("Chrome")}} e depuração remota são ativadas por padrão.</p> +</div> +</div> diff --git a/files/pt-br/mozilla/firefox/developer_edition/revertendo/index.html b/files/pt-br/mozilla/firefox/developer_edition/revertendo/index.html new file mode 100644 index 0000000000..de8ce406d8 --- /dev/null +++ b/files/pt-br/mozilla/firefox/developer_edition/revertendo/index.html @@ -0,0 +1,25 @@ +--- +title: Revertendo +slug: Mozilla/Firefox/Developer_Edition/Revertendo +translation_of: Mozilla/Firefox/Developer_Edition/Reverting +--- +<div>{{FirefoxSidebar}}</div><h2 id="Revertendo_tema_no_Developer_Edition">Revertendo tema no Developer Edition</h2> + +<p><br> + Se você quiser usar o Developer Edition, mas prefere usar o tema 'Australis' usado no Firefox e Firefox Beta, você poderá alternar para o tema normal do Firefox: basta abrir o painel "Personalizar", clicar em "Temas", e selecionar o tema rotulado como "Padrão":</p> + +<p>{{EmbedYouTube("oiHt8T1Liyk")}}</p> + +<p>Alternativamente, digite "about:addons" na barra de localização, selecione "Aparência", e alterne os temas.</p> + +<h2 id="Revertendo_para_Firefox_Aurora">Revertendo para Firefox Aurora</h2> + +<p><br> + Se você quiser todos os recursos pré-Beta do Firefox Developer Edition, mas não quer nenhuma outra alteração, você pode reverter para algo como o antigo Firefox Aurora. Isso também irá restaurar seu perfil de pré-atualização e os dados da sessão. Este é um processo de 2 etapas, e você precisa seguir os passos nesta ordem:</p> + +<ol> + <li>Abra a página de Preferências do Developer Edition, e desmarque a opção "Permitir que o Firefox Developer Edition e Firefox execute ao mesmo tempo". Será solicitado a reinicialização do navegador.</li> + <li>Depois de reinicializar, você poderá reverter o tema do developer edition como descrito em "Revertendo tema no Developer Edition" acima.</li> +</ol> + +<p>{{EmbedYouTube("8rEJn_hATE8")}}</p> diff --git a/files/pt-br/mozilla/firefox/index.html b/files/pt-br/mozilla/firefox/index.html new file mode 100644 index 0000000000..cd73f43538 --- /dev/null +++ b/files/pt-br/mozilla/firefox/index.html @@ -0,0 +1,72 @@ +--- +title: Firefox +slug: Mozilla/Firefox +tags: + - Firefox + - Mozilla +translation_of: Mozilla/Firefox +--- +<div>{{FirefoxSidebar}}</div> + +<p>O <a class="external external-icon" href="https://www.mozilla.org/pt-br/docs/firefox/new/">Firefox</a> é um popular navegador de internet da Mozilla, disponível para várias plataformas como Windows, Mac OS X e Linux no desktop, bem como Android e iOS nos dispositivos móveis. Sendo altamente compatível com as últimas tecnologias web e poderosas <a href="/pt-BR/docs/Tools">ferramentas de desenvolvimento</a>, o Firefox é um excelente navegador tanto para usuários comuns quanto desenvolvedores web.</p> + +<p>Firefox é um projeto de código aberto; muito do seu código vem de contribuições de uma gigantesca comunidade de voluntários. Aqui você irá aprender sobre como contribuir com o projeto Firefox, além de encontrar links para documentação sobre construção de add-ons do Firefox, uso de ferramentas do Firefox para desenvolvedores, entre outros.</p> + +<div class="summary"> +<p>Aprenda a criar complementos para <a href="https://www.mozilla.org/pt-br/docs/firefox/">Firefox</a>, como desenvolver e compilar o Firefox, como funciona internamente o Firefox e subprojetos.</p> +</div> + +<ul class="card-grid"> + <li><span>Notas de lançamento para o desenvolvedor</span> + + <p><a href="/pt-BR/docs/Firefox/Releases">Notas de versão focada em desenvolvedores</a>; aprenda quais são os novos recursos para ambos Web sites e add-on que chegam a cada versão do Firefox.</p> + </li> + <li><span>Documentação do projeto</span> + <p>Encontre informações detalhadas sobre <a href="/pt-BR/docs/Mozilla">o funcionamento do Firefox</a> e o seu sistema de versões, assim você poderá encontrar o seu caminho no código.</p> + </li> + <li><span>Guia do desenvolvedor</span> + <p>Nosso <a href="/pt-BR/docs/Developer_Guide">guia para desenvolvedores</a> provê tutoriais detalhados de como obter e compilar o código fonte do Firefox, como se encontrar, e como contribuir para o projeto.</p> + </li> +</ul> + +<h2 id="Canais_Firefox">Canais Firefox</h2> + +<p>O Firefox está disponível em cinco <strong>canais</strong>.</p> + +<h3 id="Firefox_Nightly">Firefox Nightly</h3> + +<p>A cada noite nós geramos uma <em>build</em> do Firefox com o código mais recente no <a href="/en-US/docs/mozilla-central">mozilla-central</a>. Estas <em>builds</em> são destinadas aos desenvolvedores do Firefox ou aqueles que procuram testar as mais recentes funcionalidades que ainda estão com desenvolvimento ativo.</p> + +<p><a class="external external-icon" href="https://nightly.mozilla.org/" style="width: 250px; display: block; margin-left: auto; margin-right: auto; padding: 10px; text-align: center; border-radius: 4px; background-color: #81BC2E; white-space: nowrap; color: white; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.2), 0px -1px 0px 0px rgba(0, 0, 0, 0.3) inset;">Baixar o Firefox Nightly</a></p> + +<h3 id="Firefox_Developer_Edition">Firefox Developer Edition</h3> + +<p>Esta é uma versão do Firefox feita para desenvolvedores. A cada seis semanas, nós pegamos as funcionalidades que estão no Firefox Nightly e são estáveis o suficiente e criamos uma nova versão do Firefox Developer Edition. Nós também adicionamos alguns recursos extras que estão disponíveis apenas neste canal.</p> + +<p><a href="/en-US/Firefox/Developer_Edition">Saiba mais sobre o Firefox Developer Edition</a>.</p> + +<p><a class="external external-icon" href="https://www.mozilla.org/firefox/developer/" style="width: 250px; display: block; margin-left: auto; margin-right: auto; padding: 10px; text-align: center; border-radius: 4px; background-color: #81BC2E; white-space: nowrap; color: white; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.2), 0px -1px 0px 0px rgba(0, 0, 0, 0.3) inset;">Baixar o Firefox Developer Edition</a></p> + +<h3 id="Firefox_Beta">Firefox Beta</h3> + +<p>Depois de seis semanas no Firefox Developer Edition, nós pegamos as funcionalidades que estão estáveis o bastante, e criamos uma nova versão do Firefox Beta. As versões do Firefox Beta são para testadores entusiastas e está destinada a se tornar a proxima versão do Firefox.</p> + +<p><a class="external external-icon" href="https://www.mozilla.org/firefox/channel/#beta" style="width: 250px; display: block; margin-left: auto; margin-right: auto; padding: 10px; text-align: center; border-radius: 4px; background-color: #81BC2E; white-space: nowrap; color: white; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.2), 0px -1px 0px 0px rgba(0, 0, 0, 0.3) inset;">Baixar o Firefox Beta</a></p> + +<h3 id="Firefox">Firefox</h3> + +<p>Após estabilizar por outras seis semanas no Beta, nós estamos prontos para entregar as novas funcionalidades para centenas de milhões de usuários em uma nova versão do Firefox.</p> + +<p><a class="external external-icon" href="https://www.mozilla.org/firefox/channel/#firefox" style="width: 250px; display: block; margin-left: auto; margin-right: auto; padding: 10px; text-align: center; border-radius: 4px; background-color: #81BC2E; white-space: nowrap; color: white; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.2), 0px -1px 0px 0px rgba(0, 0, 0, 0.3) inset;">Baixar o Firefox</a></p> + +<h3 id="Firefox_Extended_Support_Release_ESR">Firefox Extended Support Release (ESR)</h3> + +<p>Firefox ESR é uma edição de suporte de longo prazo do Firefox para desktop. Feito para ser usado em organizações como escolas, universidades, empresas e outras que necessitam de suporte extendido para distribuições em massa.</p> + +<p><a href="https://developer.mozilla.org/en-US/Firefox/Firefox_ESR">Saiba mais sobre o Firefox Extended Support Release.</a></p> + +<p><a class="external external-icon" href="https://www.mozilla.org/firefox/organizations/all/" style="width: 250px; display: block; margin-left: auto; margin-right: auto; padding: 10px; text-align: center; border-radius: 4px; background-color: #81BC2E; white-space: nowrap; color: white; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.2), 0px -1px 0px 0px rgba(0, 0, 0, 0.3) inset;">Baixar o Firefox ESR</a></p> + +<h2 id="Perfis_Firefox">Perfis Firefox</h2> + +<p>Se você está usando múltiplos canais Firefox—ou apenas múltiplas configurações—em uma base regular, você deve ler sobre <a href="/pt-br/docs/Mozilla/Firefox/Multiple_profiles">como usar múltiplos perfis Firefox</a> com o Firefox Profile Manager e outras ferramentas para gerenciamento de perfis de sua preferência.</p> diff --git a/files/pt-br/mozilla/firefox/multiple_profiles/index.html b/files/pt-br/mozilla/firefox/multiple_profiles/index.html new file mode 100644 index 0000000000..54bdf6b45a --- /dev/null +++ b/files/pt-br/mozilla/firefox/multiple_profiles/index.html @@ -0,0 +1,244 @@ +--- +title: Vários perfis no Firefox +slug: Mozilla/Firefox/Multiple_profiles +tags: + - Firefox + - Guía + - Iniciante + - Intro + - Perfis + - QA +translation_of: Mozilla/Firefox/Multiple_profiles +--- +<div>{{FirefoxSidebar}}</div> + +<p class="summary">Um perfil no Firefox é a coleção de configurações, personalizações, complementos e outras personalizações que um usuário fez ou instalou em sua cópia do Firefox. Você pode encontrar <a href="https://support.mozilla.org/kb/Profiles">detalhes sobre perfis</a> no site de suporte ao usuário final da Mozilla.</p> + +<h2 id="Motivos_para_ter_vários_perfis">Motivos para ter vários perfis</h2> + +<p>O usuário casual pode querer ter perfis diferentes para trabalho e uso pessoal ou para membros da família diferentes. Ter perfis diferentes ajudaria a separar a vida profissional e pessoal ou permitir que cada membro da família tenha seu próprio conjunto de favoritos, configurações e complementos.</p> + +<p>Os desenvolvedores web podem querer um perfil secundário para testar sites, aplicativos ou outros projetos em diferentes canais do Firefox. Por exemplo, você pode querer ter algumas extensões instaladas para desenvolvimento Web, mas não para navegação na Web de propósito geral. Ao usar o canal Nightly, você pode encontrar alguns complementos que se tornaram temporariamente incompatíveis com novas alterações da API, até que o desenvolvedor do complemento tenha a chance de atualizá-los. Você pode remover esses complementos do seu perfil para uso noturno, mantendo-os para uso com outros perfis.</p> + +<p>Para colaboradores de QA, teste e triagem de bugs, você pode querer ter várias versões de desenvolvimento do Firefox instaladas, cada uma com seu próprio perfil. Criar novos perfis para testes pode impedir que você perca suas preferências, favoritos e histórico. Demora pouco tempo para configurar um novo perfil e, uma vez concluído, todas as suas versões do Firefox serão atualizadas separadamente e poderão ser executadas simultaneamente.</p> + +<h2 id="Canais_disponíveis_de_desenvolvimento_do_navegador">Canais disponíveis de desenvolvimento do navegador</h2> + +<p>Há quatro canais do navegador disponíveis, cada um em um nível diferente de estabilidade e desenvolvimento. Os quatro canais são <a href="https://www.mozilla.org/firefox/new//en-US/docs/">Release</a>, <a href="https://www.mozilla.org/firefox/beta//en-US/docs/">Beta</a>, <a href="https://www.mozilla.org/firefox/aurora/">Developer Edition</a> e <a href="https://nightly.mozilla.org/">Nightly</a>. O canal Release é recomendado para a maioria dos usuários, já que é o canal de "lançamento oficial". No entanto, para os mais aventureiros, você pode experimentar um dos outros três canais para ver o que está por vir no Firefox e brincar com recursos emergentes. O canal Beta contém os recursos que devem estar na próxima versão do Firefox e estão em fase final de testes. Aurora contém recursos experimentais, que ainda não são de qualidade beta. Nightly contém o código mais recente dos desenvolvedores do Firefox e é o canal menos estável.</p> + +<h2 id="Ferramentas_de_terceiros">Ferramentas de terceiros</h2> + +<p>Além do Gerenciador de Perfis integrado e do Gerenciador de Perfis externo, existem algumas ferramentas de terceiros que facilitam o trabalho com vários perfis.</p> + +<div class="note"> +<p>Essa lista não é exaustiva. Por favor, adicione a esta lista quaisquer ferramentas úteis que você descobrir!</p> +</div> + +<h3 id="Mac_OS_X">Mac OS X</h3> + +<ul> + <li><a href="http://davemartorana.com/multifirefox/">Multifirefox</a> por Dave Martorana</li> +</ul> + +<h2 id="Gerenciamento_de_perfis">Gerenciamento de perfis</h2> + +<h3 id="Determinando_o_perfil_enquanto_o_Firefox_está_em_execução">Determinando o perfil enquanto o Firefox está em execução</h3> + +<p>Para determinar o perfil de uma instância do Firefox em execução no Windows, macOS ou Linux,</p> + +<ol> + <li>Digite about:profiles ma barra de pesquisa de URL do navegador.</li> + <li>A página apresenta uma lista de todos os seus perfis, cada um começando com "Perfil: " seguido por seu nome.</li> + <li>O que está sendo usado por esta instância do Firefox incluirá o texto em negrito "<strong>Este é o perfil em uso</strong>". Por exemplo, se você encontrar este texto sob a entrada de "Perfil: Suzie", então você está usando um perfile chamado <em>Suzie</em>.</li> +</ol> + +<h3 id="Iniciando_o_Firefox_no_perfil_desejado">Iniciando o Firefox no perfil desejado</h3> + +<p id="You_cannot_change_the_profile_while_Firefox_is_running._Although_it_is_possible_in_some_cases_to_have_multiple_instances_of_Firefox_running_in_different_profiles_to_avoid_confusion_you_should_first_exitquitterminate_all_running_instances_of_Firefox_FirefoxDeveloperEdition_or_Nightly._Then_follow_the_instructions_below_applicable_to_your_operating_system."><strong>Você não pode mudar o perfile enquanto o Firefox está em execução.</strong> Apesar de ser possível em alguns casos ter várias instâncias do Firefox em execução em diferentes perfis, para evitar confusão, você deve primeiro sair/terminar todas as instâncias em execução de <em>Firefox</em>, <em>FirefoxDeveloperEdition</em> ou <em>Nightly</em>. Então, siga as instruções abaixo, aplicáveis ao seu sistema operacional.</p> + +<h4 id="Windows">Windows</h4> + +<h5 id="Windows_XP">Windows XP</h5> + +<ol> + <li>Clique no botão de Iniciar.</li> + <li>Clique "Executar".</li> + <li> + <p>Digite <code>firefox --ProfileManager</code>.</p> + </li> +</ol> + +<h5 id="Windows_Vista7">Windows Vista/7</h5> + +<ol> + <li>Clique no botão de Iniciar.</li> + <li>Clique na barra de pesquisa na parte inferior.</li> + <li> + <p>Digite <code>firefox --ProfileManager</code>.</p> + </li> +</ol> + +<h5 id="Windows_88.1">Windows 8/8.1</h5> + +<ol> + <li>Pressione "Windows + R" em seu teclado.</li> + <li>Digite <code>firefox --ProfileManager</code>.</li> +</ol> + +<p>Se a janela do Gerenciador de Perfis não abrir, o Firefox pode estar sendo executado em segundo plano, mesmo que não esteja visível. Feche todas as instâncias do Firefox ou reinicie o computador e tente novamente.</p> + +<h4 id="Linux">Linux</h4> + +<p>Se o Firefox já estiver incluído na sua distribuição Linux, ou se você tiver instalado o Firefox com o gerenciador de pacotes da sua distribuição Linux:</p> + +<ol> + <li>No topo da janela do Firefox, clique no menu Arquivo e selecione Sair.</li> + <li>No Terminal, execute <code>firefox --ProfileManager</code></li> +</ol> + +<p>Se a janela do Gerenciador de Perfis não abrir, o Firefox pode estar sendo executado em segundo plano, mesmo que não esteja visível. Feche todas as instâncias do Firefox ou reinicie o computador e tente novamente.</p> + +<h4 id="macOS">macOS</h4> + +<ol> + <li>Execute o aplicativo <em>Terminal</em>, que é encontrado em Aplicativos/Utilitários.</li> + <li>Digite ou cole no caminho para o Firefox, seguido por <code>.app/Contents/MacOS/firefox</code>. Por exemplo, se o Firefox está instalado no local recomendado, você digitaria <code>/Applications/Firefox.app/Contents/MacOS/firefox</code>.</li> + <li>Se você tiver o caminho para o seu perfil desejado à mão, insira um caractere de espaço, seguido por <code>-profile</code> seguido por outro caractere de espaço, seguido pelo caminho completo para a pasta de perfil na qual você deseja iniciar. Isto irá iniciar o Firefox imediatamente. Caso contrário, insira um caractere de espaço seguido de <code>--profilemanager</code>. Isso apresentará a janela do Gerenciador de Perfis na qual você pode fazer sua seleção.</li> + <li>Pressione <em>enter.</em></li> +</ol> + +<p>Aqui está um exemplo completo do comando Terminal a partir dos passos 2-3:</p> + +<pre>/Applications/Firefox.app/Contents/macOS/firefox -profile /Users/Suzie/Library/Application\ Support/Firefox/Profiles/r99d1z7c.default</pre> + +<p>Se você quiser fazer isso com frequência e de forma mais fácil, você pode querer criar um aplicativo <em>Automatizador</em>, como explicado <a href="http://sonnygill.net/mac/mac-multiple-firefox-profiles/">neste tutorial</a>.</p> + +<h3 id="Criando_um_perfil">Criando um perfil</h3> + +<h4 id="Criando_um_perfil_através_do_Gerenciador_de_Perfis">Criando um perfil através do Gerenciador de Perfis</h4> + +<p>Essas instruções devem ser as mesmas para todos os sistemas operacionais.</p> + +<ol> + <li>Para iniciar o Assistente de novo perfil, clique em "Novo perfil..." no Gerenciador de Perfis.</li> + <li>Clique em Próximo e insira o nome do perfil. Use um nome de perfil que seja descritivo, como seu nome pessoal. Este nome não é exposto à Internet.</li> + <li>Você também pode escolher onde armazenar o perfil no seu computador. Para selecionar o local de armazenamento, clique em Pasta....</li> + <li>Se você escolher o local da pasta para o perfil, selecione uma pasta nova ou vazia. Se você escolher uma pasta que não esteja vazia e depois remover o perfil e escolher a opção \"Excluir arquivos\", tudo dentro dessa pasta será excluído.</li> + <li>Para criar o novo perfil, clique Concluir.</li> +</ol> + +<h4 id="Criando_um_perfil_através_do_navegador_Firefox">Criando um perfil através do navegador Firefox</h4> + +<p>Você pode criar um novo perfil do Firefox diretamente no navegador.</p> + +<ol> + <li>Digite about:profiles na barra de pesquisa de URL do navegador</li> + <li>Na página, clique no botão Criar um novo perfil</li> + <li>Leia a introdução e clique em Próximo</li> + <li>Digite um nome de perfil para seu novo Perfil. Use um nome de perfil que é descritivo, tal como seu nome pessoal. Esse nome não é exposto para a Internet.</li> + <li>Opcionalmente, para alterar onde o perfil armazenará seu computador, clique em Pasta...</li> + <li>Para criar um novo perfil, clique Concluir.</li> +</ol> + +<h3 id="Excluindo_um_perfil">Excluindo um perfil</h3> + +<ol> + <li>No Gerenciador de perfil, selecione o perfil para remover e clique Excluir perfil....</li> + <li>Confirme que você deseja excluir o perfil: + <ul> + <li>"Não excluir arquivos" remove o perfil do Gerenciador de perfil, mas retém os arquivos de dados do perfil no seu computador na pasta de armazenamento, para que suas informações não sejam perdidas. "Não excluir arquivos" é a opção preferida, porque salva a pasta do perfil antigo, permitindo recuperar os arquivos para um novo perfil.</li> + <li>"Excluir arquivos" remove o perfil e seus arquivos, incluindo os favoritos, configurações, senhas, etc.<br> + <br> + {{ warning("Se você usar a opção \"Excluir arquivos\", a pasta de perfil e os arquivos serão excluídos. Essa ação não podem ser desfeitas.") }}</li> + <li>"Cancelar" interrompe a exclusão de perfil.</li> + </ul> + </li> +</ol> + +<h3 id="Renomeando_um_perfil">Renomeando um perfil</h3> + +<ol> + <li>No Gerenciador de perfil, selecione o perfil que você deseja renomear e clique em "Renomear perfil".</li> + <li>Insira um novo nome para o perfile e clique em OK.</li> +</ol> + +<div class="note"> +<p>Nota: A pasta contendo os arquivos para o perfil não é renomeada.</p> +</div> + +<h2 id="Opções">Opções</h2> + +<h3 id="Trabalhar_desconectado">Trabalhar desconectado</h3> + +<p>A escolha desta opção carrega o perfil selecionado e inicia o Firefox desconectado. Você pode visualizar páginas web visualizadas anteriormente e experimentar seu perfil.</p> + +<h3 id="Não_perguntar_na_inicialização">Não perguntar na inicialização</h3> + +<p>Se você tiver vários perfis, o Firefox solicitará que o perfil seja usado toda vez que você iniciar o Firefox. Selecione essa opção para permitir que o Firefox carregue o perfil selecionado, sem solicitar a inicialização.</p> + +<div class="note"> +<p>Nota: Para acessar outros perfis após selecionar esta opção, você deve iniciar o Gerenciador de perfis primeiro.</p> +</div> + +<h2 id="Usando_os_perfis">Usando os perfis</h2> + +<h3 id="Windows_2">Windows</h3> + +<p>Se você deseja que o gerenciador de perfil seja exibido toda vez que iniciar o Firefox, para poder escolher um perfil, será necessário editar o "Destino" do ícone de inicialização. Para fazer isso:</p> + +<ol> + <li>Clique com o botão direito o ícone e escolha "Propriedades".</li> + <li>Quando a caixa de diálogo de propriedades for exibida, você verá um campo de texto "Destino" que poderá editar e deverá mostrar o caminho atual do arquivo.</li> + <li>Após fechar as aspas, adicione <code>-ProfileManager</code>.</li> + <li>Clique Ok.</li> +</ol> + +<p>Agora, sempre que você clicar duas vezes nesse ícone, o Gerenciador de perfis deverá aparecer, permitindo que você escolha o perfil que deseja usar.</p> + +<p>Se você quiser que ícones individuais iniciem perfis específicos, será necessário editar o "Destino" de cada ícone. Para fazer isso:</p> + +<ol> + <li>Clique com botão direito no ícone e escolha "Propriedades".</li> + <li>Quando a caixa de diálogo de propriedades for exibida, você verá um campo de texto "Destino" que poderá editar e deverá mostrar o caminho atual do arquivo.</li> + <li>Para definir permanentemente um perfil específico, adicione <code>-p NOME_DO_PERFIL</code> ao caminho de destino, mas fora das aspas, substituindo "NOME_DO_PERFIL" com o nome de perfil que você escolher.</li> + <li>Se você também quiser permitir que várias instâncias do Firefox sejam executadas ao mesmo tempo, adicione <code>-no-remote</code> após o nome do perfil.</li> + <li>Quando terminar, clique em Ok. Faça isso para cada ícone para o qual você gostaria de ter um perfil específico. Uma vez feito, cada um deve iniciar automaticamente com o perfil especificado.</li> +</ol> + +<h3 id="Linux_2">Linux</h3> + +<p>Não existe uma maneira extremamente direta de criar lançadores de aplicativos personalizados no Gnome 3 como havia no Gnome 2. O tutorial a seguir ajudará você a progredir no geral: <a href="https://blog.randell.ph/how-to-create-custom-application-launchers-in-gnome-3/">Gnome 3 Iniciador de aplicativos personalizado</a>. Depois de chegar ao ponto de adicionar um novo item, você pode ter a caixa de diálogo de perfil sempre exibida ou definir o inicializador para iniciar um perfil específico.</p> + +<p>Se você deseja que o gerenciador de perfil seja exibido toda vez que iniciar o Firefox, para poder escolher um perfil, será necessário definir a linha de comando para o seu novo iniciador.</p> + +<ol> + <li>Defina o campo de texto "command" para direcionar o arquivo executável, provavelmente "/usr/bin/firefox", e adicione o parâmetro <code>-p</code>.</li> +</ol> + +<p>Se você quiser que ícones individuais iniciem perfis específicos, você precisará definir a linha de comando para o seu novo lançador. Para fazer isso:</p> + +<ol> + <li>Defina o campo de texto "command" para direcionar o arquivo executável, provavelmente "/usr/bin/firefox", e adicione o parâmetro <code>-p NOME_DO_PERFIL</code>, substituindo "NOME_DO_PERFIL" com o perfil específico.</li> + <li>Repita conforme necessário, para cada perfil adicional que você deseja definir.</li> + <li>Se você também quiser permitir que várias instâncias do Firefox sejam executadas ao mesmo tempo, adicione "-no-remote" após o nome do perfil.</li> +</ol> + +<h3 id="Mac_OS_X_2">Mac OS X</h3> + +<p>Você pode encontrar um tutorial útil para configurar lançadores personalizados aqui: <a href="https://spf13.com/post/managing-multiple-firefox-profiles-in-os-x/">Gerenciando vários perfis do Firefox no OSX</a>. Observe que é melhor seguir todas as etapas na seção "Criando os scripts", incluindo a etapa "editar Info.plist". Deixe de fora o nome do perfil se quiser que o seletor de perfis seja exibido toda vez que você iniciar.</p> + +<h2 id="Configurando_vários_perfis_para_diferentes_canais_do_Firefox">Configurando vários perfis para diferentes canais do Firefox</h2> + +<p>Esta seção será especialmente útil se você for um desenvolvedor, quiser trabalhar com vários canais e cada um tiver seu iniciador separado.</p> + +<h3 id="Windows_3">Windows</h3> + +<p>No Windows, as compilações Developer e Nightly têm seu próprio diretório na pasta "Programas", para que você não precise se preocupar com onde armazenar os arquivos baixados. No entanto, todos os três tentarão usar o mesmo perfil por padrão. Você não vai querer manter esse comportamento, porque os diferentes canais têm diferentes níveis de recursos. Para definir cada ativador, siga as instruções do Windows no <a href="#Windows">Windows Launcher</a>.</p> + +<h3 id="Linux_3">Linux</h3> + +<p>No Linux, as coisas não são configuradas automaticamente. Você provavelmente obterá uma solicitação para fazer o download de um arquivo tar.bz2 para extrair. Extraia os arquivos para um novo diretório e use as instruções do novo lançador aqui. A única mudança que você precisará fazer é o caminho do comando. Você desejará configurá-lo para o diretório em que extraiu o arquivo tar.bz2 do canal Firefox e o arquivo executável "firefox" localizado nesse diretório. Os demais métodos de atribuição de perfil permanecerão os mesmos. Você desejará, com certeza, adicionar a parte <code>-no-remote</code> ao final do campo de comando, para poder executar várias instâncias ao mesmo tempo.</p> + +<h3 id="Mac_OS_X_3">Mac OS X</h3> + +<p>Você pode encontrar um tutorial útil para configurar lançadores personalizados aqui: <a href="https://spf13.com/post/managing-multiple-firefox-profiles-in-os-x/">Gerenciando vários perfis do Firefox no OSX</a>. Observe que é melhor seguir todas as etapas na seção "Criando os scripts", incluindo a etapa "editar Info.plist". Além disso, você desejará alterar o caminho no script do shell para apontar para o arquivo .app correto para o canal do Firefox que você deseja segmentar.</p> diff --git a/files/pt-br/mozilla/firefox/multiprocess_firefox/index.html b/files/pt-br/mozilla/firefox/multiprocess_firefox/index.html new file mode 100644 index 0000000000..2dd2134e60 --- /dev/null +++ b/files/pt-br/mozilla/firefox/multiprocess_firefox/index.html @@ -0,0 +1,75 @@ +--- +title: Multiprocess Firefox +slug: Mozilla/Firefox/Multiprocess_Firefox +tags: + - Português (do Brasil) tags +translation_of: Mozilla/Firefox/Multiprocess_Firefox +--- +<div>{{FirefoxSidebar}}</div><p>In current versions of desktop Firefox, the entire browser runs in a single operating system process. In particular, the JavaScript that runs the browser UI (also known as "chrome code") runs in the same process as the code in web pages (also known as "content" or "web content").<br> + <br> + Future versions of Firefox will run the browser UI in a separate process from web content. In the first iteration of this architecture all browser tabs will run in the same process, and the browser UI will run in a different process. In future iterations, we expect every browser tab to run in its own process. The project that's delivering multiprocess Firefox is called Electrolysis, sometimes abbreviated to e10s.</p> + +<p>Normal web pages are unaffected by multiprocess Firefox. People working on Firefox itself and Firefox add-on developers will be affected if their code relies on being able to access web content directly.</p> + +<p>Instead of accessing content directly, chrome JavaScript will have to use the <a href="/en-US/Firefox/Multiprocess_Firefox/The_message_manager">message manager</a> to access content. To help ease the transition we've implemented <a href="/en-US/Firefox/Multiprocess_Firefox/Cross_Process_Object_Wrappers">Cross Process Object Wrappers</a> and some <a href="/en-US/Firefox/Multiprocess_Firefox/Limitations_of_chrome_scripts#Compatibility_shims">compatibility shims for add-on developers</a>. If you're an add-on developer wondering whether you are affected, see the <a href="/en-US/Add-ons/Working_with_multiprocess_Firefox">guide to working with multiprocess Firefox</a>.</p> + +<p>Multiprocess Firefox is currently enabled by default in <a class="external external-icon" href="https://nightly.mozilla.org/">Nightly</a> builds. As a visual indicator that you're running multiprocess Firefox, the titles of remote tabs are underlined.</p> + +<hr> +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Technical_overview">Technical overview</a></dt> + <dd>A very high-level view of how multiprocess Firefox is implemented.</dd> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Glossary">Glossary</a></dt> + <dd>A reference for the jargon used in multiprocess Firefox.</dd> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/The_message_manager">The message manager</a></dt> + <dd>How to communicate between chrome and content.</dd> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Message_Manager_Interfaces">Message Manager interfaces</a></dt> + <dd>Includes links to the API reference for the message manager interfaces.</dd> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Frame_script_environment">Frame script environment</a></dt> + <dd>The environment frame scripts run in, and especially how it differs from the environment for chrome code.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Motivation">Motivation</a></dt> + <dd>Why we're implementing multiprocess Firefox: performance, security, and stability.</dd> + <dt><a href="/en-US/Add-ons/Working_with_multiprocess_Firefox">Add-on migration guide</a></dt> + <dd>If you're an add-on developer, find out if you're affected and how to update your code.</dd> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Cross_Process_Object_Wrappers">Cross Process Object Wrappers</a></dt> + <dd>Cross Process Object Wrappers are a migration aid, giving chrome code synchronous access to content.</dd> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Debugging_frame_scripts">Debugging frame scripts</a></dt> + <dd>Using the Browser Content Toolbox to debug frame scripts.</dd> +</dl> +</div> +</div> + +<hr> +<div class="column-container"> +<div class="column-half"> +<dl> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Limitations_of_chrome_scripts">Limitations of chrome scripts</a></dt> + <dd>Practices that will no longer work in chrome code, and how to fix them.</dd> +</dl> +</div> + +<div class="column-half"> +<dl> + <dt><a href="/en-US/Firefox/Multiprocess_Firefox/Limitations_of_frame_scripts">Limitations of frame scripts</a></dt> + <dd>Practices that will not work inside frame scripts, and what to do instead.</dd> +</dl> +</div> +</div> + +<hr> +<h2 id="Contact_us">Contact us</h2> + +<p>Find out more about the project, get involved, or ask us your questions.</p> + +<ul> + <li><strong>Electrolysis project page</strong>: <a href="https://wiki.mozilla.org/Electrolysis">https://wiki.mozilla.org/Electrolysis</a></li> + <li><strong>IRC</strong>: #e10s on <a href="https://wiki.mozilla.org/IRC">irc.mozilla.org</a></li> + <li><strong>Mailing list</strong>: <a href="https://groups.google.com/forum/#!forum/mozilla.dev.tech.electrolysis">dev.tech.electrolysis</a></li> +</ul> diff --git a/files/pt-br/mozilla/firefox/multiprocess_firefox/motivacao/index.html b/files/pt-br/mozilla/firefox/multiprocess_firefox/motivacao/index.html new file mode 100644 index 0000000000..8b3745c16c --- /dev/null +++ b/files/pt-br/mozilla/firefox/multiprocess_firefox/motivacao/index.html @@ -0,0 +1,44 @@ +--- +title: Motivação para o Multiprocesso do Firefox +slug: Mozilla/Firefox/Multiprocess_Firefox/Motivacao +translation_of: Mozilla/Firefox/Multiprocess_Firefox/Motivation +--- +<div>{{FirefoxSidebar}}</div><p>Existem três principais razões para fazer o Firefox executar conteúdo em processos separados: desempenho, segurança e estabilidade.</p> + +<h2 id="Performance">Performance</h2> + +<p>A maioria dos trabalhos de performances na Mozilla nos últimos dois anos tem se concentrado na capacidade de resposta do navegador. O objetivo é reduzir "<a href="/en-US/docs/Glossary/Jank"> jank</a>" - esses momentos em que o navegador parece congelar brevemente ao carregar uma página grande, digitando uma forma, Ou rolagem. A capacidade de resposta tende a importar muito mais do que o rendimento na web hoje. Grande parte deste trabalho foi feito como parte do <a href="https://wiki.mozilla.org/Performance/Snappy"> projeto Snappy</a>. Os principais focos foram:</p> + +<ul> + <li>Moving long-running actions to a separate thread so that the main thread can continue to respond to the user.</li> + <li>Doing I/O asynchronously or on other threads so that the main thread isn’t blocked waiting for the disk.</li> + <li>Breaking long-running code into shorter pieces and running the event loop in between. Incremental garbage collection is an example of this.</li> +</ul> + +<p>Much of the low-hanging fruit in these areas has already been picked. The remaining issues are difficult to fix. For example, JavaScript execution and layout happen on the main thread, and they block the event loop. Running these components on a separate thread is difficult because they access data, like the DOM, that are not thread-safe. As an alternative, we’ve considered allowing the event loop to run in the middle of JavaScript execution, but doing so would break a lot of assumptions made by other parts of Firefox (not to mention add-ons).</p> + +<p>Running web content in a separate process is a nice alternative to these approaches. Like the threaded approach, Firefox is able to run its event loop while JavaScript and layout are running in a content process. But unlike threading, the UI code has no access to content DOM or or other content data structures, so there is no need for locking or thread-safety. The downside, of course, is that any code in the Firefox UI process that needs to access content data must do so explicitly through message passing.</p> + +<p>We feel this tradeoff makes sense for a few reasons:</p> + +<ul> + <li>It’s not all that common for Firefox code to access content DOM.</li> + <li>Code that is shared with Firefox OS already uses message passing.</li> + <li>In the multiprocess model, Firefox code that fails to use message passing to access content will fail in an obvious, consistent way. In the threaded model, code that accesses content without proper locking will fail in subtle ways that are difficult to debug.</li> +</ul> + +<h2 id="Security">Security</h2> + +<p>Right now, if someone discovers an exploitable bug in Firefox, they’re able to take over users’ computers. There are a lot of techniques to mitigate this problem, but one of the most powerful is <a href="http://en.wikipedia.org/wiki/Sandbox_%28computer_security%29">sandboxing</a>. Technically, sandboxing doesn’t require multiple processes. However, a sandbox that covered single-process Firefox wouldn’t be very useful. Sandboxes are only able to prevent processes from performing actions that a well-behaved process would never do. Unfortunately, a well-behaved Firefox process (especially one with add-ons installed) needs access to much of the network and file system. Consequently, a sandbox for single-process Firefox couldn’t restrict much.</p> + +<p>In multiprocess Firefox, content processes will be sandboxed. A well-behaved content process won’t access the filesystem directly; it will have to ask the main process to perform the request. At that time, the main process can verify that the request is safe and that it makes sense. Consequently, the sandbox for content processes can be quite restrictive. Our hope is that this arrangement will make it much harder to craft exploitable security holes for Firefox.</p> + +<h2 id="Stability">Stability</h2> + +<p>Currently, a crash in the code running a web page will take down the entire browser. With multiprocess Firefox, only the content process that crashed will be killed.</p> + +<div class="note"> +<p>This page incorporates a lot of content from Bill McCloskey's blog post on multiprocess Firefox: <a href="http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/">http://billmccloskey.wordpress.com/2013/12/05/multiprocess-firefox/</a></p> +</div> + +<p> </p> diff --git a/files/pt-br/mozilla/firefox/multiprocess_firefox/which_uris_load_where/index.html b/files/pt-br/mozilla/firefox/multiprocess_firefox/which_uris_load_where/index.html new file mode 100644 index 0000000000..708c6b49f0 --- /dev/null +++ b/files/pt-br/mozilla/firefox/multiprocess_firefox/which_uris_load_where/index.html @@ -0,0 +1,59 @@ +--- +title: Aonde cada URI carrega +slug: Mozilla/Firefox/Multiprocess_Firefox/Which_URIs_load_where +translation_of: Mozilla/Firefox/Multiprocess_Firefox/Which_URIs_load_where +--- +<div>{{FirefoxSidebar}}</div><p>Com base inicialmente no esquema URI da página, o navegador pode decidir se carregar uma página no processo chrome ou um processo de conteúdo. Para alguns esquemas, você pode alterar o comportamento padrão.</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Esquema</th> + <th scope="col">Comportamento</th> + </tr> + </thead> + <tbody> + <tr> + <td><code>about:</code></td> + <td> + <p>Por padrão, as páginas <code> about: </code> são sempre carregadas no processo chrome. No entanto, quando você registra uma nova página <code> about:</code> você pode alterar esse padrão.</p> + + <p>Duas novas flags são definidas em <code><a href="https://dxr.mozilla.org/mozilla-central/source/netwerk/protocol/about/nsIAboutModule.idl">nsIAboutModule</a></code>:</p> + + <ul> + <li><code>URI_CAN_LOAD_IN_CHILD</code>: A página será carregada no mesmo processo que carregou o <code> <a href="pt-BR/docs/Mozilla/Tech/XUL/Navegador"> navegador</a></code>.</li> + <li><code>URI_MUST_LOAD_IN_CHILD</code>: A página sempre será carregada em um processo filho.</li> + </ul> + + <p>Para usar um destes flags, retorne em sua implementação o <code>getURIFlags</code> no <a href="/en-US/docs/Custom_about:_URLs">código que registra o <code>about:</code> URI</a>.</p> + + <p>Se você usar essas flags, você deve registrar a página sobre um framescript para cada guia. Se você não configurar o multiprocesso Compatível com o verdadeiro no seu <code>install.rdf</code>, então serão usados os padrões. Mas os padrões dos e10s serão obsoletos em breve. Leia mais aqui - <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1257201">Erro 1257201</a>.</p> + </td> + </tr> + <tr> + <td><code>chrome:</code></td> + <td> + <p>Por padrão, as páginas <code>chrome:</code> são sempre carregadas no processo chrome. No entanto, quando você registra uma nova página <code>chrome</code>, você pode alterar esse padrão.</p> + + <p>Duas novas flags são definidas no <a href="/en-US/docs/Chrome Registration">file chrome.manifest</a>:</p> + + <ul> + <li>remoteenabled: a página será carregada no mesmo processo que carregou o<code> <a href="pt-BR/docs/Mozilla/Tech/XUL/Navegador"> navegador</a></code>.</li> + <li>remoterequired: a página sempre será carregada em um processo filho.</li> + </ul> + </td> + </tr> + <tr> + <td><code>file:</code></td> + <td> + <p>Sempre carregado em um processo de conteúdo.</p> + + <p><strong>Nota:</strong> Isso não significa que o <code>file:</code> URIs podem ser usado livremente em código de processos de conteúdo. O Sandboxing pode incluir listas predefinidas de diretórios particulares e futuras alterações podem restringir os <code>files:</code> URIs a um processo de conteúdo separado, isolado do conteúdo da Web normal. Veja <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1187099">bug 1187099 </a> como isso pode afetar os addons tentando carregar arquivos no diretório do perfil.</p> + </td> + </tr> + <tr> + <td><code>resource:</code></td> + <td>Sempre carregado em um processo de conteúdo.</td> + </tr> + </tbody> +</table> diff --git a/files/pt-br/mozilla/firefox/novas_funcionalidades/index.html b/files/pt-br/mozilla/firefox/novas_funcionalidades/index.html new file mode 100644 index 0000000000..12a4aa7c23 --- /dev/null +++ b/files/pt-br/mozilla/firefox/novas_funcionalidades/index.html @@ -0,0 +1,469 @@ +--- +title: Novas funcionalidades no Firefox +slug: Mozilla/Firefox/Novas_funcionalidades +translation_of: Mozilla/Firefox/Experimental_features +--- +<div>{{FirefoxSidebar}}</div><p class="summary">Em ordem para testar as novas funcionalidades, a Mozilla publica uma versão de testes do navegador Firefox, <a href="https://nightly.mozilla.org/">Firefox Nightly</a>, diariamente. Funcionalidades experimentais, for example implementations of proposed Web platform standards, are available. This page lists features that are in Nightly versions of Firefox along with information on how to activate them, if necessary. You can test your Web sites and applications before these features get released and ensure everything will still work with the latest Web technology capabilities.</p> + +<p>To test these experimental features, you need to download <a href="https://nightly.mozilla.org/">Firefox Nightly</a> or <a href="https://www.mozilla.org/en-US/firefox/developer/">Firefox Developer Edition</a>.</p> + +<h2 id="CSS">CSS</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Feature</th> + <th scope="col">Firefox Nightly</th> + <th scope="col">Firefox Developer Edition</th> + <th scope="col">Firefox Beta</th> + <th scope="col">Firefox Release</th> + <th scope="col">Preference</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong><a href="/en-US/docs/Web/CSS/CSS_Grid_Layout">Grid Layout</a></strong></td> + <td>40</td> + <td>40</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1217086">Disabled</a></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1217086">Disabled</a></td> + <td><code>layout.css.grid.enabled</code></td> + </tr> + <tr> + <td><strong>Subgrids</strong></td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>layout.css.grid-template-subgrid-value.enabled</code></td> + </tr> + <tr> + <td><strong>Logical values for <code>clear</code> and <code>float</code> CSS properties</strong><br> + The values {{cssxref("clear")}}<code>:</code> <code>inline-start</code> and <code>clear:</code> <code>inline-end</code> as well as {{cssxref("float")}}<code>:</code> <code>inline-start</code> and <code>float:</code> <code>inline-end</code> are making easier to create layouts that are agnostic to the text directionality.</td> + <td>45</td> + <td>45</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1253919">Disabled</a></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1253919">Disabled</a></td> + <td><code>layout.css.float-logical-values.enabled</code></td> + </tr> + <tr> + <td><strong>Display stray control characters in CSS as hex boxes</strong><br> + This feature renders control characters (Unicode category Cc) other than <em>tab</em> (<code>U+0009</code>), <em>line feed</em> (<code>U+000A</code>), <em>form feed</em> (<code>U+000C</code>), and <em>carriage return</em> (<code>U+000D</code>) as a hexbox when they are not expected.</td> + <td>43</td> + <td>43</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>layout.css.control-characters.enabled</code></td> + </tr> + <tr> + <td><strong>The <code>transform-box</code> property</strong><br> + Controls the box the relative values of {{cssxref("transform-origin")}} and {{cssxref("transform")}} relate too.</td> + <td>41</td> + <td>41</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1208550">Disabled</a></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1208550">Disabled</a></td> + <td><code>svg.transform-box.enabled</code></td> + </tr> + <tr> + <td><strong>Basic shapes in </strong><code><strong>clip-path</strong></code><br> + Adds the functions <code>circle()</code>, <code>ellipse()</code>, and <code>polygon()</code> to the set of possible values for {{cssxref("clip-path")}}.</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1303654">Enabled</a><br> + <sub>(available since 47, enabled by default since 53)</sub></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1303654">Enabled</a><br> + <sub>(available since 47, enabled by default since 53)</sub></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1247229">Disabled</a><br> + <sub>(available since 47)</sub></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1247229">Disabled</a><br> + <sub>(available since 47)</sub></td> + <td><code>layout.css.clip-path-shapes.enabled</code></td> + </tr> + <tr> + <td><strong>The <code>font-display</code> descriptor for <code>@font-face</code></strong><br> + To improve Web fonts performance, {{cssxref("@font-face")}} has an experimental {{cssxref("@font-face/font-display", "font-display")}} descriptor.</td> + <td>Disabled<br> + <sub>(available since 46)</sub></td> + <td>Disabled<br> + <sub>(available since 46)</sub></td> + <td>Disabled<br> + <sub>(available since 46)</sub></td> + <td>Disabled<br> + <sub>(available since 46)</sub></td> + <td><code>layout.css.font-display.enabled</code></td> + </tr> + <tr> + <td><strong>Longhand properties of CSS Masks</strong><br> + The <a href="/en-US/docs/Web/CSS/CSS_Masks">longhand properties of CSS Masks</a> are only available behind a compile flag (<code>MOZ_ENABLE_MASK_AS_SHORTHAND</code>).</td> + <td>---</td> + <td>---</td> + <td>---</td> + <td>---</td> + <td>---</td> + </tr> + <tr> + <td><strong>The touch-action CSS property</strong><br> + The {{cssxref("touch-action")}} CSS property is part of the {{SpecName("Pointer Events")}} specification, and lets the CSS specify how and in what way the user is able to manipulate an object by touch.</td> + <td>50</td> + <td>---</td> + <td>---</td> + <td>---</td> + <td><code>layout.css.touch_action.enabled</code></td> + </tr> + </tbody> +</table> + +<h2 id="JavaScript">JavaScript</h2> + +<p id="ECMAScript_2016">See also <a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_Next_support_in_Mozilla">ECMAScript Next support</a> for implemented features of ECMAScript 2016 and later, that are not experimental and thus available without preferences in Firefox Release.</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Feature</th> + <th scope="col">Firefox Nightly</th> + <th scope="col">Firefox Developer Edition</th> + <th scope="col">Firefox Beta</th> + <th scope="col">Firefox Release</th> + <th scope="col">Preference</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation">Exponentiation operator</a></strong></td> + <td>42</td> + <td>Will ship in version 52, see {{bug(1291212)}}</td> + <td>Will ship in version 52, see {{bug(1291212)}}</td> + <td>Will ship in version 52, see {{bug(1291212)}}</td> + <td>None</td> + </tr> + <tr> + <td><strong>Additions to the <code>ArrayBuffer</code> object</strong><br> + Adds the {{jsxref("ArrayBuffer.transfer()")}} that returns a new <code>ArrayBuffer</code> whose contents have been taken from the <code>oldBuffer</code>'s data (<a href="https://gist.github.com/lukewagner/2735af7eea411e18cf20">spec</a>).</td> + <td>36</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td>None</td> + </tr> + <tr> + <td><strong>TypedObject objects</strong> (<a href="https://github.com/dslomov-chromium/typed-objects-es7">spec</a>)</td> + <td>Enabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td>None</td> + </tr> + <tr> + <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/SIMD">SIMD</a> (<a href="https://github.com/johnmccutchan/ecmascript_simd">specification and polyfill</a>)</td> + <td>Enabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td>None</td> + </tr> + <tr> + <td><strong>Shared Memory objects</strong><br> + {{jsxref("SharedArrayBuffer")}}<br> + {{jsxref("Atomics")}}</td> + <td>Enabled<br> + <sub>(available since 46)</sub></td> + <td>Disabled<br> + <sub>(available since 46)</sub></td> + <td>Disabled<br> + <sub>(available since 46)</sub></td> + <td>Disabled<br> + <sub>(available since 46)</sub></td> + <td><code>javascript.options.shared_memory</code></td> + </tr> + </tbody> +</table> + +<h2 id="APIs">APIs</h2> + +<h3 id="Canvas_WebGL">Canvas & WebGL</h3> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Feature</th> + <th scope="col">Firefox Nightly</th> + <th scope="col">Firefox Developer Edition</th> + <th scope="col">Firefox Beta</th> + <th scope="col">Firefox Release</th> + <th scope="col">Preference</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>WebGL 2</strong><br> + The {{domxref("WebGL2RenderingContext")}} interface provides the OpenGL ES 3.0 rendering context for the drawing surface of an HTML {{HTMLElement("canvas")}} element.</td> + <td>46<br> + <sub>(implemented with disabled pref before 46)</sub></td> + <td>Enabled in 51</td> + <td>Enabled in 51</td> + <td>Enabled in 51</td> + <td><code>webgl.enable-webgl2</code></td> + </tr> + <tr> + <td><strong><code>WEBGL_debug_renderer_info</code> extension</strong><br> + The {{domxref("WEBGL_debug_renderer_info")}} extension allows to transmit information useful to help debugging problems to the server.</td> + <td>42</td> + <td>42</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=742798">Disabled</a></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=742798">Disabled</a></td> + <td><code>webgl.enable-debug-renderer-info</code></td> + </tr> + <tr> + <td><strong>OffscreenCanvas</strong><br> + The {{domxref("OffscreenCanvas")}} interface provides a canvas that can be rendered off screen. It is available in both the window and <a href="/en-US/docs/Web/API/Web_Workers_API">worker</a> contexts.</td> + <td>Disabled<br> + <sub>(available since 44)</sub></td> + <td>Disabled<br> + <sub>(available since 44)</sub></td> + <td>Disabled<br> + <sub>(available since 44)</sub></td> + <td>Disabled<br> + <sub>(available since 44)</sub></td> + <td><code>gfx.offscreencanvas.enabled</code></td> + </tr> + <tr> + <td><strong><a href="/en-US/docs/Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility">Hit regions</a></strong><br> + Whether the mouse coordinates are within a particular area on the canvas, is a common problem to solve. The hit region API allows you define an area of your canvas and provides another possibility to expose interactive content on a canvas to accessibility tools.</td> + <td>Disabled<br> + <sub>(available since 30)</sub></td> + <td>Disabled<br> + <sub>(available since 30)</sub></td> + <td>Disabled<br> + <sub>(available since 30)</sub></td> + <td>Disabled<br> + <sub>(available since 30)</sub></td> + <td><code>canvas.hitregions.enabled</code></td> + </tr> + </tbody> +</table> + +<h3 id="DOM"> DOM</h3> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Feature</th> + <th scope="col">Firefox Nightly</th> + <th scope="col">Firefox Developer Edition</th> + <th scope="col">Firefox Beta</th> + <th scope="col">Firefox Release</th> + <th scope="col">Preference</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>WebVR API</strong><br> + The <a href="/en-US/docs/Web/API/WebVR_API">WebVR API</a> allows to control and use virtual reality devices.</td> + <td>46<br> + <sub>A major update of the interface happened in version 51.</sub></td> + <td>46<br> + <sub>A major update of the interface happened in version 51.</sub></td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>dom.vr.enabled</code></td> + </tr> + <tr> + <td><strong>FlyWeb</strong><br> + <a href="https://flyweb.github.io/">FlyWeb</a> is a project at Mozilla focused on bringing a new set of APIs to the browser for advertising and discovering local-area web servers.</td> + <td>51</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>dom.flyweb.enabled</code></td> + </tr> + <tr> + <td><code><strong>HTMLMediaElement.seekToNextFrame()</strong></code><br> + Part of an experimentation process around support non-real-time access to media for tasks including filtering, editing, and so forth, the {{domxref("HTMLMediaElement.seekToNextFrame()")}} advances the the current play position to the next frame in the media.</td> + <td>49<br> + <sub>(Fundamental update in version 50)</sub></td> + <td>49<br> + <sub>(Fundamental update in version 50)</sub></td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>media.seekToNextFrame.enabled</code></td> + </tr> + <tr> + <td><strong><code>GeometryUtils.getBoxQuads()</code></strong> ({{bug(917755)}})</td> + <td>31</td> + <td>31</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1107559">Disabled</a></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1107559">Disabled</a></td> + <td><code>layout.css.getBoxQuads.enabled</code></td> + </tr> + <tr> + <td><strong><code>GeometryUtils.convertPointFromNode()</code></strong>,<br> + <strong><code>GeometryUtils.RectFromNode()</code></strong>, and<br> + <code><strong>GeometryUtils.convertQuadFromNode()</strong></code><br> + ({{bug(918189)}})</td> + <td>31</td> + <td>31</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1107559">Disabled</a></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1107559">Disabled</a></td> + <td><code>layout.css.convertFromNode.enabled</code></td> + </tr> + <tr> + <td><strong><code>Node.rootNode</code></strong><br> + The {{domxref("Node.rootNode")}} property returns a {{domxref("Node")}} object representing the topmost node in the tree, or the current node if it's the topmost node in the tree.<br> + <em>This feature is kept experimental as its naming poses Web compatibility problems. It will be renamed in the future.</em></td> + <td>48</td> + <td>48</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1269155">Disabled</a></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1269155">Disabled</a></td> + <td><code>dom.node.rootNode.enabled</code></td> + </tr> + <tr> + <td><strong>Performance Observer API</strong><br> + The {{domxref("PerformanceObserver")}} interface is used to <em>observe</em> performance measurement events and be notified of new <a href="/en-US/docs/Web/API/PerformanceEntry" title="The PerformanceEntry object encapsulates a single performance metric that is part of the performance timeline. A performance entry can be directly created by making a performance mark or measure (for example by calling the mark() method) at an explicit point in an application. Performance entries are also created in indirect ways such as loading a resource (such as an image).">performance entries</a> as they are recorded in the browser's <em>performance timeline</em>.</td> + <td>49</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>dom.enable_performance_observer</code></td> + </tr> + <tr> + <td><strong>WebVTT Regions API</strong><br> + <a href="/en-US/docs/Web/API/Web_Video_Text_Tracks_Format">WebVTT</a> regions are parts of the video viewport that provide a rendering area for WebVTT cues. The {{domxref("VTTRegion")}} is the interface exposing the WebVTT cues.<br> + <em>This interface is considered to be in flux and isn't therefore activated in any version by default.</em></td> + <td>Disabled<br> + <sub>(Experimental implementation since version 30)</sub></td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>media.webvtt.regions.enabled</code></td> + </tr> + <tr> + <td><strong>Support for audio and video tracks</strong><br> + Implements {{domxref("HTMLMediaElement.audioTracks")}} and {{domxref("HTMLMediaElment.videoTracks")}}.<br> + <em>Firefox doesn't support multiple audio or video tracks, preventing the most common use cases for these properties to work properly. That's why these properties are not activated by default in any version.</em></td> + <td>Disabled<br> + <sub>(Experimental implementation since version 33)</sub></td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>media.track.enabled</code></td> + </tr> + <tr> + <td><strong>Better value for <code>Event.timestamp</code></strong><br> + The property {{domxref("Event.timestamp")}} is returning a {{domxref("DOMHighResTimeStamp")}}, but the value is not the time since but since the reboot. This change allow for returning a timestamp relative to the Unix epoch.</td> + <td>32 (Windows)<br> + 43 (Linux)</td> + <td>32 (Windows)<br> + 43 (Linux)</td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1026804">Disabled</a></td> + <td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1026804">Disabled</a></td> + <td><code>media.track.enabled</code></td> + </tr> + <tr> + <td><strong>Pointer Events</strong></td> + <td>50</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>dom.w3c_pointer_events.enabled</code></td> + </tr> + <tr> + <td><strong><code>MediaDevices.ondevicechange</code> and the <code>devicechange</code> event</strong><br> + The {{domxref("MediaDevices.ondevicechange")}} event handler and corresponding {{event("devicechange")}} event make it possible to detect and react when audio and video devices are attached to or removed from the computer.</td> + <td> + <p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1308115">Disabled</a><br> + 51 (Mac)</p> + + <p>Enabled<br> + 52 (Mac)<br> + 52 (Windows)<br> + 52 (Linux)</p> + </td> + <td> + <p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1308115">Disabled</a><br> + 51 (Mac)</p> + + <p>Enabled<br> + 52 (Mac)<br> + 52 (Windows)<br> + 52 (Linux)</p> + </td> + <td> + <p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1308115">Disabled</a><br> + 51 (Mac)</p> + + <p>Enabled<br> + 52 (Mac)<br> + 52 (Windows)<br> + 52 (Linux)</p> + </td> + <td> + <p><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1308115">Disabled</a><br> + 51 (Mac)</p> + + <p>Enabled<br> + 52 (Mac)<br> + 52 (Windows)<br> + 52 (Linux)</p> + </td> + <td><code>media.ondevicechange.enabled</code></td> + </tr> + </tbody> +</table> + +<h2 id="Developer_Tools">Developer Tools</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Feature</th> + <th scope="col">Firefox Nightly</th> + <th scope="col">Firefox Developer Edition</th> + <th scope="col">Firefox Beta</th> + <th scope="col">Firefox Release</th> + <th scope="col">Preference</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>Debugger rewrite in HTML</strong></td> + <td>52</td> + <td>52</td> + <td>52</td> + <td>52</td> + <td><code>devtools.debugger.new-debugger-frontend</code></td> + </tr> + <tr> + <td><strong>Console rewrite in HTML</strong></td> + <td>52</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>devtools.webconsole.new-frontend-enabled</code></td> + </tr> + <tr> + <td><strong>Responsive Design Mode rewrite in HTML</strong><br> + A rewrite of Responsive Design Mode using HTML adds new features like a device selector (applies size, UA, dPR), UI redesign, and there's more still to come.</td> + <td>52</td> + <td>52</td> + <td>52</td> + <td>52</td> + <td><code>devtools.responsive.html.enabled</code></td> + </tr> + <tr> + <td><strong>Experimental Performance tool options</strong><br> + Enables options in the UI for JIT optimizations, memory, etc.</td> + <td>41</td> + <td>Disabled</td> + <td>Disabled</td> + <td>Disabled</td> + <td><code>devtools.performance.ui.experimental</code></td> + </tr> + </tbody> +</table> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="/en-US/docs/Mozilla/Firefox/Releases">Firefox developer release notes</a></li> + <li><a href="https://nightly.mozilla.org/">Firefox Nightly</a></li> + <li><a href="https://www.mozilla.org/en-US/firefox/developer/">Firefox Developer Edition</a></li> +</ul> diff --git a/files/pt-br/mozilla/firefox/performance_best_practices_for_firefox_fe_engineers/index.html b/files/pt-br/mozilla/firefox/performance_best_practices_for_firefox_fe_engineers/index.html new file mode 100644 index 0000000000..53e23e5f98 --- /dev/null +++ b/files/pt-br/mozilla/firefox/performance_best_practices_for_firefox_fe_engineers/index.html @@ -0,0 +1,328 @@ +--- +title: Performance best practices for Firefox front-end engineers +slug: Mozilla/Firefox/Performance_best_practices_for_Firefox_fe_engineers +translation_of: Mozilla/Firefox/Performance_best_practices_for_Firefox_fe_engineers +--- +<div>{{FirefoxSidebar}}</div> + +<p>This guide will help Firefox developers working on front-end code produce code which is as performant as possible—not just on its own, but in terms of its impact on other parts of Firefox. Always keep in mind the side effects your changes may have, from blocking other tasks, to interfering with other user interface elements.</p> + +<h2 id="Avoid_the_main_thread_where_possible">Avoid the main thread where possible</h2> + +<p>The main thread is where we process user events and do painting. It's also important to note that most of our JavaScript runs on the main thread, so it's easy for script to cause delays in event processing or painting. That means that the more code we can get off of the main thread, the more that thread can respond to user events, paint, and generally be responsive to the user.</p> + +<p>You might want to consider using a {{domxref("Worker")}} if you need to do some computation that can be done off of the main thread. If you need more elevated privileges than a standard worker allows, consider using a {{domxref("ChromeWorker")}}, which is a Firefox-only API which lets you create workers with more elevated privileges.</p> + +<h2 id="Use_requestIdleCallback">Use requestIdleCallback()</h2> + +<p>If you simply cannot avoid doing some kind of long job on the main thread, try to break it up into smaller pieces that you can run when the browser has a free moment to spare, and the user isn't doing anything. You can do that using {{domxref("Window.requestIdleCallback", "requestIdleCallback()")}} and the <a href="/en-US/docs/Web/API/Background_Tasks_API">Cooperative Scheduling of Background Tasks API</a>, and doing it only when we have a free second where presumably the user isn’t doing something.</p> + +<p>See also the blog post <a href="https://hacks.mozilla.org/2016/11/cooperative-scheduling-with-requestidlecallback/">Collective scheduling with requestIdleCallback</a>.</p> + +<p>As of {{bug(1353206)}}, you can also schedule idle events in non-DOM contexts by using <code>Services.tm.idleDispatchToMainThread.</code> See the <code>nsIThreadManager.idl</code> file for more details.</p> + +<h2 id="Hide_your_panels">Hide your panels</h2> + +<p>If you’re adding a new XUL {{XULElem("popup")}} or {{XULElem("panel")}} to a document, set the {{XULAttr("hidden")}} attribute to <code>true</code> by default. By doing so, you cause the binding applied on demand rather than at load time, which makes initial construction of the XUL document faster.</p> + +<h2 id="Get_familiar_with_the_pipeline_that_gets_pixels_to_the_screen">Get familiar with the pipeline that gets pixels to the screen</h2> + +<p>Learn how pixels you draw make their way to the screen. Knowing the path they will take through the various layers of the browser engine will help you optimize your code to avoid pitfalls.</p> + +<p>The rendering process goes through the following steps:<img alt="This is the pipeline that a browser uses to get pixels to the screen." src="https://mdn.mozillademos.org/files/14995/pasted%20image%200.png" style="height: 167px; width: 1093px;"></p> + +<div class="note"> +<p>The above image is used under <a href="https://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a>, courtesy of <a href="https://developers.google.com/web/fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing">this page</a> from our friends at Google, which itself is well worth the read.</p> +</div> + +<div class="note"> +<p>For a very down-to-earth explanation of the Style, Layout, Paint and Composite steps of the pipeline, <a href="https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/">this Hacks blog post</a> does a great job of explaining it.</p> +</div> + +<p>To achieve a 60 FPS frame rate, all of the above has to happen in 16 milliseconds or less, every frame.</p> + +<p>Note that {{domxref("Window.requestAnimationFrame", "requestAnimationFrame()")}} lets you queue up JavaScript to <strong>run right before the style flush occurs</strong>. This allows you to put all of your DOM writes (most importantly, anything that could change the size or position of things in the DOM) just before the style and layout steps of the pipeline, combining all the style and layout calculations into a single batch so it all happens once, in a single frame tick, instead of across multiple frames. See {{anch("Detecting and avoiding synchronous reflow")}} below for more information.</p> + +<p>This also means that {{domxref("Window.requestAnimationFrame", "requestAnimationFrame()")}} is <strong>not a good place</strong> to put queries for layout or style information.</p> + +<h2 id="Detecting_and_avoiding_synchronous_style_flushes">Detecting and avoiding synchronous style flushes</h2> + +<h3 id="What_are_style_flushes">What are style flushes?</h3> + +<p>When CSS is applied to a document (HTML or XUL, it doesn’t matter), the browser does calculations to figure out which CSS styles will apply to each element. This happens the first time the page loads and the CSS is initially applied, but can happen again if JavaScript modifies the DOM.</p> + +<p>JavaScript code might, for example, change DOM node attributes (either directly or by adding or removing classes from elements), and can also add, remove, or delete DOM nodes. Because styles are normally scoped to the entire document, the cost of doing these style calculations is proportional to the number of DOM nodes in the document (and the number of styles being applied).</p> + +<p>It is expected that over time, script will update the DOM, requiring us to recalculate styles. Normally, the changes to the DOM just result in the standard style calculation occurring immediately after the JavaScript has finished running during the 16ms window, inside the "Style" step. That's the ideal scenario.</p> + +<p>However, it's possible for script to do things that force multiple style calculations (or <strong>style flushes</strong>) to occur synchronously during the JavaScript part of the 16 ms window. The more of them there are, the more likely they'll exceed the 16ms frame budget. If that happens, some of them will be postponed until the next frame (or possibly multiple frames, if necessary), this skipping of frames is called <strong>jank</strong>.</p> + +<p>Generally speaking, you force a synchronous style flush any time you query for style information after the DOM has changed within the same frame tick. Depending on whether or not <a href="https://gist.github.com/paulirish/5d52fb081b3570c81e3a">the style information you’re asking for has something to do with size or position</a>, you may also cause a layout recalculation (also referred to as <strong>layout flush</strong> or <strong>reflow</strong>), which is also an expensive step (see {{anch("Detecting and avoiding synchronous reflow")}} below).</p> + +<p>To avoid this: avoid reading style information if you can. If you <em>must</em> read style information, do so at the very beginning of the frame, before any changes have been made to the DOM since the last time a style flush occurred.</p> + +<p>Historically, there hasn't been an easy way of doing this - however, {{bug(1434376)}} has recently landed some ChromeOnly helpers to the window binding to make this simpler.</p> + +<p>If you want to queue up some JavaScript to run after the next "natural" style and layout flush, try:</p> + +<pre class="brush: js">// Suppose we want to get the computed "display" style of some node without +// causing a style flush. We could do it this way: +async function nodeIsDisplayNone(node) { + let display = await window.promiseDocumentFlushed(() => { + // Do _not_ under any circumstances write to the DOM in one of these + // callbacks! + return window.getComputedStyle(node).display; + }); + + return display == "none"; +} +</pre> + +<div class="note"> +<p>See {{anch("Detecting and avoiding synchronous reflow")}} for a more advanced example of getting layout information, and then setting it safely, without causing flushes.</p> +</div> + +<p><code>promiseDocumentFlushed</code> is only available to priviledged script, and should be called on the inner window of a top-level frame. Calling it on the outer window of a subframe is not supported, and calling it from within the inner window of a subframe might cause the callback to fire even though a style and layout flush will still be required. These gotchas should be fixed by {{bug(1441173)}}.</p> + +<p>For now, it is up to you as the consumer of this API to not accidentally write to the DOM within the <code>promiseDocumentFlushed</code> callback. Doing so might cause flushes to occur for other <code>promiseDocumentFlushed</code> callbacks that are scheduled to fire in the same tick of the refresh driver. {{bug(1441168)}} tracks work to make it impossible to modify the DOM within a <code>promiseDocumentFlushed</code> callback.</p> + +<h3 id="Writing_tests_to_ensure_you_don’t_add_more_synchronous_style_flushes">Writing tests to ensure you don’t add more synchronous style flushes</h3> + +<p>Unlike reflow, there isn’t a “observer” mechanism for style recalculations. However, as of Firefox 49, the {{ifattribute("nsIDOMWindowUtils", "elementsRestyled")}} attribute records a count of how many style calculations have occurred for a particular DOM window.</p> + +<p>It should be possible to write a test that gets the <code>nsIDOMWindowUtils</code> for a browser window, records the number of styleFlushes, then <strong>synchronously calls the function</strong> that you want to test, and immediately after checks the styleFlushes attribute again. If the value went up, your code caused synchronous style flushes to occur.</p> + +<p>Note that your test and function <em>must be called synchronously</em> in order for this test to be accurate. If you ever go back to the event loop (by yielding, waiting for an event, etc), style flushes unrelated to your code are likely to run, and your test will give you a false positive.</p> + +<h2 id="Detecting_and_avoiding_synchronous_reflow">Detecting and avoiding synchronous reflow</h2> + +<div class="note"> +<p>This is also sometimes called “sync layout”, "sync layout flushes" or “sync layout calculations”</p> +</div> + +<p><strong>Sync reflow</strong> is a term bandied about a lot, and has negative connotations. It's not unusual for an engineer to have only the vaguest sense of what it is—and to only know to avoid it. This section will attempt to demystify things.</p> + +<p>The first time a document (XUL or HTML) loads, we parse the markup, and then apply styles. Once the styles have been calculated, we then need to calculate where things are going to be placed on the page. This layout step can be seen in the “16ms” pipeline graphic above, and occurs just before we paint things to be composited for the user to see.</p> + +<p>It is expected that over time, script will update the DOM, requiring us to recalculate styles, and then update layout. Normally, however, the changes to the DOM just result in the standard style calculation that occurs immediately after the JavaScript has finished running during the 16ms window.</p> + +<h3 id="Interruptible_reflow">Interruptible reflow</h3> + +<p>Since <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=67752">the early days</a>, Gecko has had the notion of interruptible reflow. This is a special type of <strong>content-only</strong> reflow that checks at particular points whether or not it should be interrupted (usually to respond to user events).</p> + +<p>Because <strong>interruptible reflows can only be interrupted when laying out content, and not chrome UI</strong>, the rest of this section is offered only as context.</p> + +<p>When an interruptible reflow is interrupted, what really happens is that certain layout operations can be skipped in order to paint and process user events sooner.</p> + +<p>When an interruptible reflow is interrupted, the best-case scenario is that all layout is skipped, and the layout operation ends.</p> + +<p>The worst-case scenario is that none of the layout can be skipped despite being interrupted, and the entire layout calculation occurs.</p> + +<p>Reflows that are triggered "naturally" by the 16ms tick are all considered interruptible. Despite not actually being interuptible when laying out chrome UI, striving for interruptible layout is always good practice because uninterruptible layout has the potential to be much worse (see next section).</p> + +<p><strong>To repeat, only interruptible reflows in web content can be interrupted.</strong></p> + +<h3 id="Uninterruptible_reflow">Uninterruptible reflow</h3> + +<p>Uninterruptible reflow is what we want to <strong>avoid at all costs</strong>. Uninterruptible reflow occurs when some DOM node’s styles have changed such that the size or position of one or more nodes in the document will need to be updated, and then <strong>JavaScript asks for the size or position of anything</strong>. Since everything is pending a reflow, the answer isn't available, so everything stalls until the reflow is complete and the script can be given an answer. Flushing layout also means that styles must be flushed to calculate the most up-to-date state of things, so it's a double-whammy.</p> + +<p>Here’s a simple example, cribbed from <a href="http://paulrouget.com/e/fxoshud">this blog post by Paul Rouget</a>:</p> + +<pre class="brush: js">div1.style.margin = "200px"; // Line 1 +var height1 = div1.clientHeight; // Line 2 +div2.classList.add("foobar"); // Line 3 +var height2 = div2.clientHeight; // Line 4 +doSomething(height1, height2); // Line 5</pre> + +<p>At line 1, we’re setting some style information on a DOM node that’s going to result in a reflow - but (at just line 1) it’s okay, because that reflow will happen after the style calculation.</p> + +<p>Note line 2 though - we’re asking for the height of some DOM node. This means that Gecko needs to synchronously calculate layout (and styles) using an uninterruptible reflow in order to answer the question that JavaScript is asking (“What is the <code>clientHeight</code> of <code>div1</code>?”).</p> + +<p>It’s possible for our example to avoid this synchronous, uninterruptible reflow by moving lines 2 and 4 above line 1. Assuming there weren’t any style changes requiring size or position recalculation above line 1, the <code>clientHeight</code> information should be cached since the last reflow, and will not result in a new layout calculation.</p> + +<p>If you can avoid querying for the size or position of things in JavaScript, that’s the safest option—especially because it’s always possible that something earlier in this tick of JavaScript execution caused a style change in the DOM without you knowing it.</p> + +<p>Note that given the same changes to the DOM of a chrome UI document, a single synchronous uninterruptible reflow is no more computationally expensive than an interruptible reflow triggered by the 16ms tick. It is, however, advantageous to strive for reflow to only occur in the one place (the layout step of the 16ms tick) as opposed to multiple times during the 16ms tick (which has a higher probability of running through the 16ms budget).</p> + +<h3 id="How_do_I_avoid_triggering_uninterruptible_reflow">How do I avoid triggering uninterruptible reflow?</h3> + +<p>Here's a <a href="https://gist.github.com/paulirish/5d52fb081b3570c81e3a">list of things that JavaScript can ask for that can cause uninterruptible reflow</a>, to help you think about the problem. Note that some items in the list may be browser-specific or subject to change, and that an item not occurring explicitly in the list doesn't mean it doesn't cause reflow. For instance, at time of writing accessing <code>event.rangeOffset</code> <a href="https://searchfox.org/mozilla-central/rev/6bfadf95b4a6aaa8bb3b2a166d6c3545983e179a/dom/events/UIEvent.cpp#215-226">triggers reflow</a> in Gecko, and does not occur in the earlier link. If you're unsure whether something causes reflow, check!</p> + +<p>Note how abundant the properties in that first list are. This means that when enumerating properties on DOM objects (e.g. elements/nodes, events, windows, etc.) <strong>accessing the value of each enumerated property will almost certainly (accidentally) cause uninterruptible reflow</strong>, because a lot of DOM objects have one or even several properties that do so.</p> + +<p>If you require size or position information, you have a few options.</p> + +<p>{{bug(1434376)}} has recently landed a helper in the window binding to make it easier for priviledged code to queue up JavaScript to run when we know that the DOM is not dirty, and size, position, and style information is cheap to query for.</p> + +<p>Here's an example:</p> + +<pre class="brush: js">async function matchWidth(elem, otherElem) { + let width = await window.promiseDocumentFlushed(() => { + // Do _not_ under any circumstances write to the DOM in one of these + // callbacks! + return elem.clientWidth; + }); + + requestAnimationFrame(() => { + otherElem.style.width = `${width}px`; + }); +}</pre> + +<p>Please see the section on <code>promiseDocumentFlushed</code> in {{anch("Detecting and avoiding synchronous style flushes")}} for more information on how to use the API.</p> + +<p>Note that queries for size and position information are only expensive if the DOM has been written to. Otherwise, we're doing a cheap look-up of cached information. If we work hard to move all DOM writes into <code>requestAnimationFrame()</code>, then we can be sure that all size and position queries are cheap.</p> + +<p>It's also possible (though less infallible than <code>promiseDocumentFlushed</code>) to queue JavaScript to run very soon after the frame has been painted, where the likelihood is highest that the DOM has not been written to, and layout and style information queries are still cheap. This can be done by using a <code>setTimeout</code> or dispatching a runnable inside a <code>requestAnimationFrame</code> callback, for example:</p> + +<pre class="brush: js">requestAnimationFrame(() => { + setTimeout(() => { + // This code will be run ASAP after Style and Layout information have + // been calculated and the paint has occurred. Unless something else + // has dirtied the DOM very early, querying for style and layout information + // here should be cheap. + }, 0); +}); + +// Or, if you are running in privileged JavaScript and want to avoid the timer overhead, +// you could also use: + +requestAnimationFrame(() => { + Services.tm.dispatchToMainThread(() => { + // Same-ish as above. + }); +});</pre> + +<div class="note"> +<p>This also implies that<strong> </strong><em>querying for size and position information</em> in <code>requestAnimationFrame()</code> has a high probability of causing a synchronous reflow.</p> +</div> + +<h3 id="Other_useful_methods">Other useful methods</h3> + +<p>Below you'll find some suggestions for other methods which may come in handy when you need to do things without incurring synchronous reflow. These methods generally return the most-recently-calculated value for the requested value, which means the value may no longer be current, but may still be "close enough" for your needs. Unless you need precisely accurate information, they can be valuable tools in your performance toolbox.</p> + +<h4 id="nsIDOMWindowUtils.getBoundsWithoutFlushing">nsIDOMWindowUtils.getBoundsWithoutFlushing()</h4> + +<p><code>getBoundsWithoutFlushing()</code> does exactly what its name suggests: it allows you to get the bounds rectangle for a DOM node contained in a window without flushing layout. This means that the information you get is potentially out-of-date, but allows you to avoid a sync reflow. If you can make do with information that may not be quite current, this can be helpful.</p> + +<h4 id="nsIDOMWindowUtils.getRootBounds">nsIDOMWindowUtils.getRootBounds()</h4> + +<p>Like <code>getBoundsWithoutFlushing()</code>, <code>getRootBounds()</code> lets you get the dimensions of the window without risking a synchronous reflow.</p> + +<h4 id="nsIDOMWindowUtils.getScrollXY">nsIDOMWindowUtils.getScrollXY()</h4> + +<p>Returns the window's scroll offsets without taking the chance of causing a sync reflow.</p> + +<h3 id="Writing_tests_to_ensure_you_don’t_add_more_unintentional_reflow">Writing tests to ensure you don’t add more unintentional reflow</h3> + +<p>The interface {{source("docshell/base/nsIReflowObserver.idl", "nsIReflowObserver")}} lets us detect both interruptible and uninterruptible reflows. A number of tests have been written that exercise various functions of the browser (<a href="http://searchfox.org/mozilla-central/rev/78cefe75fb43195e7f5aee1d8042b8d8fc79fc70/browser/base/content/test/general/browser_tabopen_reflows.js">opening tabs</a>, <a href="http://searchfox.org/mozilla-central/source/browser/base/content/test/general/browser_windowopen_reflows.js">opening windows</a>) and ensure that we don’t add new uninterruptible reflows accidentally while those actions occur.</p> + +<p>You should add tests like this for your feature if you happen to be touching the DOM.</p> + +<h3 id="Detecting_over-painting_with_paint_flashing">Detecting over-painting with paint flashing</h3> + +<p>Painting is, in general, cheaper than both style calculation and layout calculation; still, the more you can avoid, the better. Generally speaking, the larger an area that needs to be repainted, the longer it takes. Similarly, the more things that need to be repainted, the longer it takes.</p> + +<p>Our graphics team has added a handy feature to help you detect when and where paints are occurring. This feature is called “paint flashing,” and it can be activated for both web content and the browser chrome. Paint flashing tints each region being painted with a randomly selected color so that it’s more easy to see what on the screen is being painted.</p> + +<ul> + <li>You can activate paint flashing for browser chrome by setting <code>nglayout.debug.paint_flashing_chrome</code> to <code>true</code>.</li> + <li>You can activate paint flashing for web content by setting <code>nglayout.debug.paint_flashing</code> to <code>true</code>.</li> +</ul> + +<p>After enabling these, exercise your function and see what’s painting. See a lot of flashing / colors? That means a lot of painting is going on. The worst case is called <strong>over-painting</strong>. This is when you draw multiple times over the same space. Unless transparency is involved, all but the last painting will be overwritten, becoming unnecessary. If you can find ways to avoid doing this, you can save substantial time.</p> + +<p>Keep in mind that painting occurs on the main thread. Remember, too, that the goal is to have as little happen on the main thread as possible. That means that finding and removing (when possible) over-painting is a good place to start reducing your burden on the main thread, which will in turn improve performance.</p> + +<p>Perhaps you’re animating something that requires a repaint? For example, transitioning the {{cssxref("background-color")}} of a DOM node from red to blue will result in a repaint for every frame of the animation, and paint flashing will reveal that. Consider using a different animation that can be accelerated by the GPU. These GPU-accelerated animations occur off of the main thread, and have a much higher probability of running at 60 FPS (see the section below called {{anch("Use the compositor for animations")}} for further details).</p> + +<p>Perhaps you’re touching some DOM nodes in such a way that unexpected repaints are occurring in an area that don’t need it. Best to investigate and try to remove those as best you can. Sometimes, our graphics layer invalidates regions in ways that might not be clear to you, and a section outside of the thing that just repainted will also repaint. Sometimes this can be addressed by ensuring that the thing changing is on its own layer (though this comes at a memory cost). You can put something on its own layer by setting its {{cssxref("z-index")}}, or by setting the {{cssxref("will-change")}} on the node, though this should be used sparingly.</p> + +<p>If you’re unsure why something is repainting, consider talking to our always helpful graphics team in the <a href="https://chat.mozilla.org/#/room/#gfx:mozilla.org">gfx room</a> on <a href="https://wiki.mozilla.org/Matrix">Matrix</a>, and they can probably advise you. Note that a significant number of the graphics team members are in the US Eastern Time zone (UTC-5 or UTC-4 during Daylight Saving Time), so let that information guide your timing when you ask questions in the <a href="https://chat.mozilla.org/#/room/#gfx:mozilla.org">gfx room</a> .</p> + +<h2 id="Adding_nodes_using_DocumentFragments">Adding nodes using DocumentFragments</h2> + +<p>Sometimes you need to add several DOM nodes as part of an existing DOM tree. For example, when using XUL {{XULElem("menupopup")}}s, you often have script which dynamically inserts {{XULElem("menuitem")}}s. Inserting items into the DOM has a cost. If you're adding a number of children to a DOM node in a loop, it's often more efficient to batch them into a single insertion by creating a {{domxref("DocumentFragment")}}, adding the new nodes to that, then inserting the <code>DocumentFragment</code> as a child of the desired node.</p> + +<p>A <code>DocumentFragment</code> is maintained in memory outside the DOM itself, so changes don't cause reflow. The API is straightforward:</p> + +<ol> + <li>Create the <code>DocumentFragment</code> by calling {{domxref("Document.createDocumentFragment()")}}.</li> + <li>Create each child element (by calling {{domxref("Document.createElement()")}} for example), and add each one to the fragment by calling {{domxref("Node.appendChild", "DocumentFragment.appendChild()")}}.</li> + <li>Once the fragment is populated, append the fragment to the DOM by calling {{domxref("Node.appendChild", "appendChild()")}} on the parent element for the new elements.</li> +</ol> + +<p>This example has been cribbed from <a href="https://davidwalsh.name/documentfragment">davidwalsh’s blog post</a>:</p> + +<pre class="brush: js">// Create the fragment + +var frag = document.createDocumentFragment(); + +// Create numerous list items, add to fragment + +for(var x = 0; x < 10; x++) { + var li = document.createElement("li"); + li.innerHTML = "List item " + x; + frag.appendChild(li); +} + +// Mass-add the fragment nodes to the list + +listNode.appendChild(frag); +</pre> + +<p>The above is strictly cheaper than individually adding each node to the DOM.</p> + +<h2 id="The_Gecko_profiler_add-on_is_your_friend">The Gecko profiler add-on is your friend</h2> + +<p>The Gecko profiler is your best friend when diagnosing performance problems and looking for bottlenecks. There’s plenty of excellent documentation on MDN about the Gecko profiler:</p> + +<ul> + <li><a href="/en-US/docs/Mozilla/Performance/Reporting_a_Performance_Problem">Basic instructions for gathering and sharing a performance profile</a></li> + <li><a href="/en-US/docs/Mozilla/Performance/Profiling_with_the_Built-in_Profiler">Advanced profile analysis</a></li> +</ul> + +<h2 id="Don’t_guess—measure.">Don’t guess—measure.</h2> + +<p>If you’re working on a performance improvement, this should go without saying: ensure that what you care about is actually improving by measuring before and after.</p> + +<p>Landing a speculative performance enhancement is the same thing as landing speculative bug fixes—these things need to be tested. Even if that means instrumenting a function with a {{jsxref("Date.now()")}} recording at the entrance, and another <code>Date.now()</code> at the exit points in order to measure processing time changes.</p> + +<p>Prove to yourself that you’ve actually improved something by measuring before and after.</p> + +<h3 id="Use_the_performance_API">Use the performance API</h3> + +<p>The <a href="/en-US/docs/Web/API/Performance_API">performance API</a> is very useful for taking high-resolution measurements. This is usually much better than using your own hand-rolled timers to measure how long things take. You access the API through {{domxref("Window.performance")}}.</p> + +<p>Also, the Gecko profiler back-end is in the process of being modified to expose things like markers (from {{domxref("Performance.mark", "window.performance.mark()")}}).</p> + +<h2 id="Use_the_compositor_for_animations">Use the compositor for animations</h2> + +<p>Performing animations on the main thread should be treated as <strong>deprecated</strong>. Avoid doing it. Instead, animate using {{domxref("Element.animate()")}}. See the article <a href="https://hacks.mozilla.org/2016/08/animating-like-you-just-dont-care-with-element-animate/">Animating like you just don't care</a> for more information on how to do this.</p> + +<h2 id="Explicitly_define_start_and_end_animation_values">Explicitly define start and end animation values</h2> + +<p>Some optimizations in the animation code of Gecko are based on an expectation that the <code>from</code> (0%) and the <code>to</code> (100%) values will be explicitly defined in the <code>@keyframes</code> definition. Even though these values may be inferred through the use of initial values or the cascade, the offscreen animation optimizations are dependent on the explicit definition. See <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1419096#c18">this comment</a> and a few previous comments on that bug for more information.</p> + +<h2 id="Use_IndexedDB_for_storage">Use IndexedDB for storage</h2> + +<p><a href="en-US/docs/Web/HTML/Using_the_application_cache">AppCache</a> and <a href="/en-US/docs/Web/API/Storage/LocalStorage">LocalStorage</a> are synchronous storage APIs that will block the main thread when you use them. Avoid them at all costs!</p> + +<p><a href="/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB">IndexedDB</a> is preferable, as the API is asynchronous (all disk operations occur off of the main thread), and can be accessed from web workers.</p> + +<p>IndexedDB is also arguably better than storing and retrieving JSON from a file—particularly if the JSON encoding or decoding is occurring on the main thread. IndexedDB will do JavaScript object serialization and deserialization for you using the <a href="/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm">structured clone algorithm</a>, meaning that you can stash <a href="/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#Supported_types">things like maps, sets, dates, blobs, and more</a>, without having to do conversions for JSON compatibility.</p> + +<p>A Promise-based wrapper for IndexedDB, <a href="http://searchfox.org/mozilla-central/source/toolkit/modules/IndexedDB.jsm">IndexedDB.jsm</a>, is available for chrome code.</p> + +<h2 id="Test_on_weak_hardware">Test on weak hardware</h2> + +<p>For the folks paid to work on Firefox, we tend to have pretty powerful hardware for development. This is great, because it reduces build times, and means we can do our work faster.</p> + +<p>We should remind ourselves that the majority of our user base is unlikely to have similar hardware. Look at the <a href="https://metrics.mozilla.com/firefox-hardware-survey/">Firefox Hardware Report</a> to get a sense of what our users are working with. Test on slower machines to make it more obvious to yourself if what you’ve written impacts the performance of the browser.</p> + +<h2 id="Consider_loading_scripts_with_the_subscript_loader_asynchronously">Consider loading scripts with the subscript loader asynchronously</h2> + +<p>If you've ever used the subscript loader, you might not know that it can load scripts asynchronously, and return a Promise once they're loaded. For example:</p> + +<pre class="brush: js">Services.scriptloader.loadSubScriptWithOptions(myScriptURL, { async: true }).then(() => { + console.log("Script at " + myScriptURL + " loaded asynchronously!"); +});</pre> diff --git a/files/pt-br/mozilla/firefox/privacidade/index.html b/files/pt-br/mozilla/firefox/privacidade/index.html new file mode 100644 index 0000000000..dd6979435e --- /dev/null +++ b/files/pt-br/mozilla/firefox/privacidade/index.html @@ -0,0 +1,16 @@ +--- +title: Privacidade +slug: Mozilla/Firefox/Privacidade +translation_of: Mozilla/Firefox/Privacy +--- +<div>{{FirefoxSidebar}}</div><ul> + <li><a href="/pt-BR/Firefox/Privacidade/Proteção_de_rastreamento">Proteção de rastreamento</a></li> +</ul> + +<div style="display: none;" class="pcl_tooltip_box">Image already added +<div class="arrow border"> </div> + +<div class="arrow"> </div> +</div> + +<div style="display: none;" class="pcl_global_mask"> </div> diff --git a/files/pt-br/mozilla/firefox/privacidade/proteção_de_rastreamento/index.html b/files/pt-br/mozilla/firefox/privacidade/proteção_de_rastreamento/index.html new file mode 100644 index 0000000000..438c240001 --- /dev/null +++ b/files/pt-br/mozilla/firefox/privacidade/proteção_de_rastreamento/index.html @@ -0,0 +1,84 @@ +--- +title: Proteção de rastreamento +slug: Mozilla/Firefox/Privacidade/Proteção_de_rastreamento +translation_of: Mozilla/Firefox/Privacy/Tracking_Protection +--- +<div>{{FirefoxSidebar}}</div> + +<h2 id="O_que_é_proteção_de_rastreamento">O que é proteção de rastreamento?</h2> + +<p><span id="result_box" lang="pt"><span>Começando na versão 42, o Firefox Desktop e o Firefox para Android incluem proteção de rastreamento embutida.</span> <span>Nas janelas de Navegação Privada (guias, no Firefox para Android), o Firefox bloqueará o conteúdo carregado de domínios que acompanham os usuários em todos os sites.</span></span></p> + +<p><span id="result_box" lang="pt"><span>Alguns conteúdos bloqueados fazem parte do layout da página e os usuários podem notar problemas de layout onde o Firefox bloqueou essas cargas.</span> <span>Às vezes, os usuários não percebem nada, mas a grade da página pode funcionar de modo que outros elementos da página se deslizem para preencher os buracos deixados pelos elementos bloqueados.</span></span></p> + +<p><span id="result_box" lang="pt"><span>Quando o Firefox bloqueia o conteúdo, ele registrará uma mensagem no Console da Web como este:</span></span></p> + +<pre>The resource at "http://some/url" was blocked because tracking protection is enabled.</pre> + +<p><span id="result_box" lang="pt"><span>Note que, com o Firefox para Android, você pode acessar a saída do console usando o depurador remoto.</span></span></p> + +<p><span id="result_box" lang="pt"><span>A interface do usuário do Firefox indicará aos usuários quando o conteúdo foi bloqueado e habilitá-los a desbloqueá-lo para a sessão atual se eles escolherem.</span> <span>Os usuários também poderão desativar a proteção de rastreamento inteiramente se eles escolherem.</span></span></p> + +<h2 id="Como_o_Firefox_escolhe_o_que_bloquear">Como o Firefox escolhe o que bloquear?</h2> + +<p><span id="result_box" lang="pt"><span>O conteúdo é bloqueado com base no domínio do qual ele deve ser carregado.</span></span></p> + +<p><span id="result_box" lang="pt"><span>O Firefox enviará uma lista de sites que foram identificados como envolvidos no rastreamento de sites de usuários.</span> <span>Quando a proteção de rastreamento é ativada, o Firefox bloqueará o conteúdo de sites na lista.</span></span></p> + +<p><span id="result_box" lang="pt"><span>Os sites que rastreiam usuários são mais comuns os sites de publicidade e análise de terceiros.</span></span></p> + +<h2 id="O_que_isso_significa_para_o_seu_site">O que isso significa para o seu site?</h2> + +<p><span id="result_box" lang="pt"><span>Mais obviamente, isso significa que quando a proteção de rastreamento está habilitada:</span></span></p> + +<ul> + <li><span id="result_box" lang="pt"><span>O conteúdo veiculado a partir de rastreadores de terceiros não será visível para usuários</span></span></li> + <li><span id="result_box" lang="pt"><span>Seu site não poderá usar serviços de publicidade ou analítica de terceiros que se envolvam em rastreamento</span></span></li> +</ul> + +<p><span id="result_box" lang="pt"><span>Mais sutilmente, se outras partes do seu site dependerem de rastreadores sendo carregados, essas partes também serão quebradas quando a proteção de rastreamento estiver ativada.</span> <span>Por exemplo, se o seu site incluir um retorno de chamada que é executado quando o conteúdo de um site de rastreamento é carregado, o retorno de chamada não será executado.</span></span></p> + +<p><span id="result_box" lang="pt"><span>Por exemplo, você não deve usar o Google Analytics da seguinte maneira:</span></span></p> + +<pre class="brush:html example-bad"><a href="http://www.example.com" onclick="trackLink('http://www.example.com', event);">Visit example.com</a> +<script> +function trackLink(url,event) { + event.preventDefault(); + ga('send', 'event', 'outbound', 'click', url, { + 'transport': 'beacon', + 'hitCallback': function() { + document.location = url; + } + }); +} +</script></pre> + +<p><span id="result_box" lang="pt"><span>Em vez disso, você deve considerar verificar quando o objeto "ga", para o Google Analytics, foi inicializado ou não:</span></span></p> + +<pre class="brush:html example-good"><a href="http://www.example.com" onclick="trackLink('http://www.example.com', event);">Visit example.com</a> +<script> +function trackLink(url,event) { + event.preventDefault(); + if (window.ga && <span class="pl-smi">ga</span>.loaded) { + ga('send', 'event', 'outbound', 'click', url, { + 'transport': 'beacon', + 'hitCallback': function() { document.location = url; } + }); + } else { + document.location = url; + } +} +</script> +</pre> + +<p><span id="result_box" lang="pt"><span>Mais informações sobre esta técnica estão disponíveis em</span></span> <a href="https://hacks.mozilla.org/2016/01/google-analytics-privacy-and-event-tracking/">Google Analytics, Privacy, and Event Tracking</a>.</p> + +<p><span id="result_box" lang="pt"><span>Observe que, dependendo de um terceiro dessa maneira, não é uma boa prática, pois isso significa que seu site pode ser quebrado se o terceiro estiver lento ou não disponível, ou se o rastreador estiver bloqueado por um complemento.</span></span></p> + +<div class="pcl_tooltip_box" style="display: none;">Image already added +<div class="arrow border"> </div> + +<div class="arrow"> </div> +</div> + +<div class="pcl_global_mask" style="display: none;"> </div> diff --git a/files/pt-br/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedtracker/index.html b/files/pt-br/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedtracker/index.html new file mode 100644 index 0000000000..0813b1fd2c --- /dev/null +++ b/files/pt-br/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedtracker/index.html @@ -0,0 +1,44 @@ +--- +title: 'Bloquado: Solicitações de acesso de armazenamento de rastreadores' +slug: Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedTracker +tags: + - Armazenamento + - Cookies + - Erros + - Política de acesso a armazenamento + - Rastreamento +translation_of: Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedTracker +--- +<div>{{FirefoxSidebar}}</div> + +<h2 id="Mensagem">Mensagem</h2> + +<p>Firefox:</p> + +<pre class="syntaxbox"><span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">O pedido para acessar cookies ou armazenamento em "X" foi bloqueado porque veio de um rastreador e o bloqueio de conteúdo está ativado.</span></span></span></span> +</pre> + +<h2 id="Oque_deu_errado">Oque deu errado?</h2> + +<p>A requisição para accessar os cookies ou armazenamento foi bloqueada por que o navegador identificou <span class="tlid-translation translation" lang="pt"><span title="">como proveniente de um rastreador e o bloqueio de conteúdo está ativado</span></span>.</p> + +<p>A permissão pode ser modificada ou removida por:</p> + +<ul> + <li>Indo a <em>Preferências > </em>Bloqueio de Conteúdo e + + <ul> + <li>adicionando uma exceção com o botão <em>Gerenciar Exceções</em>…</li> + <li>escolhendo o Bloqueio de conteúdo personalizado e desmarcar a caixa de seleção Rastreador</li> + </ul> + </li> +</ul> + +<p>se a resolução que foi bloqueada não precisar de autenticação, você consegue resolver a aviso de erro adicinando um atributo <code>crossorigin="anonymous"</code> para o elemento relevante.</p> + +<h2 id="Veja_também">Veja também</h2> + +<ul> + <li><a href="https://support.mozilla.org">Bloqueio de conteúdo</a> em <a href="https://support.mozilla.org">support.mozilla.org</a></li> + <li><a href="/en-US/docs/Web/HTML/CORS_settings_attributes">O atributo <code>crossorigin</code></a></li> +</ul> diff --git a/files/pt-br/mozilla/firefox/privacy/storage_access_policy/errors/index.html b/files/pt-br/mozilla/firefox/privacy/storage_access_policy/errors/index.html new file mode 100644 index 0000000000..a1e1f54a75 --- /dev/null +++ b/files/pt-br/mozilla/firefox/privacy/storage_access_policy/errors/index.html @@ -0,0 +1,24 @@ +--- +title: Errors +slug: Mozilla/Firefox/Privacy/Storage_access_policy/Errors +tags: + - Cookies + - Errors + - NeedsTranslation + - Storage + - TopicStub + - storage access policy +translation_of: Mozilla/Firefox/Privacy/Storage_access_policy/Errors +--- +<div>{{FirefoxSidebar}}</div> + +<p>This page lists the errors that can be raised due to Firefox's anti-tracking functionality, governed by the <a href="/en-US/docs/Mozilla/Firefox/Privacy/Storage_access_policy">Storage access policy</a>. You can find further information about them by clicking on the links below:</p> + +<p>A request to access cookies or storage was blocked because</p> + +<ul> + <li><a href="/en-US/docs/Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedByPermission">of custom cookie permission</a></li> + <li><a href="/en-US/docs/Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedTracker">it came from a tracker and content blocking is enabled</a></li> + <li><a href="/en-US/docs/Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedAll">we are blocking all storage access requests</a></li> + <li><a href="/en-US/docs/Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedForeign">we are blocking all third-party storage access requests and content blocking is enabled</a></li> +</ul> diff --git a/files/pt-br/mozilla/firefox/privacy/storage_access_policy/index.html b/files/pt-br/mozilla/firefox/privacy/storage_access_policy/index.html new file mode 100644 index 0000000000..c86f213323 --- /dev/null +++ b/files/pt-br/mozilla/firefox/privacy/storage_access_policy/index.html @@ -0,0 +1,263 @@ +--- +title: 'Storage access policy: Block cookies from trackers' +slug: Mozilla/Firefox/Privacy/Storage_access_policy +tags: + - NeedsTranslation + - Privacy + - TopicStub + - storage access policy + - tracking protection +translation_of: Mozilla/Firefox/Privacy/Storage_access_policy +--- +<div>{{FirefoxSidebar}}</div> + +<p class="summary">Firefox includes a new storage access policy that blocks cookies and other site data from third-party tracking resources. This policy is designed as an alternative to the <a href="/en-US/docs/Mozilla/Cookies_Preferences">older cookie policies</a>, which have been available in Firefox for many years. This policy protects against cross-site tracking while minimizing the site breakage associated with traditional cookie blocking. This article explains how the policy works and how you can test it.</p> + +<h2 id="Testing_in_Firefox">Testing in Firefox</h2> + +<p>This cookie policy has been available in Firefox since version 63. This documentation describes the policy that we intend to ship to Firefox Release users, but may not match what is implemented in the current Release version of Firefox. That's because we document new aspects of the policy as soon as they land in <a href="https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly">Firefox Nightly</a>, our pre-release channel. Firefox Nightly may also contain experimental features that we don't yet plan to ship to Release users; experimental features will not be included in this documentation, but may nevertheless impact the functionality of domains classified as trackers.</p> + +<p>We recommend sites test with <a href="https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly">Firefox Nightly</a>, as this includes the newest version of our protections. As described above, note that Nightly may include additional protections that end up getting removed or changed before they reach our Release users. We’ll keep this page updated with the newest information as we strengthen our protections.</p> + +<p>These protections are on by default in Nightly. The cookie policy can be enabled in other versions of Firefox through the <a href="https://support.mozilla.org/en-US/kb/content-blocking">Content Blocking settings</a> (these steps will vary by version; the linked documentation includes a dropdown to select the appropriate Firefox version).</p> + +<h3 id="Report_Broken_Sites">Report Broken Sites</h3> + +<p>If you find a website broken as a result of this change, file a bug under the Tracking Protection component within the Firefox product on <a href="https://bugzilla.mozilla.org/enter_bug.cgi?assigned_to=nobody%40mozilla.org&blocked=1480137&bug_file_loc=http%3A%2F%2F&bug_ignored=0&bug_severity=normal&bug_status=NEW&cf_fx_iteration=---&cf_fx_points=---&cf_platform_rel=---&cf_status_firefox62=---&cf_status_firefox63=---&cf_status_firefox64=---&cf_status_firefox_esr60=---&cf_status_geckoview62=---&cf_tracking_firefox62=---&cf_tracking_firefox63=---&cf_tracking_firefox64=---&cf_tracking_firefox_esr60=---&cf_tracking_firefox_relnote=---&cf_tracking_geckoview62=---&component=Tracking%20Protection&contenttypemethod=list&contenttypeselection=text%2Fplain&defined_groups=1&flag_type-203=X&flag_type-37=X&flag_type-41=X&flag_type-5=X&flag_type-607=X&flag_type-721=X&flag_type-737=X&flag_type-748=X&flag_type-787=X&flag_type-799=X&flag_type-800=X&flag_type-803=X&flag_type-835=X&flag_type-846=X&flag_type-855=X&flag_type-864=X&flag_type-914=X&flag_type-916=X&flag_type-929=X&flag_type-930=X&flag_type-933=X&form_name=enter_bug&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=Unspecified&priority=--&product=Firefox&rep_platform=Unspecified&target_milestone=---&version=unspecified">Bugzilla</a>. Alternatively you can report broken sites directly in Firefox by clicking "Report a Problem" in the Content Blocking section of the <a href="https://support.mozilla.org/en-US/kb/control-center-site-privacy-and-security-firefox">Control Center</a> (this shortcut may not be available in all versions of Firefox).</p> + +<h2 id="Tracking_protection_explained">Tracking protection explained</h2> + +<p>How does Firefox determine which resources are tracking resources?</p> + +<p>Firefox uses the Tracking Protection list to determine which resources are tracking resources. The Tracking Protection list is <a href="https://github.com/disconnectme/disconnect-tracking-protection/issues">maintained by Disconnect</a>. When the list is applied in Firefox, we make two important changes:</p> + +<ul> + <li>First, we only use the "Basic Protection" version of the list, which <a href="https://github.com/mozilla-services/shavar-prod-lists#blacklist">excludes some categories of trackers</a>. In the future, we may expand our protections to use the "Strict Protection" version of the list.</li> + <li>Second, Firefox uses an additional "<a href="https://github.com/mozilla-services/shavar-prod-lists/blob/master/disconnect-entitylist.json">entity list</a>", which prevents <a href="https://github.com/mozilla-services/shavar-prod-lists#entity-list">domains from being classified as trackers when they are loaded on a top-level site owned by the same organization</a>.</li> +</ul> + +<p>Firefox uses the built-in <a href="https://support.mozilla.org/en-US/kb/tracking-protection">Tracking Protection</a> URL classifier to determine which resources match the tracking protection list. Domains are matched against the list in accordance with the <a href="https://developers.google.com/safe-browsing/v4/urls-hashing#suffixprefix-expressions">SafeBrowsing v4 specification</a>. Specifically, we check the exact hostname of the resource against the list, as well as the last four hostnames formed by starting with the last five components and successively removing the leading component. Consider the following examples:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Hostname on the list</th> + <th scope="col">Hostname of resource</th> + <th scope="col">Matched</th> + </tr> + </thead> + <tbody> + <tr> + <td><code>example.com</code></td> + <td><code>example.com</code></td> + <td>Yes</td> + </tr> + <tr> + <td><code>example.com</code></td> + <td><code>a.b.example.com</code></td> + <td>Yes</td> + </tr> + <tr> + <td><code>blah.example.com</code></td> + <td><code>example.com</code></td> + <td>No</td> + </tr> + <tr> + <td><code>a.b.example.com</code></td> + <td><code>c.d.example.com</code></td> + <td>No</td> + </tr> + <tr> + <td><code>blah.example.com</code></td> + <td><code>foo.blah.example.com</code></td> + <td>Yes</td> + </tr> + </tbody> +</table> + +<h2 id="What_does_the_storage_access_policy_block">What does the storage access policy block?</h2> + +<p>The storage access policy blocks resources identified as trackers from accessing their cookies and other site storage when they are loaded in a third-party context. This prevents those resources from retrieving tracking identifiers stored in cookies or site storage and using them to identify users across visits to multiple first parties. Specifically, Firefox does this by imposing the following restrictions:</p> + +<p>Cookies:</p> + +<ul> + <li>Block {{httpheader("Cookie")}} request headers and ignore {{httpheader("Set-Cookie")}} response headers.</li> + <li>Return an empty string for calls to {{domxref("Document.cookie")}} and ignore requests to set cookies via <code>Document.cookie</code>.</li> +</ul> + +<p>DOM Storage:</p> + +<ul> + <li><a href="/en-US/docs/Web/API/Web_Storage_API">localStorage</a>: <code><a href="/en-US/docs/Web/API/Window/localStorage">Window.localStorage</a></code> is <code>null</code>. Thus, attempts to read and write using this object will throw a <code>TypeError</code> exception.</li> + <li><a href="/en-US/docs/Web/API/Web_Storage_API">sessionStorage</a>: read and write attempts are permitted.</li> + <li><a href="/en-US/docs/Web/API/IndexedDB_API">IndexedDB</a>: read and write attempts throw a <code>SecurityError</code> exception.</li> +</ul> + +<p>Messaging and Workers:</p> + +<ul> + <li><a href="/en-US/docs/Web/API/Broadcast_Channel_API">Broadcast Channel</a>: attempts to create a new {{domxref("BroadcastChannel")}} will throw a <code>SecurityError</code> exception.</li> + <li><a href="/en-US/docs/Web/API/Web_Workers_API">Shared Worker</a>: attempts to create a new {{domxref("SharedWorker")}} will throw a <code>SecurityError</code> exception.</li> + <li><a href="/en-US/docs/Web/API/Service_Worker_API">Service Worker</a>: attempts to create a new {{domxref("ServiceWorker")}} will throw a <code>SecurityError</code> exception.</li> +</ul> + +<p>DOM Cache:</p> + +<ul> + <li>Calls to {{domxref("CacheStorage")}} will always reject with a <code>SecurityError</code>.</li> +</ul> + +<p>Browser caches:</p> + +<ul> + <li>The <a href="/en-US/docs/Mozilla/HTTP_cache">HTTP cache</a> and the Image cache are partitioned for tracking resources, such that each top-level origin will have a separate partition and tracking resources on different top-level origins will be cached separate from each other.</li> +</ul> + +<p>Network connections:</p> + +<ul> + <li><a href="https://wiki.mozilla.org/Security/Server_Side_TLS#Session_Resumption">TLS sessions</a> will not be resumed using a session ticket when an HTTPS connection is made to an embedded third-party resource that is classified as a tracker.</li> + <li><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x#Persistent_connections">HTTP connection reuse</a> by domains classified as trackers is limited to requests that occur under the same top-level origin. For example, a request for content from tracker.example on news.example will not reuse an HTTP connection with a request for content from tracker.example on shopping.example or with requests that occur when tracker.example is visited directly (i.e., as a first party).</li> +</ul> + +<h3 id="What_is_not_blocked_by_the_policy">What is not blocked by the policy?</h3> + +<ol> + <li>This policy does not currently restrict third-party storage access for resources that are not classified as tracking resources. We may choose to apply additional restrictions to third-party storage access in the future.</li> + <li>The restrictions applied by the policy will not prevent third-party scripts classified as tracking resources from accessing storage in the main context of the page. These scripts can continue to use storage scoped to the top-level origin.</li> + <li>Origins classified as trackers will have access to their own storage when they are loaded in a first-party context.</li> + <li>Cross-origin resources loaded from the same eTLD+1 as the top-level context will still have access to their storage.</li> + <li>Origins normally classified as trackers will <a href="https://github.com/mozilla-services/shavar-prod-lists#entity-list">not be blocked if the top-level page origin is determined to be from the same organization as them</a>.</li> +</ol> + +<h2 id="Storage_access_grants">Storage access grants</h2> + +<p>In order to improve web compatibility and permit third-party integrations that require storage access, Firefox will grant storage access scoped to the first party for a particular third-party origin as described in this section. Currently, Firefox includes some web compatibility heuristics that grant storage access to third-party resources classified as trackers when a user interacts with those third parties. We do this when we expect that not granting access would cause the web page to break. We also support an initial implementation of the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API">Storage Access API</a>, through which embedded {{htmlelement("iframe")}}s can request storage access by calling {{domxref("Document.requestStorageAccess()")}}. Although both of these approaches provide the same level of storage access, we recommend third parties switch to using the Storage Access API in order to guarantee their access to storage.</p> + +<h3 id="Automatic_storage_access_upon_interaction">Automatic storage access upon interaction</h3> + +<p>In order to improve web compatibility, Firefox currently includes some heuristics to grant storage access automatically to third parties that receive user interaction. These heuristics are intended to allow some third-party integrations that are common on the web to continue to function. They are intended to be temporary and will be removed in a future version of Firefox. They should not be relied upon for current and future web development.</p> + +<p>Third-party storage access may be granted to resources that have been classified as tracking resources when a user gesture triggers a pop-up window that has <a href="/en-US/docs/Web/API/Window/opener">opener access</a> to the originating document. When that occurs, there are two possible ways a third-party origin can be granted access:</p> + +<ul> + <li>The origin of the resource that is initially loaded in the pop-up window is granted storage access on the opener document if that origin has received user interaction as a first party within the past 30 days.</li> + <li>After the initial resource is loaded in the pop-up window, the window may go through a series of redirects to other hosts. If a user interacts with the pop-up window following a redirect, the origin of the content loaded in the pop-up window is given storage access on the opener document.</li> +</ul> + +<h3 id="Scope_of_storage_access">Scope of storage access</h3> + +<p>When storage access is granted, it is scoped to the origin of the opener document or subdomains of that origin. Access that is granted on the subdomain of an origin does not extend to the top-level origin. As an example, if a resource from <code>tracker.example</code> is granted storage access on <code>foo.example.com</code>, then <code>tracker.example</code> will be able to access its cookies on <code>bar.foo.example.com</code> but not <code>example.com</code>. Instead, if <code>tracker.example</code> were granted access on <code>example.com</code> it would be able to access its storage on <code>bar.foo.example.com</code>, <code>foo.example.com</code>, and <code>example.com</code>.</p> + +<p>When storage access is granted to <code>tracker.example</code> on <code>example.com</code>, all resources loaded from <code>tracker.example</code> on any top-level document loaded from <code>example.com</code> are immediately given storage access. This includes all resources loaded in the main context of the page, embedded <code><iframe></code>s, and resources loaded within embedded <code><iframe></code>s. Storage access is not extended to other resources loaded on <code>example.com</code> (e.g. <code>other-tracker.example</code>), nor to other first parties on which <code>tracker.example</code> is embedded (e.g. <code>example.org</code>).</p> + +<p>Storage access grants extend into the first level of nested contexts, but no further. This means that <code><iframe></code>s embedded in the main context of the page and loaded from a domain classified as a tracker will have full access to all storage locations accessible through JavaScript. Similarly, requests for resources loaded in <code><iframe></code>s embedded in the main context of the page will have access to HTTP cookies. However, further nested contexts, including but not limited to those from the origin classified as a tracker, will not be granted storage access.</p> + +<p>Consider the following embedding scenarios on a top-level page loaded from <code>example.com</code> on which <code>tracker.example</code> has been granted storage access.</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Embedding</th> + <th scope="col">tracker.example resource storage access</th> + </tr> + </thead> + <tbody> + <tr> + <td>An image is loaded from <code>tracker.example</code> and embedded in the main context of <code>example.com</code>.</td> + <td>HTTP: Yes<br> + JS: N/A</td> + </tr> + <tr> + <td><code>example.com</code> embeds an <code><iframe></code> from <code>example.org</code>. That <code><iframe></code> goes on to load an image from <code>tracker.example</code>.</td> + <td>HTTP: Yes<br> + JS: N/A</td> + </tr> + <tr> + <td><code>example.com</code> embeds an <code><iframe></code> from <code>example.org</code>. That <code><iframe></code> goes on to embed an <code><iframe></code> from <code>tracker.example</code>.</td> + <td>HTTP: Yes<br> + JS: No</td> + </tr> + <tr> + <td><code>example.com</code> embeds an <code><iframe></code> from <code>tracker.example</code>.</td> + <td>HTTP: Yes<br> + JS: Yes</td> + </tr> + <tr> + <td><code>example.com</code> embeds an <code><iframe></code> from <code>example.com</code> (same origin). The nested <code><iframe></code> embeds an <code><iframe></code> from <code>tracker.example</code>.</td> + <td>HTTP: Yes<br> + JS: No</td> + </tr> + </tbody> +</table> + +<h3 id="Storage_access_expiration">Storage access expiration</h3> + +<p>The storage access grant expires after 30 days. Domains classified as tracking resources may be granted third-party storage access on multiple first parties, and the storage permission for each party expires independently. The above heuristics will also serve to extend the lifetime of a third-party storage permission on origins that have already been granted access. Each time the heuristic is activated, or a success call to the Storage Access API is made, the pre-existing storage access expiration will be extended by 30 days, counting from the time the previous access was granted.</p> + +<p>Please note that in the future we expect to make changes to how long storage access will remain valid for. As mentioned before, the way to know that you will be able to use storage as a third-party going forward will be using the Storage Access API.</p> + +<h2 id="Debugging">Debugging</h2> + +<p>We encourage site owners to test their sites, particularly those that rely on third-party content integrations. We’ve added several new features to Firefox to make testing easier.</p> + +<h3 id="Developer_Tools_notifications">Developer Tools notifications</h3> + +<p>The <a href="/en-US/docs/Tools/Network_Monitor">Network Monitor</a> in Firefox Developer Tools now includes an indicator for all resource requests that have been classified as tracking resources. This indicator is shown as a shield icon in the domain column. In the sample image below, <code>trackertest.org</code> is classified as a tracking resource, while the request to example.com is not.</p> + +<p><img alt="network requests in Firefox devtools indicating which ones are tracking resources with a small shield icon" src="https://mdn.mozillademos.org/files/16181/Screen_Shot_2018-09-21_at_10.34.22_AM.png" style="border-style: solid; border-width: 1px; display: block; height: 57px; margin: 0px auto; width: 600px;"></p> + +<h3 id="Adding_custom_domains_to_the_Tracking_Protection_list">Adding custom domains to the Tracking Protection list</h3> + +<p>Curious how things will work if a third-party domain on your site were classified as a tracker? We’ve added a preference that allows you to add custom domains to the Tracking Protection URL classifier. To do so:</p> + +<ol> + <li>Type <code>about:config</code> in your address bar. If you are presented with a page that warns you "This may void your warranty!", click "I accept the risk!"</li> + <li>Right click on the next page and click "New" > "String".</li> + <li>For the preference name enter "urlclassifier.trackingAnnotationTable.testEntries".</li> + <li>For the preference value enter comma separated origins that you’d like to have classified as trackers. E.g. "example.net,example.org".</li> +</ol> + +<div class="warning"> +<p><strong>Warning</strong>: Be sure to remove these entries after you have finished testing.</p> +</div> + +<h2 id="FAQ">FAQ</h2> + +<p>This cookie policy has the potential to lead to site breakage, but has been designed to allow common third-party integrations to continue to work while preventing cross-site tracking. In this section we describe the functionality you can expect in different integration scenarios.</p> + +<h3 id="Will_this_storage_access_policy_block_ads_from_displaying_on_my_website">Will this storage access policy block ads from displaying on my website?</h3> + +<p>No — this feature only restricts access to cookies and site data that can be used to track users across websites. Blocking tracking identifiers does not prevent the display of advertisements.</p> + +<h3 id="I_use_a_third-party_analytics_service_that_is_classified_as_a_tracker._Will_I_still_receive_analytics_data">I use a third-party analytics service that is classified as a tracker. Will I still receive analytics data?</h3> + +<p>This depends on how the third-party analytics service is implemented. Third-party analytics providers will no longer be able to user their third-party storage to collect data. This means that providers using cookies which are scoped to their third-party domain, or local storage and other site data stored under their origin, will no longer have access to those identifiers across other websites.</p> + +<p>If these services are embedded into the main context of the page, they can continue to use first-party cookies and site storage to track users across page visits on that specific first-party domain.</p> + +<h3 id="I_use_third-party_services_for_social_login_like_and_share_button_integration._Will_my_users_still_be_able_to_make_use_of_these_services">I use third-party services for social login, like, and share button integration. Will my users still be able to make use of these services?</h3> + +<p>This depends on how the social integration is implemented. We expect that many of the popular social integrations will continue to function as they do under Firefox’s current cookie policy with some minor differences in the user experience.</p> + +<p>A social content provider that is classified as a tracker will not have access to their third-party cookies when the user first visits a new first party. Thus, the user may appear logged out to the service despite being logged in when they visit the provider’s website directly. Depending on the type of integration, the user may have to take some action to interact with the social content provider before the provider is given access to their cookies. For example:</p> + +<ul> + <li>For social login, the user may have to click a login button on the first party.</li> + <li>For social like or share buttons, the user will have to first interact with the button in a logged-out state. Once they do, many social content providers will prompt them to log in.</li> +</ul> + +<p>After these interactions, the provider will receive third-party storage access if they prompt the user in a way that is captured by the storage access activation heuristics described above. These providers should consider switching to explicitly request storage access through the Storage Access API as soon as possible. An <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1469714">initial implementation of this API</a> is currently available in Nightly.</p> + + + +<h3 id="I_use_third-party_pixels_and_other_tools_to_measure_the_effectiveness_of_my_ad_campaigns._Will_I_still_be_able_to_measure_the_conversion_rate_of_my_ads">I use third-party pixels and other tools to measure the effectiveness of my ad campaigns. Will I still be able to measure the conversion rate of my ads?</h3> + +<p>This depends on how the third party has implemented the measurement tool, but generally ad conversion measurement will be more difficult. Consider the following examples:</p> + +<ol> + <li>You run an ad on a social media website that is seen several times by a user, but never clicked. That user later visits your website, which includes a conversion tracking tag from the same social media website. This type of conversion is often referred to as a “view-through conversion.” Since the social media website does not have access to their third-party storage, they will not recognize the user as the same user that saw the advertisements on their website and the conversion will not be tracked. We expect that most view-through conversion tracking techniques will no longer work, including those offered by display networks.</li> + <li>You run an ad on a display network or social media website that is clicked by a user. That user lands on your website, which includes a conversion tracking tag from the same website that displayed your ad. This type of conversion is often referred to as a “click-through conversion.” Since the social media site or display network will not have access to their third-party storage, they will not recognize the user as the same user that saw the advertisements on their website and the conversion will not be tracked. We expect that this version of click-through conversion will no longer work.</li> + <li>You run an ad that appears on a social media website. A user clicks on your advertisement and is taken to a landing page that contains a conversion tracking tag from the third-party network. On the social media website, the network annotates the advertisement landing page URL with a query parameter that signals that the visit was the result of a click on an advertisement. On your website, the display network’s tag checks the URL query parameters and saves any ad tracking parameters to first-party storage. If a user later completes a conversion event, the network’s tag checks first-party storage to determine which click (or clicks) was responsible for the visit. We expect that click-through conversion implemented in this way will continue to work.</li> +</ol> diff --git a/files/pt-br/mozilla/firefox/releases/1.5/index.html b/files/pt-br/mozilla/firefox/releases/1.5/index.html new file mode 100644 index 0000000000..3b1f9243dc --- /dev/null +++ b/files/pt-br/mozilla/firefox/releases/1.5/index.html @@ -0,0 +1,106 @@ +--- +title: Firefox 1.5 para desenvolvedores +slug: Mozilla/Firefox/Releases/1.5 +translation_of: Mozilla/Firefox/Releases/1.5 +--- +<div>{{FirefoxSidebar}}</div><p>Based on the <a href="/en-US/docs/Gecko" title="en-US/docs/Gecko">Gecko</a> 1.8 engine, Firefox 1.5 improved its already best in class standards support, and provided new capabilities to enable the next generation of web applications. Firefox 1.5 features improved support for CSS2 and CSS3, APIs for scriptable and programmable 2D graphics through <a href="/en-US/docs/SVG" title="en-US/docs/SVG">SVG</a> 1.1 and <a class="internal" href="/en-US/docs/HTML/Canvas" title="en-US/docs/HTML/Canvas"><code><canvas></code></a>, <a href="/en-US/docs/XForms" title="en-US/docs/XForms">XForms</a> and XML events, as well as many DHTML, JavaScript, and DOM enhancements.</p> + +<h2 id="Developer_Tools">Developer Tools</h2> + +<p>Several tools and browser extensions are available to help developers support Firefox 1.5.</p> + +<ul> + <li><a href="/en-US/docs/DOM_Inspector" title="en-US/docs/DOM_Inspector">DOM Inspector</a>, a tool that allows developers to inspect and modify documents without having to edit the document directly. DOM Inspector is available as part of the Custom install option in Firefox 1.5 under Developer Tools.</li> + <li>JavaScript console, a tool to write and test JavaScript code as well as view JavaScript and CSS errors on a page.</li> + <li>View page source, with syntax highlighting and find features.</li> + <li><a class="link-https" href="https://addons.mozilla.org/extensions/showlist.php?application=firefox&category=Developer%20Tools">Browser extensions</a> including the <a class="external" href="http://www.joehewitt.com/software/firebug/">FireBug</a>, <a href="/en-US/docs/Web_Developer_Extension_(external)" title="en-US/docs/Web_Developer_Extension_(external)">Web Developer toolbar</a>, <a href="/en-US/docs/Live_HTTP_Headers_(external)" title="en-US/docs/Live_HTTP_Headers_(external)">Live HTTP Headers</a>, <a href="/en-US/docs/HTML_Validator_(external)" title="en-US/docs/HTML_Validator_(external)">HTML Validator</a> and many more.</li> +</ul> + +<p><strong>Note:</strong> Some extensions do not currently support Firefox 1.5, and will be automatically disabled.</p> + +<h2 id="Overview">Overview</h2> + +<p>Some of the new features in Firefox 1.5:</p> + +<h3 id="Web_site_and_application_developers">Web site and application developers</h3> + +<dl> + <dt><a href="/en-US/docs/SVG_In_HTML_Introduction" title="en-US/docs/SVG_In_HTML_Introduction">SVG In XHTML Introduction</a></dt> + <dd>Learn how to use SVG in XHTML pages and how to use JavaScript and CSS to manipulate the picture in the same way you would script regular XHTML. See also <a href="/en-US/docs/SVG_in_Firefox" title="en-US/docs/SVG_in_Firefox">SVG in Firefox</a> to learn about the status and known problems of SVG implementation in Firefox.</dd> + <dt><a href="/en-US/docs/HTML/Canvas/Drawing_Graphics_with_Canvas" title="en-US/docs/Drawing_Graphics_with_Canvas">Drawing Graphics with Canvas</a></dt> + <dd>Learn about the new <code><canvas></code> tag and how to draw graphs and other objects in Firefox.</dd> + <dt><a href="/en-US/docs/CSS/Using_CSS_multi-column_layouts" title="en-US/docs/CSS3_Columns">CSS3 Columns</a></dt> + <dd>Learn about the new support for automatic multi-column text layout as proposed for <a href="/en-US/docs/CSS/CSS3" title="CSS3">CSS3</a>.</dd> + <dt><a href="/en-US/docs/Using_Firefox_1.5_caching" title="en-US/docs/Using_Firefox_1.5_caching">Using Firefox 1.5 caching</a></dt> + <dd>Learn about <code>bfcache</code> and how it speeds up back and forward navigation.</dd> +</dl> + +<h3 id="XUL_and_Extension_Developers">XUL and Extension Developers</h3> + +<dl> + <dt><a href="/en-US/docs/Building_an_Extension" title="en-US/docs/Building_an_Extension">Building an Extension</a></dt> + <dd>This tutorial will take you through the steps required to build a very basic extension for Firefox. Also see <a class="external" href="http://kb.mozillazine.org/Getting_started_with_extension_development">another tutorial on MozillaZine knowledge base</a>, which demonstrates the new features of the Extension Manager in 1.5 that make creating a new extension even easier.</dd> + <dt><a href="/en-US/docs/XPCNativeWrapper" title="en-US/docs/XPCNativeWrapper">XPCNativeWrapper</a></dt> + <dd><code>XPCNativeWrapper</code> is a way to wrap up an object so that it's <a href="/en-US/docs/Safely_accessing_content_DOM_from_chrome" title="en-US/docs/Safely_accessing_content_DOM_from_chrome">safe to access from privileged code</a>. It can be used in all Firefox versions, though the behavior changed somewhat starting with Firefox 1.5 (Gecko 1.8).</dd> + <dt><a href="/en-US/docs/Preferences_System" title="en-US/docs/Preferences_System">Preferences System</a></dt> + <dd>Learn about the new widgets that allow you to create Options windows easier using less JavaScript code.</dd> + <dt><a href="/en-US/docs/International_characters_in_XUL_JavaScript" title="en-US/docs/International_characters_in_XUL_JavaScript">International characters in XUL JavaScript</a></dt> + <dd>XUL JavaScript files can now contain non-ASCII characters.</dd> + <dt><a href="/en-US/docs/Tree_Widget_Changes" title="en-US/docs/Tree_Widget_Changes">Tree API changes</a></dt> + <dd>The interfaces for accessing XUL <code><tree></code> elements have changed.</dd> + <dt><a href="/en-US/docs/XUL_Changes_for_Firefox_1.5" title="en-US/docs/XUL_Changes_for_Firefox_1.5">XUL Changes for Firefox 1.5</a></dt> + <dd>Summary of XUL changes. See also <a href="/en-US/docs/Adapting_XUL_Applications_for_Firefox_1.5" title="en-US/docs/Adapting_XUL_Applications_for_Firefox_1.5">Adapting XUL Applications for Firefox 1.5</a>.</dd> +</dl> + +<h4 id="Networking-related_changes">Networking-related changes</h4> + +<ul> + <li>Certificate prompts can now be overridden on a per-channel basis. This works by setting an interface requestor as an <a href="/en-US/docs/nsIChannel" title="en-US/docs/nsIChannel">nsIChannel</a>'s notificationCallbacks and giving out an interface for <a href="/en-US/docs/NsIBadCertListener" title="en-US/docs/NsIBadCertListener">nsIBadCertListener</a>.</li> + <li>nsIWebBrowserPersist's listeners can now implement <a href="/en-US/docs/XPCOM_Interface_Reference/nsIInterfaceRequestor" title="en-US/docs/nsIInterfaceRequestor">nsIInterfaceRequestor</a>::GetInterface and will get an opportunity to provide all interfaces that channels might ask for, including <a href="/en-US/docs/NsIProgressEventSink" title="en-US/docs/NsIProgressEventSink">nsIProgressEventSink</a> (not too useful, redundant with <a href="/en-US/docs/nsIWebProgressListener" title="en-US/docs/nsIWebProgressListener">nsIWebProgressListener</a>). Useful interfaces here include <a href="/en-US/docs/NsIChannelEventSink" title="en-US/docs/NsIChannelEventSink">nsIChannelEventSink</a> and <a href="/en-US/docs/NsIBadCertListener" title="en-US/docs/NsIBadCertListener">nsIBadCertListener</a>.</li> + <li>Extensions or other necko consumers, including XMLHttpRequest, can set a Cookie header explicitly, and necko will not replace it. Stored cookies will be merged with the explicitly set header, in a way that the explicit header will override the stored cookies.</li> +</ul> + +<h2 id="New_End_user_Features">New End user Features</h2> + +<h3 id="User_Experience">User Experience</h3> + +<ul> + <li><strong>Faster browser navigation</strong> with improvements to back and forward button performance.</li> + <li><strong>Drag and drop reordering for browser tabs.</strong></li> + <li><strong>Answers.com is added to the search engine list</strong> for dictionary lookup.</li> + <li><strong>Improvements to product usability</strong> including descriptive error pages, redesigned options menu, RSS discovery, and "Safe Mode" experience.</li> + <li><strong>Better accessibility support</strong> including DHTML accessibility.</li> + <li><strong>Report a broken Web site wizard</strong> to report Web sites that are not working in Firefox.</li> + <li><strong>Better support for Mac OS X</strong> (10.2 and greater) including profile migration from Safari and Mac Internet Explorer.</li> +</ul> + +<h3 id="Security_and_Privacy">Security and Privacy</h3> + +<ul> + <li><strong>Automated update</strong> to streamline product upgrades. Notification of an update is more prominent, and updates to Firefox may now be half a megabyte or smaller. Updating extensions has also improved.</li> + <li><strong>Improvements to popup blocking.</strong></li> + <li><strong>Clear Private Data</strong> feature provides an easy way to quickly remove personal data through a menu item or keyboard shortcut.</li> +</ul> + +<h3 id="Support_for_open_Web_standards">Support for open Web standards</h3> + +<p>Firefox support for Web standards continues to lead the industry with consistent cross-platform implementations for:</p> + +<ul> + <li>Hypertext Markup Language (<a href="/en-US/docs/HTML" title="en-US/docs/HTML">HTML</a>) and Extensible Hypertext Markup Language (<a href="/en-US/docs/XHTML" title="en-US/docs/XHTML">XHTML</a>): <a class="external" href="http://www.w3.org/TR/html401/">HTML 4.01</a> and <a class="external" href="http://www.w3.org/TR/xhtml1/">XHTML 1.0/1.1</a></li> + <li>Cascading Style Sheets (<a href="/en-US/docs/CSS" title="en-US/docs/CSS">CSS</a>): <a class="external" href="http://www.w3.org/TR/REC-CSS1">CSS Level 1</a>, <a class="external" href="http://www.w3.org/TR/REC-CSS2">CSS Level 2</a> and parts of <a class="external" href="http://www.w3.org/Style/CSS/current-work.html">CSS Level 3</a></li> + <li>Document Object Model (<a href="/en-US/docs/DOM" title="en-US/docs/DOM">DOM</a>): <a class="external" href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/">DOM Level 1</a>, <a class="external" href="http://www.w3.org/DOM/DOMTR#dom2">DOM Level 2</a> and parts of <a class="external" href="http://www.w3.org/DOM/DOMTR#dom3">DOM Level 3</a></li> + <li>Mathematical Markup Language: <a class="external" href="http://www.w3.org/Math/">MathML Version 2.0</a></li> + <li>Extensible Markup Language (<a href="/en-US/docs/XML" title="en-US/docs/XML">XML</a>): <a class="external" href="http://www.w3.org/TR/REC-xml">XML 1.0</a>, <a class="external" href="http://www.w3.org/TR/REC-xml-names/">Namespaces in XML</a>, <a class="external" href="http://www.w3.org/TR/xml-stylesheet/">Associating Style Sheets with XML Documents 1.0</a>, <a class="external" href="http://lists.w3.org/Archives/Public/www-xml-linking-comments/2001AprJun/att-0074/01-NOTE-FIXptr-20010425.htm">Fragment Identifier for XML</a></li> + <li>XSL Transformations (<a href="/en-US/docs/XSLT" title="en-US/docs/XSLT">XSLT</a>): <a class="external" href="http://www.w3.org/TR/xslt">XSLT 1.0</a></li> + <li>XML Path Language (<a href="/en-US/docs/XPath" title="en-US/docs/XPath">XPath</a>): <a class="external" href="http://www.w3.org/TR/xpath">XPath 1.0</a></li> + <li>Resource Description Framework (<a href="/en-US/docs/RDF" title="en-US/docs/RDF">RDF</a>): <a class="external" href="http://www.w3.org/RDF/">RDF</a></li> + <li>Simple Object Access Protocol (SOAP): <a class="external" href="http://www.w3.org/TR/SOAP/">SOAP 1.1</a></li> + <li><a href="/en-US/docs/JavaScript" title="en-US/docs/JavaScript">JavaScript</a> 1.6, based on <a href="/en-US/docs/ECMAScript" title="en-US/docs/ECMAScript">ECMA-262</a>, revision 3: <a class="external" href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMA-262</a></li> +</ul> + +<p>Firefox 1.5 supports the following data transport protocols (HTTP, FTP, SSL, TLS, and others), multilingual character data (Unicode), graphics (GIF, JPEG, PNG, SVG, and others) and the latest version of the world's most popular scripting language, <a href="/en-US/docs/New_in_JavaScript_1.6" title="en-US/docs/New_in_JavaScript_1.6">JavaScript 1.6</a>.</p> + +<h2 id="Changes_since_Firefox_1.0">Changes since Firefox 1.0</h2> + +<p>Many changes have been introduced into Firefox since it was first released on November 9, 2004. Firefox has progressed with many new features and bug fixes. A detailed list of changes is available from <a class="external" href="http://www.squarefree.com/burningedge/releases/1.5-comprehensive.html">squarefree.com</a>.</p> diff --git a/files/pt-br/mozilla/firefox/releases/3/index.html b/files/pt-br/mozilla/firefox/releases/3/index.html new file mode 100644 index 0000000000..b0552cef09 --- /dev/null +++ b/files/pt-br/mozilla/firefox/releases/3/index.html @@ -0,0 +1,273 @@ +--- +title: Firefox 3 for developers +slug: Mozilla/Firefox/Releases/3 +tags: + - Firefox 3 + - NeedsTranslation + - TopicStub +translation_of: Mozilla/Firefox/Releases/3 +--- +<div>{{FirefoxSidebar}}</div><p>If you're a developer trying to get a handle on all the new features in Firefox 3, this is the perfect place to start. This article provides a list of the new articles covering features added to Firefox 3. While it doesn't necessarily cover every little change, it will help you learn about the major improvements.</p> + +<h2 id="New_developer_features_in_Firefox_3" name="New_developer_features_in_Firefox_3">New developer features in Firefox 3</h2> + +<h3 id="For_web_site_and_application_developers" name="For_web_site_and_application_developers">For web site and application developers</h3> + +<dl> + <dt><a href="/en-US/docs/Updating_web_applications_for_Firefox_3" title="en-US/docs/Updating_web_applications_for_Firefox_3">Updating web applications for Firefox 3</a></dt> + <dd>Provides information about changes you may need to make to your web site or web application to take advantage of new features in Firefox 3.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Online_and_offline_events" title="en-US/docs/Online_and_offline_events">Online and offline events</a></dt> + <dd>Firefox 3 supports WHATWG online and offline events, which let applications and extensions detect whether or not there's an active Internet connection, as well as to detect when the connection goes up and down.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Web-based_protocol_handlers" title="en-US/docs/Web-based_protocol_handlers">Web-based protocol handlers</a></dt> + <dd>You can now register web applications as protocol handlers using the <code>navigator.registerProtocolHandler()</code> method.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Drawing_text_using_a_canvas" title="en-US/docs/Drawing_text_using_a_canvas">Drawing text using a canvas</a></dt> + <dd>You can now draw text in a canvas using a non-standardized API supported by Firefox 3.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Canvas_tutorial/Transformations#Transforms" title="en-US/docs/Canvas_tutorial/Transformations#Transforms">Transform support for canvas</a></dt> + <dd>Firefox now supports the <code>transform()</code> and <code>setTransform()</code> methods on canvases.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Using_microformats" title="en-US/docs/Using_microformats">Using microformats</a></dt> + <dd>Firefox now has APIs for working with microformats.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Drag_and_drop_events" title="en-US/docs/Drag_and_drop_events">Drag and drop events</a></dt> + <dd>Firefox 3 supports new events that are sent to the source node for a drag operation when the drag begins and ends.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Focus_management_in_HTML" title="en-US/docs/Focus_management_in_HTML">Focus management in HTML</a></dt> + <dd>The new HTML 5 <code>activeElement</code> and <code>hasFocus</code> attributes are supported.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Offline_resources_in_Firefox" title="en-US/docs/Offline_resources_in_Firefox">Offline resources in Firefox</a></dt> + <dd>Firefox now lets web applications request that resources be cached to allow the application to be used while offline.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/CSS_improvements_in_Firefox_3" title="en-US/docs/CSS_improvements_in_Firefox_3">CSS improvements in Firefox 3</a></dt> + <dd>Firefox 3 features a number of improvements in its CSS support.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/DOM_improvements_in_Firefox_3" title="en-US/docs/DOM_improvements_in_Firefox_3">DOM improvements in Firefox 3</a></dt> + <dd>Firefox 3 offers a number of new features in Firefox 3's DOM implementation, including support for several Internet Explorer extensions to the DOM.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/New_in_JavaScript_1.8" title="en-US/docs/New_in_JavaScript_1.8">JavaScript 1.8 support</a></dt> + <dd>Firefox 3 offers JavaScript 1.8.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/EXSLT" title="en-US/docs/EXSLT">EXSLT support</a></dt> + <dd>Firefox 3 provides support for a substantial subset of the <a href="/en-US/docs/EXSLT" title="en-US/docs/EXSLT">EXSLT</a> extensions to <a href="/en-US/docs/XSLT" title="en-US/docs/XSLT">XSLT</a>.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/SVG_improvements_in_Firefox_3" title="en-US/docs/SVG_improvements_in_Firefox_3">SVG improvements in Firefox 3</a></dt> + <dd>SVG support in Firefox 3 has been upgraded significantly, with support for over two dozen new filters, several new elements and attributes, and other improvements.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Animated_PNG_graphics" title="en-US/docs/Animated_PNG_graphics">Animated PNG graphics</a></dt> + <dd>Firefox 3 supports the animated PNG (APNG) image format.</dd> +</dl> + +<h3 id="For_XUL_and_extension_developers" name="For_XUL_and_extension_developers">For XUL and extension developers</h3> + +<h4 id="Notable_changes_and_improvements" name="Notable_changes_and_improvements">Notable changes and improvements</h4> + +<dl> + <dt><a href="/en-US/docs/Updating_extensions_for_Firefox_3" title="en-US/docs/Updating_extensions_for_Firefox_3">Updating extensions for Firefox 3</a></dt> + <dd>Provides a guide to the things you'll need to do to update your extension to work with Firefox 3.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/XUL_improvements_in_Firefox_3" title="en-US/docs/XUL_improvements_in_Firefox_3">XUL improvements in Firefox 3</a></dt> + <dd>Firefox 3 offers a number of new XUL elements, including new sliding scales, the date and time pickers, and spin buttons.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Templates_in_Firefox_3" title="en-US/docs/Templates_in_Firefox_3">Templates in Firefox 3</a></dt> + <dd>Templates have been significantly improved in Firefox 3. The key improvement allows the use of custom query processors to allow data sources other than RDF to be used.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Extension_Versioning,_Update_and_Compatibility#Securing_Updates" title="en-US/docs/Extension_Versioning,_Update_and_Compatibility#Securing_Updates">Securing updates</a></dt> + <dd>In order to provide a more secure add-on upgrade path for users, add-ons are now required to provide a secure method for obtaining updates before they can be installed. Add-ons hosted at <a class="external" href="http://addons.mozilla.org">AMO</a> automatically provide this. Any add-ons installed that do not provide a secure update method when the user upgrades to Firefox 3 will be automatically disabled. Firefox will however continue to check for updates to the extension over the insecure path and attempt to install any update offered (installation will fail if the update also fails to provide a secure update method).</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Places_Developer_Guide" title="en-US/docs/Places_migration_guide">Places migration guide</a></dt> + <dd>An article about how to update an existing extension to use the Places API.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Download_Manager_improvements_in_Firefox_3" title="en-US/docs/Download_Manager_improvements_in_Firefox_3">Download Manager improvements in Firefox 3</a></dt> + <dd>The Firefox 3 Download Manager features new and improved APIs, including support for multiple progress listeners.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/XPCOM_Interface_Reference/Using_nsILoginManager" title="en-US/docs/Using_nsILoginManager">Using nsILoginManager</a></dt> + <dd>The Password Manager has been replaced by the new Login Manager.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/XBL/XBL_1.0_Reference/Elements#binding" title="en-US/docs/XBL/XBL_1.0_Reference/Elements#binding">Embedding XBL bindings</a></dt> + <dd>You can now use the <code>data:</code> URL scheme from chrome code to embed XBL bindings directly instead of having them in separate XML files.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Localizing_extension_descriptions" title="en-US/docs/Localizing_extension_descriptions">Localizing extension descriptions</a></dt> + <dd>Firefox 3 offers a new method for localizing add-on metadata. This lets the localized details be available as soon as the add-on has been downloaded, as well as when the add-on is disabled.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Localization_and_Plurals" title="en-US/docs/Localization_and_Plurals">Localization and Plurals</a></dt> + <dd>Firefox 3 adds the new PluralForm module, which provides tools to aid in correctly pluralizing words in multiple localizations.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Theme_changes_in_Firefox_3" title="en-US/docs/Theme_changes_in_Firefox_3">Theme changes in Firefox 3</a></dt> + <dd>Notes and information of use to people who want to create themes for Firefox 3.</dd> +</dl> + +<h4 id="New_components_and_functionality" name="New_components_and_functionality">New components and functionality</h4> + +<dl> + <dt><a href="/en-US/docs/Toolkit_API/FUEL" title="en-US/docs/FUEL">FUEL Library</a></dt> + <dd>FUEL is about making it easier for extension developers to be productive, by minimizing some of the XPCOM formality and adding some "modern" JavaScript ideas.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Places" title="en-US/docs/Places">Places</a></dt> + <dd>The history and bookmarks APIs have been completely replaced by the new <a href="/en-US/docs/Places" title="en-US/docs/Places">Places</a> API.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/nsIIdleService" title="en-US/docs/nsIIdleService">Idle service</a></dt> + <dd>Firefox 3 offers the new {{Interface("nsIIdleService")}} interface, which lets extensions determine how long it's been since the user last pressed a key or moved their mouse.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/nsIZipWriter" title="en-US/docs/nsIZipWriter">ZIP writer</a></dt> + <dd>The new {{Interface("nsIZipWriter")}} interface lets extensions create ZIP archives.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Full_page_zoom" title="en-US/docs/Full_page_zoom">Full page zoom</a></dt> + <dd>Firefox 3 improves the user experience by offering full page zoom in addition to text-only zoom.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Interfacing_with_the_XPCOM_cycle_collector" title="en-US/docs/Interfacing_with_the_XPCOM_cycle_collector">Interfacing with the XPCOM cycle collector</a></dt> + <dd>XPCOM code can now take advantage of the cycle collector, which helps ensure that unused memory gets released instead of leaking.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/The_Thread_Manager" title="en-US/docs/The_Thread_Manager">The Thread Manager</a></dt> + <dd>Firefox 3 provides the new {{Interface("nsIThreadManager")}} interface, along with new interfaces for threads and thread events, which provides a convenient way to create and manage threads in your code.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/JavaScript_code_modules" title="en-US/docs/JavaScript_modules">JavaScript modules</a></dt> + <dd>Firefox 3 now offers a new shared code module mechanism that lets you easily create modules in JavaScript that can be loaded by extensions and applications for use, much like shared libraries.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/nsIJSON" title="en-US/docs/nsIJSON">The <code>nsIJSON</code> interface</a></dt> + <dd>Firefox 3 offers the new {{Interface("nsIJSON")}} interface, which offers high-performance encoding and decoding of <a href="/en-US/docs/JSON" title="en-US/docs/JSON">JSON</a> strings.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/XPCOM_Interface_Reference/nsIParentalControlsService" title="en-US/docs/nsIParentalControlsService">The nsIParentalControlsService interface</a></dt> + <dd>Firefox 3 now supports the Microsoft Windows Vista parental controls feature, and allows code to interact with it.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Using_content_preferences" title="en-US/docs/Using_content_preferences">Using content preferences</a></dt> + <dd>Firefox 3 includes a new service for getting and setting arbitrary site-specific preferences that extensions as well as core code can use to keep track of their users' preferences for individual sites.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/Monitoring_plugins" title="en-US/docs/Monitoring_plugins">Plug-in Monitoring</a></dt> + <dd>A new component of the plugin system is now available to measure how long it takes plugins (e.g., Macromedia Flash) to execute their calls.</dd> +</dl> + +<h4 id="Fixed_bugs" name="Fixed_bugs">Fixed bugs</h4> + +<dl> + <dt><a href="/en-US/docs/Notable_bugs_fixed_in_Firefox_3" title="en-US/docs/Notable_bugs_fixed_in_Firefox_3">Notable bugs fixed in Firefox 3</a></dt> + <dd>This article provides information about bugs that have been fixed in Firefox 3.</dd> +</dl> + +<h2 id="New_features_for_end_users" name="New_features_for_end_users">New features for end users</h2> + +<h3 id="User_experience" name="User_experience">User experience</h3> + +<ul> + <li><strong>Easier password management.</strong> An information bar at the top of the browser window now appears to allow you to save passwords after a successful login.</li> + <li><strong>Simplified add-on installation.</strong> You can now install extensions from third-party download sites in fewer clicks, thanks to the removal of the add-on download site whitelist.</li> + <li><strong>New Download Manager.</strong> The download manager makes it easier to locate your downloaded files.</li> + <li><strong>Resumable downloads.</strong> You can now resume downloads after restarting the browser or resetting your network connection.</li> + <li><strong>Full page zoom.</strong> From the View menu and using keyboard shortcuts, you can now zoom in and out on the content of entire pages -- this scales not just the text but the layout and images as well.</li> + <li><strong>Tab scrolling and quickmenu.</strong> Tabs are easier to locate with the new tab scrolling and tab quickmenu features.</li> + <li><strong>Save what you were doing.</strong> Firefox 3 prompts you to see if you'd like to save your current tabs when you exit Firefox.</li> + <li><strong>Optimized Open in Tabs behavior.</strong> Opening a folder of bookmarks in tabs now appends the new tabs instead of replacing the existing ones.</li> + <li><strong>Easier to resize location and search bars.</strong> You can now easily resize the location and search bars using a simple resize handle between them.</li> + <li><strong>Text selection improvements.</strong> You can now select multiple ranges of text using the Control (Command on Macintosh) key. Double-clicking and dragging now selects in "word-by-word" mode. Triple-clicking selects an entire paragraph.</li> + <li><strong>Find toolbar.</strong> The Find toolbar now opens with the current selection.</li> + <li><strong>Plugin management.</strong> Users can now disable individual plugins in the Add-on Manager.</li> + <li><strong>Integration with Windows Vista.</strong> Firefox's menus now display using Vista's native theme.</li> + <li><strong>Integration with Mac OS X.</strong> Firefox now supports <a class="external" href="http://growl.info/">Growl</a> for notifications of completed downloads and available updates.</li> + <li><strong>Star button.</strong> The new star button in the location bar lets you quickly add a new bookmark with a single click. A second click lets you file and tag your new bookmark.</li> + <li><strong>Tags.</strong> You can now associate keywords with your bookmarks to easily sort them by topic.</li> + <li><strong>Location bar and auto-complete.</strong> Type the title or tag of a page in the location bar to quickly find the site you were looking for in your history and bookmarks. Favicons, bookmark, and tag indicators help you see where the results are coming from.</li> + <li><strong>Smart Bookmarks folder.</strong> Firefox's new Smart Bookmarks folder offers quick access to your recently bookmarked and tagged places, as well as pages you visit frequently.</li> + <li><strong>Bookmarks and History Organizer.</strong> The new unified bookmarks and history organizer lets you easily search your history and bookmarks with multiple views and smart folders for saving your frequent searches.</li> + <li><strong>Web-based protocol handlers.</strong> Web applications, such as your favorite web mail provider, can now be used instead of desktop applications for handling <code>mailto:</code> links from other sites. Similar support is provided for other protocols as well. (Note that web applications do have to register themselves with Firefox before this will work.)</li> + <li><strong>Easy to use Download Actions.</strong> A new Applications preferences pane provides an improved user interface for configuring handlers for various file types and protocol schemes.</li> + <li><strong>Improved look and feel.</strong> Graphics and font handling have been improved to make web sites look better on your screen, including sharper text rendering and better support for fonts with ligatures and complex scripts. In addition, Mac and Linux (Gnome) users will find that Firefox feels more like a native application for their platform than ever, with a new, native, look and feel.</li> + <li><strong>Color management support.</strong> By setting the <code>gfx.color_management.enabled</code> preference in <code>{{mediawiki.external('about:config')}}</code>, you can ask Firefox to use the color profiles embedded in images to adjust the colors to match your computer's display.</li> + <li><strong>Offline support.</strong> Web applications can take advantage of new features to support being used even when you don't have an Internet connection.</li> +</ul> + +<h3 id="Security_and_privacy" name="Security_and_privacy">Security and privacy</h3> + +<ul> + <li><strong>One-click site information.</strong> Want to know more about the site you're visiting? Click the site's icon in the location bar to see who owns it. Identify information is prominently displayed and easier than ever to understand.</li> + <li><strong>Malware protection.</strong> Firefox 3 warns you if you arrive at a web site that is known to install viruses, spyware, trojans, or other dangerous software (known as malware). You can see what the warning looks like by <a class="link-https" href="https://www.mozilla.com/firefox/its-an-attack.html">clicking here</a>.</li> + <li><strong>Web forgery protection enhanced.</strong> Now when you visit a page that's suspected of being a forgery, you're shown a special page instead of the contents of the page with a warning. <a class="link-https" href="https://www.mozilla.com/firefox/its-a-trap.html">Click here</a> to see what it looks like.</li> + <li><strong>Easier to understand SSL errors.</strong> The errors presented when an invalid SSL certificate is encountered have been clarified to make it easier to understand what the problem is.</li> + <li><strong>Out-of-date add-on protection.</strong> Firefox 3 now automatically checks add-on and plugin versions and disables older, insecure versions.</li> + <li><strong>Secure add-on updates.</strong> Add-on update security has been improved by disallowing add-ons that use an insecure update mechanism.</li> + <li><strong>Anti-virus integration.</strong> Firefox 3 now informs anti-virus software when executable files are downloaded.</li> + <li><strong>Windows Vista parental controls support.</strong> Firefox 3 supports the Vista system-wide parental control setting for disabling file downloads.</li> +</ul> + +<h3 id="Performance" name="Performance">Performance</h3> + +<ul> + <li><strong>Reliability.</strong> Firefox 3 now stores bookmarks, history, cookies, and preferences in a transactionally secure database format. This means your data is protected against loss even if your system crashes.</li> + <li><strong>Speed.</strong> Firefox 3 has gotten a performance boost by completely replacing the part of the software that handles drawing to your screen, as well as to how page layout work is handled.</li> + <li><strong>Memory use reduced.</strong> Firefox 3 is more memory efficient than ever, with over 300 memory "leak" bugs fixed and new features to help automatically locate and dispose of leaked memory blocks.</li> +</ul> + +<h2 id="See_also" name="See_also">See also</h2> + +<div>{{Firefox_for_developers('2')}}</div> diff --git a/files/pt-br/mozilla/firefox/releases/3/zoom_de_página_inteira/index.html b/files/pt-br/mozilla/firefox/releases/3/zoom_de_página_inteira/index.html new file mode 100644 index 0000000000..1a22edfb92 --- /dev/null +++ b/files/pt-br/mozilla/firefox/releases/3/zoom_de_página_inteira/index.html @@ -0,0 +1,45 @@ +--- +title: Zoom de página inteira +slug: Mozilla/Firefox/Releases/3/Zoom_de_página_inteira +tags: + - Extensões + - Firefox 3 + - XUL +translation_of: Mozilla/Firefox/Releases/3/Full_page_zoom +--- +<div>{{FirefoxSidebar}}</div> + +<p>{{ Gecko_minversion_header("1.9") }}</p> + +<p>Zoom de página inteira (ou apenas fullzoom) é um novo recurso do <a href="/en/Firefox_3_for_developers" title="en/Firefox_3_for_developers">Firefox 3</a>.</p> + +<h3 id="Example_.28XUL:browser.29" name="Example_.28XUL:browser.29">Exemplo (XUL:browser)</h3> + +<p><span id="result_box" lang="pt"><span>O exemplo a seguir demonstra o uso da janela atual do navegador.</span> <span>Esse é o uso típico de uma extensão do Firefox.</span></span></p> + +<pre>var zoom = ZoomManager.getZoomForBrowser(gBrowser.selectedBrowser); +ZoomManager.enlarge(); +ZoomManager.setZoomForBrowser(gBrowser.selectedBrowser, ZoomManager.MIN); +</pre> + +<h3 id="Example_.28XUL:iframe.29" name="Example_.28XUL:iframe.29">Exemplo (XUL:iframe)</h3> + +<p><span class="short_text" id="result_box" lang="pt"><span>Nota: Isso provavelmente está desatualizado.</span></span></p> + +<p><span id="result_box" lang="pt"><span>Você pode usar o recurso fullZoom para um</span></span> <a href="/en/XUL/iframe" title="en/XUL/iframe">XUL:iframe</a> <span id="result_box" lang="pt"><span>também.</span> <span>No entanto, como um iframe não tem uma propriedade markupDocumentViewer, precisamos obtê-la primeiro:</span></span></p> + +<pre>var zoom = 1.5; +var iframe = document.getElementById("authorFrame"); +var contViewer = iframe.docShell.contentViewer; +var docViewer = contViewer.QueryInterface(Components.interfaces.nsIMarkupDocumentViewer); +docViewer.fullZoom = zoom; +</pre> + +<h3 id="References" name="References">References</h3> + +<ul> + <li><span id="result_box" lang="pt"><span>Extensão de zoom de página por</span></span> Ted Mielczarek <a class="external" href="http://ted.mielczarek.org/code/mozilla/fullpagezoom.xpi">fullpagezoom.xpi</a> <span id="result_box" lang="pt"><span>para os últimos Firefox 3.0 nightlies</span></span></li> + <li><a class="link-https" href="https://addons.mozilla.org/en-US/firefox/addon/6489">Glazoom extension</a> por Daniel Glazman para Firefox 3.0</li> + <li>O <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=4821">bugzilla bug</a> sobre fullZoom.</li> + <li>{{ Interface("nsIMarkupDocumentViewer") }} documentação da interface.</li> +</ul> diff --git a/files/pt-br/mozilla/firefox/releases/49/index.html b/files/pt-br/mozilla/firefox/releases/49/index.html new file mode 100644 index 0000000000..db3869a579 --- /dev/null +++ b/files/pt-br/mozilla/firefox/releases/49/index.html @@ -0,0 +1,352 @@ +--- +title: Firefox 49 para desenvolvedores +slug: Mozilla/Firefox/Releases/49 +translation_of: Mozilla/Firefox/Releases/49 +--- +<div>{{FirefoxSidebar}}</div><p style="margin-bottom: 0cm; line-height: 100%;"><a href="https://www.mozilla.org/firefox/developer/" style="float: right; margin-bottom: 20px; padding: 10px; text-align: center; border-radius: 4px; display: inline-block; background-color: #81BC2E; white-space: nowrap; color: white; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.2), 0px -1px 0px 0px rgba(0, 0, 0, 0.3) inset;">Para testar estes novos recursos do Firefox,<br> + Instale Firefox Developer Edition</a> Firefox 49 foi lançado em 20 de Setembro de 2016. Este artigo faz uma lista das principais alterações não só para desenvolvedores web, mas também desenvolvedores Firefox e Gecko e de extensões.</p> + +<h2 id="sect1"> </h2> + +<h2 id="Mudanças_para_desenvolvedores_web">Mudanças para desenvolvedores web</h2> + +<h3 id="Ferramentas_de_desenvolvimento">Ferramentas de desenvolvimento</h3> + +<ul> + <li>Erros de JavaScript registrados no console <a href="https://hacks.mozilla.org/2016/06/helping-web-developers-with-javascript-errors/">Agora com um link [Leia Mais]</a> para ajuda complementar na depuração ({{bug("1179876")}}).</li> + <li>CSS <span class="short_text" id="result_box" lang="pt"><span>autocompletar</span></span>: mostra mais sugestões para o autocompletar<br> + ({{bug("1260419")}}).</li> + <li>O inspector de animação agora <a href="/en-US/docs/Tools/Page_Inspector/How_to/Work_with_animations#Further_information_about_animation_compositing">fornece informações do desempenho da animação </a> nas ferramentas de desenvolvimento ({{bug("1254408")}}).</li> + <li>O <a href="/en-US/docs/Tools/Page_Inspector/How_to/Examine_and_edit_HTML#Element_popup_context_menu">menu de contexto do Inspector</a> foi reorganizado <span id="result_box" lang="pt"><span>ser mais claro e fácil de usar</span></span> ({{bug("1211613")}}).</li> + <li>O Inspector agora suporta sintaxe para valores de cores em <code>#RRGGBBAA</code> e <code>#RGBA</code> ({{bug("1271191")}}).</li> + <li>As ferramentas de desvenvolvedor deixa de exibir marcas de fechamento automático (tal como {{HTMLElement("br")}} e {{HTMLElement("img")}} <span id="result_box" lang="pt"><span>como se eles tivessem uma tag de fechamento em páginas HTML</span></span> ; o comportamento é inalteravel para páginas XHTML ({{bug("820926")}}).</li> + <li>Melhorias na acessibilidade! + <ul> + <li>A caixa de ferramenta faz um trabalho melhor em assegurar que o foco no teclado seja mais visível ({{bug(1242851)}}).</li> + <li><span id="result_box" lang="pt"><span>Foram adicionados rótulos de acessibilidade a controles não marcados</span></span> ({{bug(1242715)}}).</li> + <li><span id="result_box" lang="pt"><span>Adicionada semântica de exibição de árvore adequada e navegação de teclado para a exibição de marcação do Inspetor</span></span> ({{bug(1242694)}}).</li> + </ul> + </li> + <li>O <a href="/en-US/docs/Tools/Network_Monitor">Monitor de Rede</a> agora mostra uma coluna de Causa, onde fornece e indica o que causa de cada requerimento de rede específico ({{bug(1134073)}}).</li> + <li>Na <em>about:debugging</em> página de extesões, o botão de recarregar é o único abilitado para extensões temporárias. Será desabilitado para todas as outras extensões ({{bug(1273184)}}).</li> + <li>Na página Workers em<em> about:debbuging</em>, uma mensagem de alerta será exibida na seção Service Workers se o <a href="https://developer.mozilla.org/en-US/docs/Tools/about:debugging#Service_workers_not_compatible">service workers for incompatíveil </a> com as configurações atuais do navegador ({{bug(1266415)}}).</li> + <li><em>about:debugging</em> agora existe uma <a href="/en-US/docs/Tools/about:debugging#Tabs">nova página de Tabs</a> disponível, quer fornece uma lista completa de todas abas abertas debugaveis na instancia do Firefox ({{bug(1266128)}}).</li> + <li>A opção <em>Desabilitar Cache</em> na <a href="/en-US/docs/Tools/Settings#Advanced_settings">Caixa de ferramentas de configurações avançadas</a> foi renomeada para Desabilitar HTTP Cache, para clarear que isso afeta o cache do HTTP, e não <a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API">Service Workers</a>/o <a href="https://developer.mozilla.org/en-US/docs/Web/API/Cache">Cache API</a> (bug(1253018)).</li> + <li>O <a href="/en-US/docs/Tools/Storage_Inspector#IndexedDB">Inspector de armazenamento agora permite IndexedDB databases ser deletado</a> através de seu próprio menu ({{bug("1205123")}}), e mostrará uma mensagem de alerta se a IndexedDB poder ser deletada por alguma rasão (Se ainda existir conexão ativa, por exemplo) ({{bug(1268460)}}).</li> +</ul> + +<h3 id="HTML">HTML</h3> + +<ul> + <li>Adicionado suporte para estes elementros: {{HTMLElement("details")}} e {{HTMLElement("summary")}} ({{bug(1226455)}}).</li> + <li>O {{htmlattrxref("pattern", "input")}} atribuido para {{HTMLElement("input")}} agora usa o parâmetro <code>'u'</code> no JavaScript base {{jsxref("RegExp")}} ({{bug(1227906)}}).</li> + <li>Para corresponder a uma mudança específica, de um valor inválido {{htmlattrxref("kind", "track")}} atributo do elemento {{HTMLElement('track')}} é agora tratado como <code>"metadata"</code> ao invés de<code>"subtitles"</code> ({{bug(1269712)}}).</li> + <li><span id="result_box" lang="pt"><span>O atributo </span></span> {{htmlattrxref("sandbox", "iframe")}} <span lang="pt"><span> do elemento </span></span> {{HTMLElement("iframe")}} <span lang="pt"><span> agora suporta os valores 'allow-popups-to-escape-sandbox' e 'allow-modals'</span></span> ({{bug(1190641)}}).</li> + <li>Suporte para atributos microdata e a Microdata API foram removidas ({{bug(909633)}}).</li> + <li>O atributo {{htmlattrxref("referrerpolicy", "a")}} do elemento {{HTMLElement("a")}} agora suporta esses atributos <code>'no-referrer-when-downgrade</code>' e <code>'origin-when-cross-origin'</code> ({{bug(1178337)}}).</li> + <li>O {{htmlattrxref("form", "label")}} que é atributo do elemento {{HTMLElement("label")}} foi removido. A propriedade {{domxref("HTMLLabelElement.form")}} ainda existe, mas agora retorna o formulário na qual o controle do label's está associado , se houver um controle (e se esse controle for associado ao formulário) ({{bug(1268852)}}).</li> +</ul> + +<h3 id="CSS">CSS</h3> + +<ul> + <li>Adicionado {{cssxref("background-position-x")}} e {{cssxref("background-position-y")}}, que permite específicar e compensar separadamente a horizontal e a vertial para melhor posicionar a imagem de fundo; eles são compentes de {{cssxref("background-position")}} ({{bug("550426")}}).</li> + <li>Adicionado suporte para <code>as tags round</code> e <code>space</code> para {{cssxref("background-repeat")}} ({{bug("548372")}}).</li> + <li>no {{cssxref("background-clip")}}, as tags <code>text</code> são ativadas por padrão ({{bug(1264905)}}).</li> + <li>Adicionado suporte a cores específicas como o canal alpha usando 4- e 8-digitos CSS hex <a href="/en-US/docs/Web/CSS/color_value">cor</a> de valores (#RRGGBBAA e #RGBA) ({{bug("567283")}}).</li> + <li>A pseudo-class {{cssxref(":dir()")}} foi desprezado ({{bug(859301)}}).</li> + <li>Em nossa implementação experimental (ainda não ativa por padrão) de {{cssxref("clip-path")}}, podemos agora interpolar entre valores {{cssxref("<basic-shape>")}} ({{bug(1110460)}}).</li> + <li>Adicionado a <a href="/en-US/docs/Web/CSS/length#q"><code>unidade de comprimento q</code> </a> ({{bug(1274526)}}).</li> + <li>A propiedade {{cssxref("text-align-last")}} foi desprezada ({{bug(1039541)}}).</li> + <li>Adicionado suporte para {{cssxref("overflow-wrap")}}, substituindo {{cssxref("word-wrap")}} que ainda é suportado como nome alternativo ({{bug(955857)}}).</li> + <li>Nossa experiencia com a implementação do <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout">CSS Grids</a> foi melhorado: + <ul> + <li>implementado {{cssxref("<percentage>")}} para as propriedades {{cssxref("grid-gap")}}, {{cssxref("grid-row-gap")}}, e {{cssxref("grid-column-gap")}} ({{bug(1266268)}}).</li> + <li>Implementado suporte a layout grid layout para {{cssxref("align")}}, {{cssxref("justify-self")}}<code>:baseline</code> e <code>last-baseline</code> (aka "baseline self-alignment") ({{bug(1221525)}}).</li> + <li>Implementado alinhamento de conteúdo baseline de item em grid ({{bug(1256429)}}).</li> + </ul> + </li> + <li>Nosso experimeto implementação de <a href="/en-US/docs/Web/CSS/CSS_Masks">CSS Masks</a> foi melhorado: + <ul> + <li>A propiedade {{cssxref("mask-origin")}} agora usa <code>border-box</code> ao invés de <code>padding-box</code> como valor inicial, para <span class="short_text" id="result_box" lang="pt"><span>coincidir com a especificação</span></span> ({{bug(1258286)}}).</li> + <li>A propriedade {{cssxref("mask-repeat")}} suporta os seguintes volumes: <code>space</code> e <code>round</code> values ({{bug(1258626)}}).</li> + <li>Corrigido o problema que impedia o atributo {{cssxref("mask-position")}} de ser animado ({{bug(1273804)}}).</li> + </ul> + </li> + <li>O controle de preferências {{cssxref("text-emphasis")}} foi removido, assim o suporte para esta propiedade não pode ser mais desabilitado ({{bug(1229609)}}).</li> +</ul> + +<h3 id="JavaScript">JavaScript</h3> + +<ul> + <li>As armadilhas para ES2015 (ES6) {{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "getPrototypeOf()")}} e {{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "setPrototypeOf()")}} {{jsxref("Proxy")}} foram implementadas ({{bug(888969)}}).</li> + <li>O metodos ES2015 (ES6) {{jsxref("RegExp.prototype.@@match()", "RegExp.prototype[@@match]()")}}, {{jsxref("RegExp.prototype.@@replace()", "RegExp.prototype[@@replace]()")}}, {{jsxref("RegExp.prototype.@@search()", "RegExp.prototype[@@search]()")}}, e {{jsxref("RegExp.prototype.@@split()", "RegExp.prototype[@@split]()")}}, e {{jsxref("RegExp.@@species", "RegExp[@@species]")}} getter foram implementados ({{bug(887016)}}).</li> + <li>A versão obsoleta, <code>sem padrão nos argumentos de flags</code> do <code>String.prototype.</code>{{jsxref("String.prototype.match", "match")}}/{{jsxref("String.prototype.search", "search")}}/{{jsxref("String.prototype.replace", "replace")}} foi remivida ({{bug(1108382)}}).</li> + <li>O comportamento do metodo {{jsxref("Date.parse()")}} quando analisam 2-digit years foi modificado para mais <span class="short_text" id="result_box" lang="pt"><span>interoperável</span></span> com o navegador Google Chrome ({{bug(1265136)}}).</li> +</ul> + +<h3 id="InterfacesAPIsDOM">Interfaces/APIs/DOM</h3> + +<h4 id="DOM_HTML_DOM">DOM & HTML DOM</h4> + +<ul> + <li>O metodo {{domxref("DOMTokenList.supports()")}} foi adicionado ({{bug(1257849)}}).</li> + <li>O metodo {{domxref("DOMTokenList.replace()")}} foi adicionado ({{bug(1224186)}}).</li> + <li>O caractere principal <code>'?'</code> agora é ignorado no parâmetro do construtor {{domxref("URLSearchParams.URLSearchParams", "URLSearchParams()")}} ({{bug(1268361)}}).</li> + <li>O valor retornado por {{domxref("URL.origin")}}, {{domxref("HTMLAnchorElement.origin")}}, e {{domxref("HTMLAreaElement.origin")}} para URL usando o <code>blob:</code> o esquema não está mais incorreto <code>null</code> mas em vez disso, a origem da URL formado pela remorção da tag <code>blob:</code> ({{bug(1270451)}}).</li> + <li>No modo de pre-renderização, a propriedade {{domxref('Document.visibilityState')}} agora retorna <code>'prerender'</code> ({{bug(1069772)}}).</li> + <li>A propriedade {{domxref("Window.isSecureContext")}} foi implantada ({{bug(1162772)}}).</li> + <li>Os metodos DOM4 {{domxref("ChildNode.before()")}}, {{domxref("ChildNode.after()")}}, {{domxref("ChildNode.replaceWith()")}}, {{domxref("ParentNode.append()")}} e {{domxref("ParentNode.prepend()")}} foram implementados ({{bug(911477)}}).</li> + <li>O metodo {{domxref("TouchList.identifiedTouch()")}} foi removido ({{bug(1188539)}}).</li> + <li>Por padrão, a característica <code>scrollbars</code> {{domxref("Window")}} é habilitado quando chamado {{domxref("Window.open()")}}. Anteriormente, quanto era altamente recomendado ativar ele, pois não era padrão ({{bug(1257887)}}).</li> + <li>Adicionado o <em>metodo experimental</em> e <em>non-standard</em> do metodo {{domxref("HTMLMediaElement.seekToNextFrame()")}}, que permite bucar quadro a quadro no conteúdo do vídeo ({{bug(1235301)}}). Equanto você é incentivado a expertimentar, dessar forma você nos ajuda a entender o quão útil ele é, <em>não use ele em produção de código!</em></li> + <li>A propriedade {{domxref("HTMLLabelElement.form")}} agora retorna a forma com que o controle de label's foi assiciado, se houver um controle (e se esse controle for associado ao formulário). Anteriormente, labels eram diretamente associados com formulários usando essa propriedade ({{bug(1268852)}}).</li> + <li>Suporte ao paramtro third de {{domxref("EventTarget.addEventListener()")}}, ou um {{jsxref("Boolean")}} ou a {{interface("EventListenerOptions")}} foi adicionado ({{bug(1266164)}} and {{bug(1266066)}}).</li> + <li>O volume do audio relativo a {{domxref("KeyboardEvent.key")}} foram renomeados. <code>"VolumeDown"</code> é agora <code>"AudioVolumeDown"</code>, <code>"VolumeUp"</code> é agora <code>"AudioVolumeUp"</code>, e <code>"VolumeMute"</code> e agora <code>"AudioVolumeMute".</code> Isso trás Firefox p<em><span style="font-style: normal;">ara alinhamento com os últimos rascunhos de especificações de UI Events</span></em> ({{bug(1272578)}}). Veja {{SectionOnPage("/en-US/docs/Web/API/KeyboardEvent/code", "Code values")}} para uma lista completa de possibilidades de códigos.</li> + <li>Os códigos ateriormente referidos a <code>"MozHomeScreen"</code>, <code>"MozCameraFocusAdjust"</code>, e <code>"MozPhoneCall"</code> agora tem nomes oficiais na especificação UI Events: <code>"GoHome"</code>, <code>"CameraFocus"</code>, e <code>"Call"</code>. Firefox 49 foi atualizado para utilizar os novos nomes ({{bug(1272599)}}). Veja {{SectionOnPage("/en-US/docs/Web/API/KeyboardEvent/code", "Code values")}} para uma lista completa de possilidades de códigos</li> + <li>O valor dos códigos <code>"Separator"</code> e <code>"MediaSkip"</code> foram removidos, por serem desatualizados e não utilizados ({{bug(1232919)}}).</li> + <li>Valor do código e a correspondencia dos códigos <code>"Hyper"</code> e <code>"Super"</code>foi adicionado para representar os modificadores de herança dos códigos ({{bug(1232919)}}).</li> + <li> + <p style="margin-bottom: 0cm; line-height: 100%;"><em><span style="font-style: normal;">Duas teclas do teclado numérico multimídia foram adicionados</span></em>: <code>"Key11"</code> e <code>"Key12"</code> ({{bug(1232919)}}).</p> + </li> + <li> + <p style="margin-bottom: 0cm; line-height: 100%;"><em><span style="font-style: normal;">Foram adicionados novos códigos para controle de audio</span></em>: <code>"AudioBassBoostToggle"</code>, <code>"AudioTrebleDown"</code>, e <code>"AudioTrebleUp"</code> ({{bug(123919)}}).</p> + </li> + <li>Adiconado código para controle do mocrofone: <code>"</code><code>MicrophoneToggle"</code>, <code>"</code><code>MicrophoneVolumeDown"</code>, <code>"</code><code>MicrophoneVolumeUp"</code>, e <code>"</code><code>MicrophoneVolumeMute"</code> ({{bug(123919)}}).</li> + <li> + <p style="margin-bottom: 0cm; line-height: 100%;"><em><span style="font-style: normal;">Adicionado novo código de suporte a dispositivos de reconhecimento de fala</span></em>: "<code>SpeechCorrectionList"</code> e <code>"</code><code>SpeechInputToggle"</code> ({{bug(1232919)}}).</p> + </li> + <li> + <p style="margin-bottom: 0cm; line-height: 100%;"><em><span style="font-style: normal;">Nova tecla foi adicionada para suportar botões especiais em telefones</span></em>: <code>"</code><code>AppSwitch"</code>, <code>"</code><code>Call"</code>, <code>"</code><code>CameraFocus"</code>, <code>"</code><code>EndCall"</code>, <code>"</code><code>GoBack"</code>, <code>"</code><code>GoHome"</code>, <code>"</code><code>HeadsetHook"</code>, <code>"</code><code>LastNumberRedial"</code>, <code>"</code><code>Notification"</code>, <code>"</code><code>MannerMode"</code>, e <code>"</code><code>VoiceDial"</code> ({{bug(1232919)}}).</p> + </li> + <li>Um novo botão de aplicação foi adicionado: <code>"</code><code>LaunchContacts"</code> e <code>"</code><code>LaunchPhone"</code> ({{bug(1232919)}}).</li> + <li>Adicionado novos códigos de suporte a dispositivos de TV: <code>"</code><code>TV3DMode"</code>, <code>"</code><code>TVAntennaCable"</code>, <code>"</code><code>TVAudioDescription"</code>, <code>"</code><code>TVAudioDescriptionMixDown"</code>, <code>"</code><code>TVAudioDescriptionMixUp"</code>, <code>"</code><code>TVContentsMenu"</code>, <code>"</code><code>TVDataService"</code>, <code>"</code><code>TVInput"</code>, <code>"</code><code>TVInputComponent1"</code>, <code>"</code><code>TVInputComponent2"</code>, <code>"</code><code>TVInputComposite1"</code>, <code>"</code><code>TVInputComposite2"</code>, <code>"</code><code>TVInputHDMI1"</code>, <code>"</code><code>TVInputHDMI2"</code>, <code>"</code><code>TVInputHDMI3"</code>, <code>"</code><code>TVInputHDMI4"</code>, <code>"</code><code>TVInputVGA1"</code>, <code>"</code><code>TVMediaContext"</code>, <code>"</code><code>TVNetwork"</code>, <code>"</code><code>TVNumberEntry"</code>, <code>"</code><code>TVRadioService"</code>, <code>"</code><code>TVSatellite"</code>, <code>"</code><code>TVSatelliteBS"</code>, <code>"</code><code>TVSatelliteCS"</code>, <code>"</code><code>TVSatelliteToggle"</code>, <code>"</code><code>TVTerrestrialAnalog"</code>, <code>"</code><code>TVTerrestrialDigital"</code>, <code>"</code><code>TVTimer"</code>, e <code>"</code><code>DVR"</code> ({{bug(1232919)}}).</li> + <li>O código <code>"</code><code>MediaSelect"</code> foi substituido pelo valor padrão <code>"</code><code>LaunchMediaPlayer"</code> ({{bug(1272592)}}).</li> + <li> + <p style="margin-bottom: 0cm; line-height: 100%;"><em><span style="font-style: normal;">Foram adicionados códigos adicionais para mídia-player</span></em>. São esses <code>"</code><code>MediaAudioTrack"</code>, <code>"</code><code>MediaSkipBackward"</code>, <code>"</code><code>MediaSkipForward"</code>, <code>"</code><code>MediaStepBackward"</code>, <code>"</code><code>MediaStepForward"</code>, <code>"</code><code>MediaTopMenu"</code>, <code>"</code><code>NavigateIn"</code>, <code>"</code><code>NavigateNext"</code>, <code>"</code><code>NavigateOut"</code>, e <code>"</code><code>NavigatePrevious"</code> ({{bug(1232919)}}).</p> + </li> +</ul> + +<h4 id="Canvas">Canvas</h4> + +<ul> + <li>A propriedade {{domxref("CanvasRenderingContext2D.filter")}}, que fornece suporte para adicionar foltros a uma canvas, agora é ativa por padrão e não precisa mais ser abilitado nas preferências ({{bug(1173545)}}).</li> +</ul> + +<h4 id="WebGL">WebGL</h4> + +<ul> + <li>A extensão {{domxref("EXT_color_buffer_float")}} {{domxref("WebGL2RenderingContext", "WebGL 2", "", 1)}} foi implementada ({{bug(1129332)}}).</li> + <li>O evento {{Event("webglcontextcreationerror")}}, que é criando quando a tentativa de criação de contexto do WebGL falha, foi implementado ({{bug(1271478)}}). Use isso para ajudar a entender melhor, tanto para depuração quanto para o processamento de errros de produção.</li> +</ul> + +<h4 id="IndexedDB">IndexedDB</h4> + +<ul> + <li>Agora você pode renomear IndexedDB indexes; a propriedade {{domxref("IDBIndex.name")}} já não é mais de leitura-única ({{bug(1118028)}}).</li> + <li>Você também pode renomear {{domxref("IDBObjectStore")}}s; a propriedade {{domxref("IDBObjectStore.name")}} já não é de leitura-única ({{bug(1118028)}}).</li> +</ul> + +<h4 id="Service_Workers_e_relatórios">Service Workers e relatórios</h4> + +<ul> + <li>O Objeto <a href="/en-US/docs/Web/API/Fetch_API">Fetch API</a>'s {{domxref("Response")}} agora implementa a propriedade {{domxref("Response.redirected", "redirected")}} , <span id="result_box" lang="pt"><span>que indica se a resposta é para uma solicitação que foi redirecionada</span></span>. Por favor ervise o relatório de segurança na documentação usanda anteriormente nessa propriedade ({{bug(1243792)}}).</li> + <li>Na <a href="/en-US/docs/Web/API/Permissions_API">API de Permissões</a>, Firefox já não suporta a palavra <code>PermissionDescriptor</code> ti <span id="result_box" lang="pt"><span> push (referido na especificação como </span></span><code>PushPermissionDescriptor</code>); Isso ocorre porque o Firefox depende de um sistema de cotas<span class="short_text" id="result_box" lang="pt"><span> para controloar o status</span></span> <code>userVisibleOnly</code>, <span id="result_box" lang="pt"><span>e estava lançando um erro ao encontrar uma instância do</span></span> <code>PushPermissionDescriptor</code> ({{bug(1266821)}}). Com essa palavra removida, o Firefox simplismente ignora.</li> +</ul> + +<h4 id="Streams_de_mídia">Streams de mídia</h4> + +<ul> + <li>Antigamente, era possível chamar {{domxref("MediaDevices.getUserMedia()")}} como requerimento ambos áudio e vídeo <span id="result_box" lang="pt"><span>para ter sucesso nos casos em que o usuário tem apenas um dos dois tipos de hardware disponíveis</span></span> . Isso foi fixado ({{bug(802326)}}).</li> + <li>Nas versões anteriores do Firefox, era possível chamar por {{domxref("MediaDevices.getUserMedia()")}} que solicita tando audio quanto vídeo <span id="result_box" lang="pt"><span>para ter êxito mesmo que o usuário tenha negado acesso a um, mas não a ambos os dispositivos de correspondência</span></span>. Isso foi fixado ({{bug(802326)}}). Isso envolve pequenas alterações na interface de usuários, para remover a opção para escolher "sem áudio" ou "Sem vídeo" quando o usuário é solicitado para as permissões.</li> + <li>O metodo {{domxref("MediaStream.getTrackById()")}} foi implantado ({{bug(1208390)}}).</li> +</ul> + +<h4 id="WebRTC">WebRTC</h4> + +<ul> + <li>O metodo {{domxref("RTCPeerConnection.addTrack()")}} foi atualizado para permitir tracks <span id="result_box" lang="pt"><span>sue não são componentes dos </span></span> stream <span lang="pt"><span> especificados a serem adicionados à conexão</span></span>. Ao invés, os streams são usados para agrupar tracks na extremidade receptora da conexão ({{bug(1271669)}}).</li> +</ul> + +<h4 id="Novas_APIs">Novas APIs</h4> + +<ul> + <li>A API {{domxref("PerformanceObserver")}} agpra é ativa por padrão no Nightly. Isso não é atio por padrão em outras versõs do Firefox 49 ({{bug(1271487)}}).</li> +</ul> + +<h4 id="Outras">Outras</h4> + +<ul> + <li>{{domxref("XMLHttpRequest.getResponseHeader()")}} e {{domxref("XMLHttpRequest.getAllResponseHeaders()")}} r<span class="short_text" id="result_box" lang="pt"><span>etornar cabeçalhos vazios caso a preferência </span></span><code>network.http.keep_empty_response_headers_as_empty_string</code> esta configurado para <code>true</code> ({{bug(669259)}}).</li> + <li>O Firefox OS-apenas <a href="/en-US/docs/Archive/Firefox_OS/API/Data_Store_API">API Banco de Dados</a> foi removida ({{bug(1261009)}}).</li> + <li>A <a href="/en-US/docs/Web/API/Fullscreen_API">API de Tela Cheia</a> manipulador de eventos {{domxref("Document.onfullscreenchange")}} e {{domxref("Document.onfullscreenerror")}} foram removidos de {{domxref("Element")}} como nunca foram usados la; <span id="result_box" lang="pt"><span>As versões de prefixo desses manipuladores de eventos foram mantidas lá para fins de compatibilidade</span></span>, Contudo ({{bug(1270386)}}). Observe que ele não é ativado por padrão, mas está atrás da preferência <code>full-screen-api.unprefix.enabled</code> ({{bug(1268749)}}).</li> + <li>A propriedade obsoleta {{domxref("Document.mozFullScreen")}} não foi pré-fixada {{domxref("Document.fullscreen")}} {{bug(1269157)}}}. Perceba que ela não é ativa por padrão nas preferencias the <code>full-screen-api.unprefix.enabled</code> ({{bug(1268749)}}).</li> + <li>A propriedade leitor {{domxref("Document.fullscreenElement")}} e {{domxref("Document.fullscreenEnabled")}} deixa de lançar exceção se hover tentativa de alterar o seu valor; ao invés disso, o novo valor é ignorado e a função setter é uma no-op ({{bug(1269798)}}).</li> + <li>Qualquer tipode de dado pode ser agora recuperado da área de tranferência usada {{domxref("DataTransfer.getData()")}}: anteriormente, apenas alguns tipos de dados do tipo MIME eram suportados {{bug(860857)}}.</li> + <li>Nossa implementação da <a href="/en-US/docs/Web/API/Frame_Timing_API">API da cronometragrm de frames</a>, consistindo nas duas interfaces <code>PerformanceCompositeTiming</code> e <code>PerformanceRenderTiming</code>, foram removidas pois as especificações foram totalmente reescritas ({{bug(1271846)}}).</li> + <li>Para especificações correspondentes, a propriedade {{domxref("VTTCue.positionAlign")}} agora retorna um <code>PositionAlign</code> enum em vez de <code>Align</code> enum ({{bug(1276129)}}).</li> + <li>A parte de síntese da <a href="/en-US/docs/Web/API/Web_Speech_API#Speech_synthesis">API Web Speech </a> agora é ativo por padrão ({{bug(1268633)}}).</li> + <li>A <a href="/en-US/docs/Web/API/Performance_Timeline">API Timeline de performace</a> agora está disponível de padrão no Nightly (embrora não no Aurora, Beta ou Release).</li> + <li>O evento {{event("install")}}, e o {{domxref("Window.oninstall")}} manipulador de evento, são agora suportado por <a href="/en-US/docs/Web/Manifest">Web Manifests</a> ({{bug(1265279)}}).</li> + <li>Quando usar o metodo {{domxref("AudioContext.createPeriodicWave()")}} de <a href="/en-US/docs/Web/API/Web_Audio_API">Web Audio API</a>, você pode específicar <span id="result_box" lang="pt"><span>se a onda periódica resultante deve ser normalizada incluindo um objeto de dicionário como o terceiro parâmetro, que inclui um único parâmetro</span></span> — <code>{disableNormalization: true}</code> ({{bug(1265405)}}).</li> + <li>Na APIWebVTT, {{domxref("VTTCue.positionAlign")}} retorna corretamente um <code>PositionAlignSetting</code> enum conforme a especificação; anteriormente ele retornava um <code>AlignSetting</code> enum ({{bug(1276129)}}).</li> + <li>A parte de síntese de fala da API Web Speech agora é habilitado por padrão em todos os navegadores desktop ({{bug(1268633)}}).</li> + <li>O contrutor de <a href="/en-US/docs/Web/API/Web_Animations_API">API Web Animations </a>{{domxref("Animation.Animation()", "Animation()")}} agora aceita null na timeline ({{bug(1096776)}}).</li> +</ul> + +<h3 id="MathML">MathML</h3> + +<p><em>Sem mudanças.</em></p> + +<h3 id="SVG">SVG</h3> + +<ul> + <li>Removido o suporte por ser considerador obsoleto os seguintes elementos: {{SVGElement('altGlyph')}}, {{SVGElement('altGlyphDef')}} e {{SVGElement('altGlyphItem')}} ({{bug(1260032)}}).</li> +</ul> + +<h3 id="AudioVideo">Audio/Video</h3> + +<p><em>Sem mudanças.</em></p> + +<h2 id="HTTP">HTTP</h2> + +<ul> + <li><code>O diretiva <a href="/en-US/docs/Web/HTTP/Headers/Cache-Control">Cache-Control: immutable</a></code> foi implantada ({{bug(1267474)}}). Veja também essa <a href="https://bitsup.blogspot.de/2016/05/cache-control-immutable.html">postagem no blog</a> para mais informações.</li> +</ul> + +<h2 id="Networking">Networking</h2> + +<ul> + <li>A implementação do <a href="/en-US/docs/Mozilla/Projects/Necko/Proxy_Auto-Configuration_(PAC)_file">Auto-configuração de Proxy (PAC)</a> foi atualizada. Agora <code>weekdayRange</code>, <code>dateRange</code>, e <code>timeRange</code> suportam "intervalos invertidos", por exempo, <code>weekdayRange("SAT", "MON")</code> avaliare <code>true</code> se o dia atual é Saturday, Sunday, ou Monday ({{bug(1251332)}}).</li> +</ul> + +<h2 id="Segurança">Segurança</h2> + +<ul> + <li>A propriedade {{domxref("Window.isSecureContext")}}, indica se o contexto é capaz de usar recursos que exigem <a href="/en-US/docs/Web/Security/Secure_Contexts">contextos de segurança</a>, foi implementado ({{bug(1162772)}}).</li> +</ul> + +<h2 id="Compatilibidade">Compatilibidade</h2> + +<p>A fim de melhorar a compatilidade com o conteúdo existente, Firefox agora aceita algumas propriedades e atributos do webkit.</p> + +<ul> + <li> <span id="result_box" lang="pt"><span>As propriedades a seguir também trabalham com prefixo</span></span> -webkit: + + <ul> + <li>{{cssxref("-webkit-align-items")}}</li> + <li>{{cssxref("-webkit-align-content")}}</li> + <li>{{cssxref("-webkit-align-self")}}</li> + <li>{{cssxref("-webkit-animation")}}</li> + <li>{{cssxref("-webkit-animation-delay")}}</li> + <li>{{cssxref("-webkit-animation-direction")}}</li> + <li>{{cssxref("-webkit-animation-duration")}}</li> + <li>{{cssxref("-webkit-animation-fill-mode")}}</li> + <li>{{cssxref("-webkit-animation-iteration-count")}}</li> + <li>{{cssxref("-webkit-animation-name")}}</li> + <li>{{cssxref("-webkit-animation-play-state")}}</li> + <li>{{cssxref("-webkit-animation-timing-function")}}</li> + <li>{{cssxref("-webkit-backface-visibility")}}</li> + <li>{{cssxref("-webkit-background-clip")}}</li> + <li>{{cssxref("-webkit-background-origin")}}</li> + <li>{{cssxref("-webkit-background-size")}}</li> + <li>{{cssxref("-webkit-border-bottom-left-radius")}}</li> + <li>{{cssxref("-webkit-border-bottom-right-radius")}}</li> + <li>{{cssxref("-webkit-border-image")}}</li> + <li>{{cssxref("-webkit-border-top-left-radius")}}</li> + <li>{{cssxref("-webkit-border-top-right-radius")}}</li> + <li>{{cssxref("-webkit-border-radius")}}</li> + <li>{{cssxref("-webkit-box-shadow")}}</li> + <li>{{cssxref("-webkit-filter")}}</li> + <li>{{cssxref("-webkit-flex")}}</li> + <li>{{cssxref("-webkit-flex-basis")}}</li> + <li>{{cssxref("-webkit-flex-direction")}}</li> + <li>{{cssxref("-webkit-flex-flow")}}</li> + <li>{{cssxref("-webkit-flex-grow")}}</li> + <li>{{cssxref("-webkit-flex-shrink")}}</li> + <li>{{cssxref("-webkit-flex-wrap")}}</li> + <li>{{cssxref("-webkit-justify-content")}}</li> + <li>{{cssxref("-webkit-order")}}</li> + <li>{{cssxref("-webkit-perspective")}}</li> + <li>{{cssxref("-webkit-perspective-origin")}}</li> + <li>{{cssxref("-webkit-text-size-adjust")}}</li> + <li>{{cssxref("-webkit-transform")}}</li> + <li>{{cssxref("-webkit-transform-origin")}}</li> + <li>{{cssxref("-webkit-transform-style")}}</li> + <li>{{cssxref("-webkit-transition")}}</li> + <li>{{cssxref("-webkit-transition-delay")}}</li> + <li>{{cssxref("-webkit-transition-duration")}}</li> + <li>{{cssxref("-webkit-transition-property")}}</li> + <li>{{cssxref("-webkit-transition-timing-function")}}</li> + <li>{{cssxref("-webkit-user-select")}}</li> + </ul> + </li> + <li><span id="result_box" lang="pt"><span>As propriedades a seguir correspondem à propriedade prefixa equivalente</span></span> + <ul> + <li>{{cssxref("-webkit-box-flex")}}</li> + <li>{{cssxref("-webkit-box-ordinal-group")}}</li> + <li>{{cssxref("-webkit-box-orient")}}</li> + <li>{{cssxref("-webkit-box-align")}}</li> + <li>{{cssxref("-webkit-box-pack")}}</li> + </ul> + </li> + <li>Para valores {{cssxref("<image>")}}: + <ul> + <li><span id="result_box" lang="pt"><span>As funções a seguir correspondem aos seus equivalentes não predefinidos:</span></span> {{cssxref("-webkit-linear-gradient", "-webkit-linear-gradient()")}}, {{cssxref("-webkit-radial-gradient", "-webkit-radial-gradient()")}}, {{cssxref("-webkit-repeating-linear-gradient", "-webkit-repeating-linear-gradient()")}}, e {{cssxref("-webkit-repeating-radial-gradient","-webkit-repeating-radial-gradient()")}}.</li> + <li>O desatualizado <code>-webkit-gradient</code> é suportado (e traduzindo para um gradiente regular)</li> + </ul> + </li> + <li>Os seguintes valores {{cssxref("display")}} foram traduzidos: + <ul> + <li><code>-webkit-box</code> to <code>-moz-box</code></li> + <li><code>-webkit-flex</code> to <code>flex</code></li> + <li><code>-webkit-inline-box</code> to <code>inline-flex</code></li> + <li><code>-webkit-inline-flex</code> to <code>-moz-inline-flex</code></li> + </ul> + </li> + <li> As seguintes propriedades são suportadas ( <span id="result_box" lang="pt"><span>E não mapeia para qualquer equivalente não predefinido</span></span>): + <ul> + <li>{{cssxref("-webkit-text-fill-color")}}</li> + <li>{{cssxref("-webkit-text-stroke-color")}}</li> + <li>{{cssxref("-webkit-text-stroke-width")}}</li> + <li>{{cssxref("-webkit-text-stroke")}}</li> + </ul> + </li> + <li>A interface {{domxref("WebKitCSSMatrix")}} é um nome de {{domxref("DOMMatrix")}}</li> + <li><span id="result_box" lang="pt"><span>Os seguintes recursos de consulta de mídia foram implementados</span></span>: + <ul> + <li><code>-webkit-min-device-pixel-ratio</code> é um nome para <code><a href="/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#resolution">min-resolution</a></code> com o mesmo valor em (em <code>dppx)</code>, embora este recurso seja <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1237720">disabilitado por padrão</a> (atras de preferências no about:config <code>layout.css.prefixes.device-pixel-ratio-webkit</code>)</li> + <li><code>-webkit-max-device-pixel-ratio</code> é um nome de <code><a href="/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#resolution">max-resolution</a></code> para o mesmo valor (em <code>dppx</code>); essa característica é destivada por padrão, atras da mesma preferência no about:config</li> + <li><code><a href="/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#-webkit-transform-3d">-webkit-transform-3d</a></code> sempre combinando, indicando suporte a transformações 3D.</li> + </ul> + </li> +</ul> + +<h2 id="Mudanças_para_extensões_e_desenvolvedores_Mozilla">Mudanças para extensões e desenvolvedores Mozilla</h2> + +<h3 id="Extensões_WEB">Extensões WEB</h3> + +<ul> + <li>Suporte a {{WebExtAPIRef("history")}} foi adicionado. Isso fornece acesso a histórico do navegador, com metodos disponíveis para pesquisar no histórico, obtendo informações sobre páginas visitanas anteriormente, e adicionando e removendo entradas no históricos.</li> + <li>Adicionado o metodo {{WebExtAPIRef("tabs.removeCSS()")}} para aba API. Esse metodo permite remover o CSS que foi anteriormente injetado por chamada {{WebExtAPIRef("tabs.insertCSS()")}}.</li> +</ul> + +<h3 id="Interfaces">Interfaces</h3> + +<ul> + <li>No {{domxref("EventTarget.addEventListener()")}}, o valor <code>mozSystemGroup</code>, ativa apenas com o código rodando no XBL ou no Firefox's chrome, e um {{jsxref("Boolean")}} que indica se o ouvinte foi adicionado ao grupo do sistema. ({{bug(1274520)}})</li> +</ul> + +<h3 id="Outros">Outros</h3> + +<p><em>Sem mudanças!.</em></p> + +<h2 id="Veja_tambpem">Veja tambpem</h2> + +<ul> + <li><a href="https://www.fxsitecompat.com/en-US/versions/49">Sites compatíveis com o Firefox 49</a></li> +</ul> + +<h2 id="Outras_versões">Outras versões</h2> + +<p>{{Firefox_for_developers(48)}}</p> diff --git a/files/pt-br/mozilla/firefox/releases/50/index.html b/files/pt-br/mozilla/firefox/releases/50/index.html new file mode 100644 index 0000000000..fc558d4eef --- /dev/null +++ b/files/pt-br/mozilla/firefox/releases/50/index.html @@ -0,0 +1,150 @@ +--- +title: Firefox 50 for developers +slug: Mozilla/Firefox/Releases/50 +translation_of: Mozilla/Firefox/Releases/50 +--- +<div>{{FirefoxSidebar}}</div> + +<p>O Firefox 50 foi lançado em 15 de novembro de 2016. Este artigo lista as principais alterações que são úteis não só para os desenvolvedores Web, mas também para os desenvolvedores do Firefox e Gecko, assim como os desenvolvedores do Add-on.</p> + +<h2 id="Mudanças_para_desenvolvedores_web">Mudanças para desenvolvedores web</h2> + +<h3 id="Developer_Tools">Developer Tools</h3> + +<p><span class="short_text" id="result_box" lang="pt"><span>Nenhuma mudança</span><span>.</span></span></p> + +<h3 id="HTML">HTML</h3> + +<ul><br> + <li>For compatibility purposes, the non-standard {{HTMLattrxref("webkitdirectory", "input")}} attribute of the {{HTMLElement("input")}} element, as well as the property {{domxref("HTMLInputElement.webkitDirectory")}} property, have been implemented ({{bug(1258489)}}).</li> + <li>The default style of {{HTMLElement("bdo")}} now has a {{cssxref("unicode-bidi")}} with the <code>isolate-override</code> value ({{bug(1249497)}}).</li> +</ul> + +<h3 id="CSS">CSS</h3> + +<ul> + <li>Border-radiused corner with dashed and dotted style is now rendered with specified style instead of solid style ({{bug(382721)}}).</li> + <li>The non-standard {{cssxref(":-moz-full-screen-ancestor")}} pseudo-class selector has been removed ({{bug(1199529)}}).</li> + <li>The {{cssxref("box-sizing")}}<code>: padding-box</code> has been removed, since it’s no longer a part of the spec and Firefox was the only major browser to implement it ({{bug(1166728)}}).</li> + <li>Our experimental implementation of {{cssxref('mask-position')}} now supports animation of this property ({{bug(1273804)}}). It is still available only on Nightly.</li> + <li>The three values <code>isolate</code>, <code>isolate-override</code>, and <code>plaintext</code> of the {{cssxref("unicode-bidi")}} have been unprefixed ({{bug(1141895)}}).</li> + <li>In quirk mode, the bullet of a list now inherit the size of the list, like in standard mode ({{bug(648331)}}).</li> + <li>Changed behavior of the {{cssxref(":in-range")}} and {{cssxref(":out-of-range")}} pseudo-classes to not match disabled or read-only inputs ({{bug(1264157)}}).</li> + <li>Unprefixed {{cssxref(":any-link")}} pseudo-class {{bug(843579)}}.</li> + <li>Implemented <code>space</code> value of {{cssxref("border-image-repeat")}} ({{bug(720531)}}).</li> +</ul> + +<h3 id="JavaScript">JavaScript</h3> + +<ul> + <li>The ES2015 {{jsxref("Symbol.hasInstance")}} property has been implemented ({{bug(1054906)}}).</li> + <li>The ES2017 {{jsxref("Object.getOwnPropertyDescriptors()")}} method has been implemented ({{bug(1245024)}}).</li> + <li>The behavior of \W in {{jsxref("RegExp")}} with unicode and ignoreCase flags is changed to match recent draft spec. Now it doesn't match to K, S, k, s, and KELVIN SIGN (U+212A), and LATIN SMALL LETTER LONG S (U+017F) ({{bug(1281739)}}).</li> +</ul> + +<h3 id="InterfacesAPIsDOM">Interfaces/APIs/DOM</h3> + +<h4 id="DOM_HTML_DOM">DOM & HTML DOM</h4> + +<ul> + <li>The {{domxref("HTMLInputElement.webkitdirectory")}} property is now supported ({{bug(1258489)}}).</li> + <li>Support <code>once</code> option for {{domxref("EventTarget.addEventListener()")}} ({{bug(1287706)}}).</li> +</ul> + +<h4 id="Canvas">Canvas</h4> + +<p><em>No change.</em></p> + +<h4 id="WebGL">WebGL</h4> + +<ul> + <li>The {{domxref("EXT_shader_texture_lod")}} WebGL extension has been implemented ({{bug(1111689)}}).</li> +</ul> + +<h4 id="IndexedDB">IndexedDB</h4> + +<p><em>No change.</em></p> + +<h4 id="Service_Workers">Service Workers</h4> + +<ul> + <li>The {{domxref("WindowClient.navigate()")}} method has been implemented. This method lets you open a specified URL into a client window which is being controlled by the service worker ({{bug(1218148)}}).</li> +</ul> + +<h4 id="WebRTC">WebRTC</h4> + +<ul> + <li>The {{domxref("RTCDataChannel.stream")}} property has been removed. This was replaced with {{domxref("RTCDataChannel.id")}} in <a href="/en-US/docs/Mozilla/Firefox/Releases/24">Firefox 24</a>, but was supported for backward compatibility. Please be sure to update your code to use the <code>id</code> property if you haven't done so yet.</li> +</ul> + +<h4 id="New_APIs">New APIs</h4> + +<p><em>No change.</em></p> + +<h4 id="Others">Others</h4> + +<ul> + <li>{{domxref("XMLHttpRequest.getResponseHeader()")}} and {{domxref("XMLHttpRequest.getAllResponseHeaders()")}} now also return empty headers by default. This can be controlled via the preference <code>network.http.keep_empty_response_headers_as_empty_string</code> ({{bug(918721)}}).</li> +</ul> + +<h3 id="MathML">MathML</h3> + +<p><em>No change.</em></p> + +<h3 id="SVG">SVG</h3> + +<p><em>No change.</em></p> + +<h3 id="AudioVideo">Audio/Video</h3> + +<p><em>No change.</em></p> + +<h2 id="HTTP">HTTP</h2> + +<ul> + <li>The experimental (and deprecated) <a href="https://en.wikipedia.org/wiki/SPDY">SPDY</a> 3.1 is now disable by default {{bug(1287132)}}.</li> + <li>Support for {{HTTPHeader("X-Content-Type-Options")}} has been added ({{bug(471020)}}).</li> +</ul> + +<h2 id="Networking">Networking</h2> + +<ul> + <li>The {{htmlattrxref("ping", "a")}} attribute of {{htmlelement("a")}} element is now abiding by the <code><a href="https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives#connect-src">connect-src</a></code> <a href="https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives">CSP 1.1 policy directive</a> ({{bug(1100181)}}).</li> + <li>Support of the <code><a href="https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives#sandbox">sandbox</a></code> <a href="/en-US/docs/Web/Security/CSP">CSP</a> directive has been added ({{bug(671389)}}).</li> +</ul> + +<h2 id="Segurança"><span class="short_text" id="result_box" lang="pt"><span>Segurança</span></span></h2> + +<p><span class="short_text" id="result_box" lang="pt"><span>Nenhuma mudança</span><span>.</span></span></p> + +<h2 id="Changes_for_add-on_and_Mozilla_developers">Changes for add-on and Mozilla developers</h2> + +<h3 id="Interfaces">Interfaces</h3> + +<p><em>No change.</em></p> + +<h3 id="XUL">XUL</h3> + +<p><em>No change.</em></p> + +<h3 id="JavaScript_code_modules">JavaScript code modules</h3> + +<p><em>No change.</em></p> + +<h3 id="XPCOM">XPCOM</h3> + +<p><em>No change.</em></p> + +<h3 id="Outroas">Outroas</h3> + +<p><em>No change.</em></p> + +<h2 id="Veja_também"><span class="short_text" id="result_box" lang="pt"><span>Veja também</span></span></h2> + +<ul> + <li><a href="https://www.fxsitecompat.com/en-US/versions/50">Site Compatibility for Firefox 50</a></li> +</ul> + +<h2 id="Versões_mais_antigas"><span class="short_text" id="result_box" lang="pt"><span>Versões mais antigas</span></span></h2> + +<p>{{Firefox_for_developers(49)}}</p> diff --git a/files/pt-br/mozilla/firefox/releases/57/index.html b/files/pt-br/mozilla/firefox/releases/57/index.html new file mode 100644 index 0000000000..3d579a546e --- /dev/null +++ b/files/pt-br/mozilla/firefox/releases/57/index.html @@ -0,0 +1,301 @@ +--- +title: Firefox Quantum 57 for developers +slug: Mozilla/Firefox/Releases/57 +translation_of: Mozilla/Firefox/Releases/57 +--- +<div>{{FirefoxSidebar}}</div> + +<div>This article provides information about the changes in Firefox 57 (a.k.a. Firefox Quantum) that will affect developers. Firefox 57 was released on November 14, 2017.</div> + +<div> </div> + +<h2 id="Firefox_57_Firefox_Quantum">Firefox 57 === Firefox Quantum</h2> + +<p>O Firefox 57 recebeu o nome de lançamento <strong>Quantum</strong>, após o projeto de engenharia Firefox <a href="https://wiki.mozilla.org/Quantum">Quantum</a> que tem como objetivo reconstruir o Firefox a partir do zero, trazendo consigo grande desempenho, estabilidade e melhorias visuais. This is the first version of Firefox to ship some of these improvements, so we wanted to mark the occasion.</p> + +<div class="blockIndicator note"> +<p><strong>Nota:</strong> Para ler mais sobre os recursos do Quantum nesta versão, veja: <a href="https://hacks.mozilla.org/2017/09/firefox-quantum-developer-edition-fastest-firefox-ever/">Firefox Quantum Developer Edition: the fastest Firefox ever with Photon UI and better tooling</a> por Dan Callahan.</p> +</div> + +<p><a href="https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/">Firefox's new parallel CSS engine</a> — também conhecido como <strong>Quantum CSS</strong> ou <strong>Stylo</strong> ─ está habilitado por padrão no Firefox 57 para desktop, com versões móveis do Firefox para seguir mais tarde. Os desenvolvedores não devem notar nada significativamente diferente, além de toda uma série de melhorias de desempenho. Existem, no entanto, algumas pequenas diferenças funcionais no Stylo, implementado para corrigir o comportamento não padronizado do Gecko que deve ser eliminado. Nos reportaremos tais diferenças nas páginas de referência e nas notas de lançamento conforme apropriado (veja {{anch("Quantum CSS notes")}}).</p> + +<h2 id="Changes_for_Web_developers">Changes for Web developers</h2> + +<h3 id="Ferramentas_de_desenvolvimento">Ferramentas de desenvolvimento</h3> + +<p>Sem mudanças.</p> + +<h3 id="HTML">HTML</h3> + +<ul> + <li>Os types {{htmlelement("input")}} <a href="/pt-BR/docs/Web/HTML/Element/Input/data">date</a> e <a href="/pt-BR/docs/Web/HTML/Element/Input/time">time</a> agora estão habilitados em todos builds. ({{bug("1399036")}})</li> +</ul> + +<h3 id="CSS">CSS</h3> + +<ul> + <li>Os valores <code>minimal-ui</code> e <code>standalone</code> do media query <a href="/pt-BR/docs/Web/CSS/@media/display-mode">display-mode</a> agora são suportados ({{bug(1369815)}}). Veja também o <a href="/pt-BR/docs/Web/Manifest#display">Web app manifest <code>display</code> field</a>.</li> + <li>As propriedades {{CSSxRef("grid-row-gap")}} e {{CSSxRef("grid-column-gap")}} não são mais redefinidas pelo {{CSSxRef("grid")}} de forma abreviada ({{bug(1387410)}}).</li> + <li>A preferência <code>layout.css.clip-path-shapes.enabled</code> foi removida ({{bug(1399767)}}). Esta preferência permite desabilitar a {{CSSxRef("<basic-shape>")}} suportado em {{CSSxRef("clip-path")}}. Este suporte foi enviado no Firefox 54 e não pode mais ser desativado.</li> +</ul> + +<h4 id="Quantum_CSS_notes">Quantum CSS notes</h4> + +<p>Following bugs have been fixed in Quantum:</p> + +<ul> + <li>Radial gradient values like <code>radial-gradient(circle gold,red)</code> will work in the old Gecko style system, even though they shouldn't because of the missing comma between <code>circle</code> and <code>gold</code> ({{bug(1383323)}}). </li> + <li>When you animate an offscreen element onscreen but specify a delay, Gecko does not repaint on some platforms, e.g. Windows ({{bug(1383239)}}). </li> + <li>In Gecko, {{htmlelement("details")}} elements can't be made open by default using the <code>open</code> attribute if they have an {{CSSxRef("animation")}} active on them ({{bug(1382124)}}).</li> + <li>In Gecko, {{CSSxRef("transition", "transitions")}} will not work when transitioning from a {{CSSxRef("text-shadow")}} with a color specified to a <code>text-shadow</code> without a color specified ({{bug(726550)}}).</li> + <li>In Gecko, cancelling a filling animation (e.g. with <code>animation-fill-mode: forwards</code> set) can trigger a transition set on the same element, although only once (see {{bug(1192592)}} and <a href="https://bug1192592.bmoattachments.org/attachment.cgi?id=8843824">these test cases</a> for more information). In general declarative animations should not trigger transitions. </li> + <li>Animations using em units are not affected by changes to the {{CSSxRef("font-size")}} on the animated element's parent in Gecko, whereas they should be ({{bug(1254424)}}). </li> + <li>Gecko also deals with <code>font-size</code> inheritance differently from Quantum CSS, meaning that for some language settings inherited font sizes end up being smaller than expected (see {{bug(1391341)}}). </li> + <li>Gecko reuses the same mechanism used when parsing a url-token when parsing the <code>domain()</code> or <code>url-prefix()</code> URL matching functions for a {{CSSxRef("@document", "@-moz-document")}} rule. Quantum CSS does not use the same mechanism and it does not consider tokens invalid when they contain brackets or quotes ({{bug(1362333)}}).</li> + <li>In Gecko, when you set a system font as the value of a canvas 2D context's {{DOMxRef("CanvasRenderingContext2D.font", "font")}} (e.g. <code>menu</code>), getting the font value fails to return the expected font (it returns nothing). This has been fixed in Quantum. ({{bug(1374885)}}).</li> + <li>In Gecko, when you create a detached subtree (e.g. a {{htmlelement("div")}} created using {{DOMxRef("Document.createElement","createElement()")}} that is not yet inserted into the DOM), the subtree's root element is set as a block-level element. In Quantum CSS this is set as inline, as per spec ({{bug(1374994)}}).</li> + <li>In Gecko, {{CSSxRef("calc")}} expressions are rejected — causing the value to be invalid — when used as the radius component of a {{CSSxRef("radial-gradient")}} function ({{bug(1376019)}}).</li> + <li>In Gecko, <code>calc(1*2*3)</code> is not parsed successfully; Quantum CSS fixes this ({{bug(1379467)}}).</li> + <li>In Quantum CSS, <a href="https://drafts.csswg.org/css-values-3/#calc-notation"><code>calc()</code> is supported everywhere that the spec explains it should be</a> ({{bug(1350857)}}). In Gecko it is not.</li> + <li>Gecko has a bug whereby the {{CSSxRef("::before")}} and {{CSSxRef("::after")}} pseudo-elements are still generated even if the {{CSSxRef("content")}} property value is set to <code>normal</code> or <code>none</code>. As per spec, they shouldn't be ({{bug(1387931)}}).</li> + <li>Another Gecko bug means that the {{CSSxRef("background-position")}} property can't be transitioned between two values containing different numbers of {{CSSxRef("<position>")}} values, for example <code>background-position: 10px 10px;</code> and <code>background-position: 20px 20px, 30px 30px;</code> (see {{bug(1390446)}}). </li> +</ul> + +<h3 id="SVG">SVG</h3> + +<p>Sem mudanças.</p> + +<h3 id="JavaScript">JavaScript</h3> + +<ul> + <li>O não-padronizado {{JSxRef("Statements/for_each...in", "for each...in")}} (E4X) loop foi removido. Por favor, use o {{JSxRef("Statements/for...of", "for...of")}} ao invés disso e veja <a href="/en-US/docs/Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated">Warning: JavaScript 1.6's for-each-in loops are deprecated</a> para ajudar na migração. ({{bug(1083470)}}).</li> + <li>Os métodos {{JSxRef("Object.prototype.watch()")}} e {{JSxRef("Object.unwatch", "unwatch()")}} estão descontinuados, agora lançará um alerta(warning) quando usado, e será removido em breve. ({{bug(934669)}}).</li> + <li>Os objetos não-padronizados Iterator e StopIteration assim como o protocolo de iteração legado foram removidos ({{bug(1098412)}}).</li> + <li>Async generator está agora ativado. ({{bug(1352312)}}).</li> + <li>A sintaxe for await (...of...) está agora ativado. ({{bug(1352312)}}).</li> +</ul> + +<h4 id="Novas_APIs">Novas APIs</h4> + +<ul> + <li>A {{DOMxRef("PerformanceObserver")}} está habilitado por padrão(default). ({{bug(1386021)}}).</li> + <li>As interfaces {{DOMxRef("AbortController")}} e {{DOMxRef("AbortSignal")}} (conhecidos como o Abort API) foram adicionados, permitindo requisições DOM (tal como<a href="/pt-BR/docs/Web/API/WindowOrWorkerGlobalScope/fetch"> fetch requests</a>) ser abortado se desejar. ({{bug(1378342)}}).</li> + <li>[2] O <a href="/pt-BR/docs/Web/API/Storage_API">Storage API</a> está implementado e habilitado por padrão(default). ({{bug(1399038)}}).</li> +</ul> + +<h4 id="DOM">DOM</h4> + +<ul> + <li>A propriedade {{DOMxRef("Selection.type")}} do <a href="/pt-BR/docs/Web/API/Selection_API">Selection API</a> está agora implementado ({{bug(1359157)}}).</li> + <li>{{DOMxRef("Document.createEvent", "Document.createEvent('FocusEvent')")}} está agora implementado ({{bug(1388069)}}).</li> + <li>A propriedade <code>files</code> da interface {{DOMxRef("HTMLInputElement")}} está agora definível ({{bug(1384030)}}).</li> + <li>O método <code>HTMLDocument.getSelection()</code> foi movido para a interface {{DOMxRef("Document.getSelection","Document")}}, por isso está disponível para documentos XML ({{bug(718711)}}).</li> + <li>O evento {{Event("messageerror")}} está agora implementado e pode ter código executado em resposta a disparar através de manipuladores de eventos implementados em destinos de mensagens ─ Veja {{DOMxRef("MessagePort.onmessageerror")}}, {{DOMxRef("DedicatedWorkerGlobalScope.onmessageerror")}}, {{DOMxRef("Worker.onmessageerror")}}, {{DOMxRef("BroadcastChannel.onmessageerror")}}, e {{DOMxRef("Window.onmessageerror")}} ({{bug(1359017)}}).</li> + <li>Quando os valores do {{DOMxRef("Headers")}} são iterados, eles são automaticamente classificados em ordem lexicográfico e valores de nomes de cabeçalho duplicados são combinados ({{bug(1396848)}}).</li> +</ul> + +<h4 id="DOM_events">DOM events</h4> + +<p>Sem mudanças.</p> + +<h4 id="Media_and_WebRTC">Media and WebRTC</h4> + +<ul> + <li>Suporte para mensagens de tamanho arbitrário (até 1GiB, apesar de 256kiB é mais interoperável) está agora suportados em {{DOMxRef("RTCDataChannel")}} através do uso da flag end-of-record (EOR) em messagens SCTP. Veja {{SectionOnPage("/en-US/docs/Web/API/WebRTC_API/Using_data_channels", "Understanding message size limits")}} para mais informações ({{bug(979417)}}). + <div class="blockIndicator note"> + <p>Porque o Firefox ainda não suporta o protocolo SCTP ndata que fornece a capacidade de intercalar mensagens SCTP de múltiplas fontes, o envio de objetos de dados grandes pode causar atrasos significativos em todos os outros tráfegos SCTP. Veja {{bug(1381145)}} para acompanhar o progresso na implementação e implementação do suporte a ndata no Firefox.</p> + </div> + </li> + <li>O método {{DOMxRef("RTCDataChannel.send()")}} pode agora lançar uma exceção <code>TypeError</code> se o tamanho da mensagem que você está tentando enviar não é compatível com o recebimento {{Glossary("user agent")}} (Isto está implementado como parte do {{bug(979417)}}).</li> + <li>O <a href="/pt-BR/docs/Web/API/MediaStream_Recording_API">MediaStream Recording API</a> foi atualizado, assim, os eventos de {{event("error")}} enviados para relatar problemas que ocorrem durante a gravação agora são do tipo {{DOMxRef("MediaRecorderErrorEvent")}}, em vez de serem eventos genéricos.</li> + <li>Atualizado a documentação ao redor {{DOMxRef("OfflineAudioContext")}} desde o seu campos construtores pode agora se especificado ao invés de uma lista de parâmetros ({{bug(1388591)}}).</li> + <li>O <a href="/pt-BR/docs/Web/API/API_Web_Audio">Web Audio API</a> agora suporta corretamente a saída multicanal ({{bug(1378070)}}).</li> +</ul> + +<h3 id="Security">Security</h3> + +<ul> + <li>URLs <code>resources://</code> não mais vazar informações ({{bug(863246)}}).</li> + <li>Data URIs agora são tratados como origens opacas únicas, em vez de herdar a origem do objeto de configuração responsável pela navegação ({{bug(1324406)}}).</li> +</ul> + +<h3 id="Plugins">Plugins</h3> + +<p>Sem mudanças.</p> + +<h3 id="Outros">Outros</h3> + +<ul> + <li>Firefox <a href="/pt-BR/docs/Mozilla/Firefox/Headless_mode">headless mode</a> agora incluídos uma flag <code>-screenshot</code> que permite você pegar screenshots de website diretamente da linha de comando ({{bug(1378010)}}).</li> +</ul> + +<h2 id="Removals_from_the_web_platform">Removals from the web platform</h2> + +<h3 id="HTML_2">HTML</h3> + +<ul> + <li><code><link rel=”preload”></code> (see <a href="/pt-BR/docs/Web/HTML/Preloading_content">Preloading content with rel="preload"</a>) foi desabilitado no Firefox 57 por causa de vários problemas de compatibilidade da web (por exemplo {{bug(1405761)}}). Espera-se que uma versão melhorada que funcione para recursos não armazenáveis em cache chegue ao Firefox 58.</li> +</ul> + +<h3 id="APIs">APIs</h3> + +<ul> + <li>Propriedade da Mozilla <a href="/pt-BR/docs/Archive/Social_API">Social API</a> foi completamente removido ({{bug(1388902)}}).</li> +</ul> + +<h3 id="SVG_2">SVG</h3> + +<p>Sem mudanças.</p> + +<h2 id="Alterações_para_add-on_e_desenvolvedores_Mozilla">Alterações para add-on e desenvolvedores Mozilla</h2> + +<div class="blockIndicator note"> +<p>Começando no Firefox 57, todo suporte para XPCOM-based add-ons foi removido. Todas as extensões devem ser convertidas no novo <a href="/pt-BR/Add-ons/WebExtensions">browser extensions</a> (também conhecido como WebExtensions) ou eles não vão funcionar.</p> +</div> + +<h3 id="WebExtensions">WebExtensions</h3> + +<p>As seguintes APIs foram adicionadas ou estendidas:</p> + +<p> </p> + +<ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks">bookmarks</a></code> + + <ul> + <li>support for separators through <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/bookmarks/BookmarkTreeNodeType">bookmarks.BookmarkTreeNodeType</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action">browser_action</a></code> + <ul> + <li><code>theme_icons</code> property for light/dark theme icons</li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction">browserAction</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction/openPopup">browserAction.openPopup()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings">browserSettings</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings/allowPopupsForUserEvents">allowPopupsForUserEvents</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings/homepageOverride">homepageOverride</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings/imageAnimationBehavior">imageAnimationBehavior</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings/newTabPageOverride">newTabPageOverride</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browsingData">browsingData</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browsingData/removeLocalStorage">browsingData.removeLocalStorage()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/clipboard">clipboard</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/clipboard/setImageData">setImageData()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities">contextualIdentities</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities/onCreated">onCreated</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities/onRemoved">onRemoved</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities/onUpdated">onUpdated</a></code></li> + <li><code>colorCode</code> and <code>iconUrl</code> in <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities/ContextualIdentity">contextualIdentitities.ContextualIdentity</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.panels">devtools.panels</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.panels/ElementsPanel/createSidebarPane">devtools.panels.ElementsPanel.createSidebarPane()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/downloads">downloads</a></code> + <ul> + <li><code>incognito</code> option in <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/downloads/download">downloads.download()</a></code></li> + <li><code>estimatedEndTime</code> property in <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/downloads/DownloadItem">downloads.DownloadItem</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/Add-ons/WebExtensions/API/find">find</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/find/find">find()</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/find/highlightResults">highlightResults()</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/find/removeHighlighting">removeHighlighting()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction/openPopup">pageAction.openPopup()</a></code></li> + <li><code><a href="/en-US/Add-ons/WebExtensions/API/privacy/websites">privacy</a></code> + <ul> + <li><code><a href="/en-US/Add-ons/WebExtensions/API/privacy/websites">websites.trackingProtectionMode</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy">proxy</a></code> + <ul> + <li><code>FindProxyForURL()</code> can now return an object</li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime">runtime</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/openOptionsPage">runtime.openOptionsPage()</a></code> support on Android</li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions">sessions</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions/setTabValue">setTabValue()</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions/getTabValue">getTabValue()</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions/removeTabValue">removeTabValue()</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions/setWindowValue">setWindowValue()</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions/getWindowValue">getWindowValue()</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sessions/removeWindowValue">removeWindowValue()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sidebarAction">sidebarAction</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/sidebarAction/open">sidebarAction.open()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage">storage</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/managed">storage.managed</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs">tabs</a></code> + <ul> + <li><code>loadReplace</code> option in <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update">tabs.update()</a></code></li> + <li><code>discarded</code> property in <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/Tab">tabs.Tab</a></code>, <code><a href="/en-US/docs/">tabs.onUpdated</a></code>, and <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query">tabs.query()</a></code></li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create">tabs.create()</a></code> can open "view-source:" URLs</li> + <li><code>openerTabId</code> property in <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/Tab">tabs.Tab</a></code>, <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create">tabs.create()</a></code>, <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query">tabs.query()</a></code>, and <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update">tabs.update()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/theme">theme</a></code> + <ul> + <li><code>colors.toolbar</code></li> + <li><code>colors.toolbar_field</code></li> + <li><code>colors.toolbar_field_text</code></li> + <li><code>colors.toolbar_text</code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/theme">theme</a></code> + <ul> + <li><code>windowId</code> option to <code><a href="/en-US/Add-ons/WebExtensions/API/theme/update">theme.update()</a></code></li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest</a></code> + <ul> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/filterResponseData">filterResponseData()</a></code></li> + <li><code>proxyInfo</code> property in <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest</a></code> events</li> + </ul> + </li> + <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/windows">windows</a></code> + <ul> + <li><code>allowScriptsToClose</code> option in <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/windows/create">windows.create()</a></code></li> + </ul> + </li> +</ul> + +<h2 id="Veja_também">Veja também</h2> + +<ul> + <li><a href="https://www.fxsitecompat.com/en-US/versions/57">Site Compatibility for Firefox 57</a></li> +</ul> + +<h2 id="Versões_anteriores">Versões anteriores</h2> + +<p>{{Firefox_for_developers(56)}}</p> diff --git a/files/pt-br/mozilla/firefox/releases/65/index.html b/files/pt-br/mozilla/firefox/releases/65/index.html new file mode 100644 index 0000000000..4583bcb8f5 --- /dev/null +++ b/files/pt-br/mozilla/firefox/releases/65/index.html @@ -0,0 +1,110 @@ +--- +title: Firefox 65 for developers +slug: Mozilla/Firefox/Releases/65 +translation_of: Mozilla/Firefox/Releases/65 +--- +<div>{{FirefoxSidebar}}{{Draft}}</div> + +<p class="summary">Este artigo fornece informações sobre as alterações no Firefox 65 que afetarão os desenvolvedores. Firefox 65 é a atual versão <a href="https://www.mozilla.org/en-US/firefox/channel/desktop/#beta" rel="noopener">Nightly do Firefox</a>, e será lançada em <a href="https://wiki.mozilla.org/RapidRelease/Calendar#Future_branch_dates" rel="noopener">29 de Janeiro, 2019</a>.</p> + +<h2 id="Mudanças_para_desenvolvedores_da_web">Mudanças para desenvolvedores da web</h2> + +<h3 id="Ferramentas_de_desenvolvimento">Ferramentas de desenvolvimento</h3> + +<h4 id="Remoções">Remoções</h4> + +<h3 id="HTML">HTML</h3> + +<p><em>No changes.</em></p> + +<h4 id="Removals">Removals</h4> + +<h3 id="CSS">CSS</h3> + +<ul> + <li>The {{cssxref("image-rendering")}} property's <code>crisp-edges</code> value has now been unprefixed ({{bug(1496617)}}).</li> + <li>A {{cssxref("scrollbar-color")}} value of <code>auto</code> now resolves to <code>auto</code>, rather than two colors ({{bug(1501418)}}).</li> +</ul> + +<h4 id="Removals_2">Removals</h4> + +<p>The <code>layout.css.shape-outside.enabled</code> pref has been removed; {{cssxref("shape-outside")}}, {{cssxref("shape-margin")}}, and {{cssxref("shape-image-threshold")}} can no longer be disabled ({{bug(1504387)}}).</p> + +<h3 id="SVG">SVG</h3> + +<p><em>No changes.</em></p> + +<h4 id="Removals_3">Removals</h4> + +<h3 id="JavaScript">JavaScript</h3> + +<h4 id="Removals_4">Removals</h4> + +<h3 id="APIs">APIs</h3> + +<p><em>No changes.</em></p> + +<h4 id="New_APIs">New APIs</h4> + +<h4 id="DOM">DOM</h4> + +<p>{{domxref("Performance.toJSON()")}} has been exposed to <a href="/en-US/docs/Web/API/Web_Workers_API">Web Workers</a> ({{bug(1504958)}}).</p> + +<h4 id="DOM_events">DOM events</h4> + +<h4 id="Service_workers">Service workers</h4> + +<p>The {{domxref("Response.redirect()")}} method now correctly throws a <code>TypeError</code> if a non-valid URL is specified as the first parameter ({{bug(1503276)}}).</p> + +<h4 id="Media_Web_Audio_and_WebRTC">Media, Web Audio, and WebRTC</h4> + +<ul> + <li>Support for <a href="/en-US/docs/Glossary/webp">WebP</a> files has been added (<a class="external external-icon" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1294490" rel="noopener" title="FIXED: Implement WebP image support">bug 1294490</a>).</li> +</ul> + +<h4 id="Canvas_and_WebGL">Canvas and WebGL</h4> + +<h4 id="Removals_5">Removals</h4> + +<ul> + <li><a href="/en-US/docs/Web/Guide/Events/Mutation_events">Mutation events</a> have been disabled on shadow trees ({{bug(1489858)}}).</li> + <li>The non-standard {{domxref("MediaStream")}} property <code>currentTime</code> has been removed ({{bug(1502927)}}).</li> +</ul> + +<h3 id="Security">Security</h3> + +<p><em>No changes.</em></p> + +<h4 id="Removals_6">Removals</h4> + +<h3 id="Plugins">Plugins</h3> + +<p><em>No changes.</em></p> + +<h4 id="Removals_7">Removals</h4> + +<h3 id="Other">Other</h3> + +<p><em>No changes.</em></p> + +<h4 id="Removals_8">Removals</h4> + +<h2 id="Changes_for_add-on_developers">Changes for add-on developers</h2> + +<h3 id="API_changes">API changes</h3> + +<h4 id="Removals_9">Removals</h4> + +<h3 id="Manifest_changes">Manifest changes</h3> + +<h4 id="Removals_10">Removals</h4> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="https://www.fxsitecompat.com/en-CA/versions/65/">Site compatibility for Firefox 65</a></li> +</ul> + +<h2 id="Older_versions">Older versions</h2> + +<p>{{Firefox_for_developers(65)}}</p> diff --git a/files/pt-br/mozilla/firefox/releases/index.html b/files/pt-br/mozilla/firefox/releases/index.html new file mode 100644 index 0000000000..c6a7dd1bf2 --- /dev/null +++ b/files/pt-br/mozilla/firefox/releases/index.html @@ -0,0 +1,8 @@ +--- +title: Notas de lançamento do Firefox para o desenvolvedor +slug: Mozilla/Firefox/Releases +translation_of: Mozilla/Firefox/Releases +--- +<div>{{FirefoxSidebar}}</div><p>Esta página fornece links para artigos "Firefox X para desenvolvedores" para cada versão do Firefox. Estas notas permitem ver que recursos foram adicionados e os erros eliminados em cada versão do Firefox.</p> + +<div class="multiColumnList">{{ListSubpages("",1,1,1)}}</div> diff --git a/files/pt-br/mozilla/firefox_para_android/index.html b/files/pt-br/mozilla/firefox_para_android/index.html new file mode 100644 index 0000000000..1091ee1cd3 --- /dev/null +++ b/files/pt-br/mozilla/firefox_para_android/index.html @@ -0,0 +1,50 @@ +--- +title: Firefox para Android +slug: Mozilla/Firefox_para_Android +tags: + - Android + - Fennec + - Firefox + - Mobile +translation_of: Mozilla/Firefox_for_Android +--- +<p>Para mais e mais pessoas, os <span id="result_box" lang="pt"><span class="hps">dispositivos móveis</span> <span class="hps">são a principal forma</span><span>,</span> <span class="hps">ou mesmo</span> <span class="hps">a única maneira</span><span>,</span> <span class="hps">para</span> <span class="hps">acessar a web.</span> </span><a class="link-https" href="https://www.mozilla.org/en-US/mobile/"> Firefox para Android </a><span id="result_box" lang="pt"><span class="alt-edited">(codinome Fennec) é um navegador aberta, hackeável, baseada em padrões</span></span>, tal como a versão Firefox para desktop.</p> +<p>Firefox para Android <span id="result_box" lang="pt"><span class="alt-edited">constrói a sua interface do usuario a parti de widgets nativos do Android em vez da XUL: isso melhora muito o desempenho, especialmente o tempo de incialização, e o consumo de memória.</span></span></p> +<h2 id="Contribuindo_com_o_Firefox_para_Android">Contribuindo com o Firefox para Android</h2> +<p><span id="result_box" lang="pt"><span class="hps">O principal</span> <span class="hps">ponto de partida</span> <span class="hps">para obter informações sobre</span> <span class="hps">o projeto Firefox para Android em si</span></span> é a <a class="link-https" href="https://wiki.mozilla.org/Mobile/Get_Involved">página "<span id="result_box" lang="pt"><span>Envolva-se</span></span>"</a>.</p> +<p><span id="result_box" lang="pt"><span class="hps">Você pode</span> <span class="hps">ajudar a criar</span> <span class="hps">e melhorar</span> o <span class="hps">Firefox</span> <span class="hps">para</span> <span class="hps">Android:</span> </span></p> +<ul> + <li>Ajude-nos com o <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_for_Android/Compatibility_Testing" title="https://developer-new.mozilla.org/en-US/docs/Mozilla/Firefox_for_Android/Compatibility_Testing">teste de compatibilidade</a></li> + <li>Inscreva-se para a <a href="https://mail.mozilla.org/listinfo/mobile-firefox-dev">lista de discursão mobile-firefox-dev</a></li> + <li><span id="result_box" lang="pt"><span class="hps alt-edited">Contate a equipe</span> </span>através do <a class="link-irc" href="irc://irc.mozilla.org/#mobile">IRC</a></li> + <li><span id="result_box" lang="pt"><span class="hps">Junte-se</span> <span class="hps">a nossa</span> </span><a class="link-https" href="https://wiki.mozilla.org/Mobile/Notes">reunião de desenvolvimento de Quarta-feira</a></li> + <li><span id="result_box" lang="pt"><span class="hps">Mantenha-se atualizado</span> <span class="hps">com as notícias</span> <span class="hps">do projeto no</span></span> <a class="external" href="http://planet.firefox.com/mobile/">Planet Firefox Mobile</a>, <a href="http://fennecnightly.tumblr.com/">Tumblr</a> e <a class="link-https" href="https://twitter.com/FennecNightly" title="https://twitter.com/#!/mozmobile">Twitter</a></li> + <li><a href="https://wiki.mozilla.org/Mobile/Fennec/Android" title="https://wiki.mozilla.org/Mobile/Fennec/Android">Construa e hackei o Firefox para Android</a> (Fennec)</li> +</ul> +<h2 id="Desenvolver_para_a_web_movel">Desenvolver para a web movel</h2> +<p>Nós começamos a montar um guia para a <a href="/En/Mobile" title="En/Mobile">criação de websites para dispositivos móveis</a>.</p> +<p><span id="result_box" lang="pt"><span class="hps">Com o Firefox</span> <span class="hps">para</span> <span class="hps">Android</span><span>, você tem</span> <span class="hps">acesso</span> a <span class="hps">uma série de</span> <span class="hps">APIs</span> <span class="hps">que expõem</span> <span id="result_box" lang="pt"><span class="hps alt-edited">as capacidades</span> <span class="hps">ocultas do</span> <span class="hps">dispositivo,</span></span><span> diminuíndo a distância</span><span class="hps"> entre a</span> <span class="hps">Web</span> <span class="hps">e</span> <span class="hps">aplicações nativas</span><span>:</span> </span></p> +<ul> + <li><a class="external" href="http://hacks.mozilla.org/2012/02/using-the-battery-api-part-of-webapi/" title="http://hacks.mozilla.org/2012/02/using-the-battery-api-part-of-webapi/">Bateria</a></li> + <li><a href="/en/DOM/Using_the_Camera_API" title="Using the Camera API">Camera</a></li> + <li><a href="/en/API/WebTelephony/Introduction_to_WebTelephony" title="Introduction to WebTelephony">WebTelefonia</a></li> + <li><a href="/en/API/WebSMS/Introduction_to_WebSMS" title="Introduction to WebSMS">WebSMS</a></li> + <li><a href="/En/Using_geolocation" title="Using geolocation">Geolocalização</a></li> + <li><a href="/en/Detecting_device_orientation" title="https://developer.mozilla.org/en/detecting_device_orientation">Orientação</a></li> + <li><a href="/en/WebAPI/Web_Activities" title="Web Activities">Web Activities</a></li> +</ul> +<p><span id="result_box" lang="pt"><span class="hps">Para testar</span> <span class="hps">seu site</span> <span class="hps">no Firefox</span> <span class="hps">para</span> <span class="hps">Android</span></span>, você pode <a class="link-https" href="https://www.mozilla.org/en-US/mobile/">instalá-lo em um dispositivo Android</a> ou <a class="link-https" href="https://wiki.mozilla.org/Mobile/Fennec/Android/Emulator">executá-lo no seu desktop usando o Emulador Android</a>.</p> +<h2 id="Constua_complementos_móveis">Constua <span class="short_text" id="result_box" lang="pt"><span class="hps alt-edited">complementos </span></span>móveis</h2> +<p><a href="/en/Extensions/Mobile" title="en/Extensions/Firefox_on_Android">Firefox para Android suporta complementos</a> using the exact same <a href="/en/Extensions" title="en/Extensions">extension system</a> used by all other Gecko-based applications. We did not invent a new add-on system. This means that building an add-on for Firefox on Android is the <a href="/en/Building_an_Extension" title="en/Building_an_Extension">same process</a> that would be used for desktop Firefox. Add-ons that work with desktop Firefox <strong>do not</strong> automatically work in Firefox on Android. The user interfaces are just too different.</p> +<div class="note"> + Firefox on Android has a unique application identifier which must be used in <code>install.rdf</code>. The identifier is <code>{aa3c5121-dab2-40e2-81ca-7ea25febc110}</code></div> +<p>Both classic restart-required and newer <a href="/en/Extensions/Bootstrapped_extensions" title="en/Extensions/Bootstrapped_extensions">restartless</a> add-on approaches are supported. Using the restartless approach is preferred whenever possible because the user experience is far superior to forcing an application restart when installing or removing an add-on.</p> +<h3 id="Descrição_rápida"><span class="short_text" id="result_box" lang="pt"><span class="hps">Descrição rápida</span></span></h3> +<ul> + <li>There is no visible XUL in the UI, so using overlays to try to add or change UI is useless.</li> + <li>Internal code and objects, like <code>gBrowser</code>, do not exist. Look at the Firefox on Android <a class="external" href="http://mxr.mozilla.org/mozilla-central/source/mobile/android/chrome/content/browser.js" title="http://mxr.mozilla.org/mozilla-central/source/mobile/android/chrome/content/browser.js"><code>browser.js</code></a> file to learn about the internals. Much of the same fundamental functionality exists.</li> + <li>Services like <code>nsIPromptService</code> and <code>nsIAlertsService</code> are implemented to use native Android UI.</li> + <li>There is a simple JavaScript object, called <a href="/en/Extensions/Mobile/API/NativeWindow" title="en/Extensions/Mobile/NativeWindow"><code>NativeWindow</code></a>, that allows you to manipulate parts of the native Android UI.</li> +</ul> +<h2 id="Obtenha_ajuda_para_o_Firefox_para_Android"><span class="short_text" id="result_box" lang="pt"><span class="hps">Obtenha ajuda</span> <span class="hps alt-edited">para o Firefox</span> <span class="hps">para</span> <span class="hps">Android</span></span></h2> +<p>Documentation and tutorials for using and troubleshooting Firefox for Android are available on the <a class="external" href="http://support.mozilla.org/mobile" title="http://support.mozilla.org/mobile">Mozilla Support website</a>.</p> diff --git a/files/pt-br/mozilla/gecko/faq/index.html b/files/pt-br/mozilla/gecko/faq/index.html new file mode 100644 index 0000000000..2a607010f8 --- /dev/null +++ b/files/pt-br/mozilla/gecko/faq/index.html @@ -0,0 +1,201 @@ +--- +title: Gecko FAQ +slug: Mozilla/Gecko/FAQ +translation_of: Gecko/FAQ +--- +<h3 id="What_is_Gecko.3F" name="What_is_Gecko.3F">O que é o Gecko?</h3> + +<p><a href="/en/Gecko" title="en/Gecko">Gecko</a> é uma engine open source projetada para suportar os padrões abertos da Internet, como o <a href="/en/HTML" title="en/HTML">HTML</a> 4, <a href="/en/CSS" title="en/CSS">CSS</a> 1 e 2, o W3C <a href="/en/DOM" title="en/DOM">DOM</a>, <a href="/en/XML" title="en/XML">XML</a>, <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a>, e outros.</p> + +<p>Gecko é usado em múltiplos navegadores, incluindo Mozilla Firefox, SeaMonkey, Camino e outros. O Gecko está continuamente em desenvolvimento na mozilla.org. O Gecko foi previamente conhecido pelos codinomes "Raptor" e "NGLayout"; o novo nome foi escolhido devido a uma disputa por quebra de marca registrada.</p> + +<p>Para mais informações, veja o {{ interwiki('wikipedia', 'Gecko_(layout_engine)', 'artigo na Wikipedia sobre o Gecko') }}.</p> + +<h3 id="What_is_a_layout_engine.3F" name="What_is_a_layout_engine.3F">O que é um mecanismo de layout?</h3> + +<p>Basically, a {{ interwiki('wikipedia', 'Layout_engine', 'layout engine') }} takes content (such as HTML, XML, image files, applets, and so on) and formatting information (such as Cascading Style Sheets, presentational HTML tags, etc.) and displays the formatted content on the screen. It paints the browser's content area, which is the blank area inside the browser window's chrome.</p> + +<p>Formally, a layout engine defines the placement policy for a document and places content on a page. Gecko's core is a very fast layout engine. Gecko also offers the ability to parse various document types (HTML, XML, SVG, etc), advanced rendering capabilities including compositing and transformations, and support for embedded JavaScript and <a href="/en/Plugins" title="en/Plugins">plugins</a>.</p> + +<p>Gecko is so fast and so powerful that it's being used to create the user interface of some applications ("chrome") as well. In other words, Gecko will not only be displaying the document's content, but it will also be painting the scrollbars, toolbars, and menus on the screen as well. For more information see <a href="/en/XUL" title="en/XUL">XUL</a>.</p> + +<h3 id="How_is_a_layout_engine_like_Gecko_different_from_a_Web_browser.3F" name="How_is_a_layout_engine_like_Gecko_different_from_a_Web_browser.3F">How is a layout engine like Gecko different from a Web browser?</h3> + +<p>Gecko provides the foundation needed to display content on the screen, including a layout engine and a complementary set of browser components. However, Gecko does not package all of these components alongside other interface modules in a coherent, user-friendly application (including menus, toolbars, etc.), such as Firefox.</p> + +<p>mozilla.org assembles the necessary components into its applications, such as Firefox, Thunderbird, SeaMonkey, Camino, which are available for free download from mozilla.org. Netscape released its own version of the browser branded as Netscape Navigator. Other companies release their own software and hardware products that use Gecko. See <a href="/en/XULRunner_Hall_of_Fame" title="en/XULRunner_Hall_of_Fame">XULRunner Hall of Fame</a> for a partial list of application that use Gecko via XULRunner.</p> + +<p>Third parties such as ISVs and hardware vendors will pick and choose the components they want to use in their applications or hardware devices. Certain browser components are not provided as part of Gecko, such as bookmarks, history, address book, etc. However, the source for all those components is available for free download from mozilla.org.</p> + +<h3 id="Why_was_Gecko_built.3F" name="Why_was_Gecko_built.3F">Why was Gecko built?</h3> + +<p>The original Mozilla browser, first released as Navigator 1.0, was developed rapidly by a small team that was passionate about creating the next killer app, and they succeeded. Now that the web has evolved, a new generation layout engine was needed upon which future products could be built. Gecko enables a pioneering new class of dynamic content that is more interactive and offers greater presentation control to Web developers, using open and recommended Internet standards instead of proprietary APIs. You are encouraged to join this team by getting involved.</p> + +<h3 id="How_is_mozilla.org_using_Gecko.3F" name="How_is_mozilla.org_using_Gecko.3F">How is mozilla.org using Gecko?</h3> + +<p>mozilla.org will assemble the Gecko layout engine and other browser components into the Mozilla browser application.</p> + +<h3 id="How_does_Mozilla_use_Gecko.3F" name="How_does_Mozilla_use_Gecko.3F">How does Mozilla use Gecko?</h3> + +<p>Gecko lies at the heart of Mozilla and Firefox browsers, as well as others, powering all of the individual components. Gecko technologies will also power the display of the mozilla.com portal site, speedily delivering more exciting content and services. Gecko's architecture will serve Mozilla well into the future, enabling faster time to market, more innovation, less costly development, easier distribution and updating, and better cross platform support.</p> + +<h3 id="How_can_other_companies_and_organizations_use_Gecko.3F" name="How_can_other_companies_and_organizations_use_Gecko.3F">How can other companies and organizations use Gecko?</h3> + +<p>Because Gecko is small, lightweight, and open source, other companies and organizations can easily reuse it. Many hardware vendors are creating devices with network access and wish to include web browsing functionality. Likewise, many software developers want to include Web browsing capability in their applications, but don't want to independently develop browser software. These developers can pick and choose the browser components they want from among those that Gecko offers, and package these components alongside their own within their finished products.</p> + +<h3 id="Which_open_standards_is_the_Gecko_development_project_working_to_support.2C_and_to_what_extent_does_it_support_them.3F" name="Which_open_standards_is_the_Gecko_development_project_working_to_support.2C_and_to_what_extent_does_it_support_them.3F">Which open standards is the Gecko development project working to support, and to what extent does it support them?</h3> + +<p>By the end of calendar year 2000, Gecko is expected to support the following recommended open Internet standards fully except for the areas noted below and open bugs documented in <a class="link-https" href="https://bugzilla.mozilla.org/">Bugzilla</a>:</p> + +<ul> + <li>HTML 4.0 - full support except for: + <ul> + <li>elements: BDO, BASEFONT</li> + <li>attributes: shape attribute on the A element, abbr, axis, headers, scope-row, scope-col, scope-rowgroup, scope-colgroup, charoff, datasrc, datafld, dataformat, datapagesize, summary, event, dir, align on table columns, label attribute of OPTION, alternate text of AREA elements, longdesc</li> + <li>various metadata attributes: cite, datetime, lang, hreflang</li> + <li>bidirectional text layout, which is only used in Hebrew and Arabic (IBM has begun work to add bidi support in a future release)</li> + </ul> + </li> + <li>Style Sheets + <ul> + <li>CSS 1 - full support, except for: + <ul> + <li>the application of styles to HTML column elements</li> + <li>the ability to turn off author styles</li> + <li>the names of certain Mozilla extension pseudo-classes lack the moz- prefix</li> + </ul> + </li> + <li>CSS 2 - partial support is expected and has already been built into Gecko, including support for CSS2 positioning, but no commitment has been made to achieve a specific level of support</li> + </ul> + </li> + <li>DOM + <ul> + <li>Level 0</li> + <li>Level 1 Core: full support + <ul> + <li>making EntityReferences available through DOM1; per a provision of the DOM1 spec for XML implementations, Entities will be automatically expanded inline and therefore not available through DOM1; our implementation extrapolates this provision to apply to EntityReferences as well</li> + <li>For more information, see the <a href="/en/DOM" title="en/DOM">DOM in Mozilla</a></li> + </ul> + </li> + <li>Level 1 HTML</li> + <li>DOM 2 - Most of it has already been implemented in Gecko, including support for DOM 2 events, the DOM 2 Style, and the DOM2 Core. DOM 3 support is also planned for a future release.</li> + </ul> + </li> + <li>XML 1.0: full support, except for processing to manipulate default attributes</li> + <li>RDF: full support, except for aboutEach, aboutEachPrefix, and parseType</li> + <li>JavaScript 1.5, including ECMA-262 Edition 3 (ECMAscript) compliance, except for Date.toDateString and Date.toTimeString, which are not implemented</li> + <li>Transfer protocols: HTTP 1.1 (including gzip compression), FTP</li> + <li>SSL</li> + <li>Unicode</li> + <li>OJI (Open Java Interface)</li> + <li>Image formats + <ul> + <li>PNG</li> + <li>GIF</li> + <li>JPEG, PJPEG</li> + </ul> + </li> +</ul> + +<h3 id="Does_.22full_support.22_mean_that_Gecko_has_zero_bugs_today_or_will_have_zero_bugs_at_some_point_in_the_future.3F" name="Does_.22full_support.22_mean_that_Gecko_has_zero_bugs_today_or_will_have_zero_bugs_at_some_point_in_the_future.3F">Does "full support" mean that Gecko has zero bugs today or will have zero bugs at some point in the future?</h3> + +<p>Of course not. As Robert O'Callahan notes in {{ Bug(25707) }}, "Full HTML4/CSS1 compliance can't mean '100% bug free'. If it does, no-one will ever ship a fully compliant browser."</p> + +<p>Because web pages can be arbitrarily long and complex and have arbitrarily deeply nested markup, it will always be possible to construct web pages that do not display in a given browser the way the specifications would recommend. So long as QA testing and test case development continues, there will always be known bugs at any given point in time in the open-source Gecko codebase, and it follows that every commercial product that has ever shipped and ever will ship based on Gecko will have known bugs at the time of its release. (The same principle of course applies to other browser engine development projects and products based upon them as well.)</p> + +<p>Known bugs in the open-source Gecko codebase are documented in <a class="link-https" href="https://bugzilla.mozilla.org/">Bugzilla</a>. Here are some links to lists of reported bugs related to the standards mentioned above; be aware that these raw lists of open in-process bugs will inevitably include some duplicate, out of date, unreproducible, invalid, and incorrectly tagged reports:</p> + +<div class="note">The links themselves are probably outdated too.</div> + +<ul> + <li><a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Layout&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">Layout</a> component tracks content layout bugs that may be related to a variety of specifications</li> + <li>HTML 4.0 + <ul> + <li><a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Form+Submission&component=HTML+Element&component=HTML+Form+Controls&component=HTMLFrames&component=HTMLTables&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">Elements, Form Controls, Frames, Tables, and Form Submission</a></li> + <li>bug reports marked with the <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=html4&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">html4 keyword</a></li> + <li>"meta bug" for tracking outstanding issues with <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=7954">HTML 4.01 compliance</a></li> + </ul> + </li> + <li>CSS: <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Style+System&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">Style System</a> component (see also bug reports marked with the <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Style+System&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=css1&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">css1</a>, <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Style+System&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=css2&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">css2</a>, and <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Style+System&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=css3&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">css3</a> keywords)</li> + <li>DOM: see <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=DOM+Level+0&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">DOM0</a>, <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=DOM+Level+1&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">DOM1</a>, <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=DOM+Level+2&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">DOM2</a> and <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Event+Handling&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">Event Handling</a> components</li> + <li><a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=XML&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">XML</a></li> + <li><a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=RDF&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">RDF</a></li> + <li>core JavaScript language interpreter (<a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Javascript+Engine&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">JavaScript engine</a>)</li> + <li>HTTP 1.1 compliance bugs should generally be found on the <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Necko&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">Networking, Networking - General, and Networking: Cache</a> components</li> + <li><a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=OJI&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">OJI</a></li> + <li><a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=ImageLib&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">Imagelib</a> image library (see also <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=JPEG+Image+Handling&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">JPEG Image Handling</a> and <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=PNG+Image+Handling&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">PNG Image Handling</a>)</li> + <li>SSL-related bugs are filed on the <a class="link-https" href="https://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&component=Security%3A+Crypto&short_desc=&short_desc_type=substring&long_desc=&long_desc_type=substring&bug_file_loc=&bug_file_loc_type=substring&status_whiteboard=&status_whiteboard_type=substring&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&newqueryname=&order=Reuse+same+sort+as+last+time">Crypto</a> component</li> +</ul> + +<p>For information about the known bugs of a specific commercial product based on Gecko, see that product's release notes.</p> + +<h3 id="How_does_Gecko_format_XML_documents.3F" name="How_does_Gecko_format_XML_documents.3F">How does Gecko format XML documents?</h3> + +<p>Gecko supports the use of CSS and <a href="/en/XSLT" title="en/XSLT">XSLT</a> to format XML documents.</p> + +<p>For XML documents without associated CSS or XSLT, Gecko displays the pretty-printed source of the document.</p> + +<h3 id="How_does_Gecko_help_content_developers.3F" name="How_does_Gecko_help_content_developers.3F">How does Gecko help content developers?</h3> + +<p>Content developers are sick and tired of developing and testing every single web page multiple times in order to support the different, incompatible, proprietary DOMs of browsers from different vendors. They have been demanding that all vendors fully support the open standards listed above so that they can</p> + +<ol> + <li>have a rich, powerful formatting system and object model at their disposal, and</li> + <li>"write once, view anywhere."</li> +</ol> + +<p>Gecko's robust support for these standards makes Gecko the platform of choice for web content and web application developers worldwide.</p> + +<h3 id="Are_Gecko.27s_APIs_based_on_ActiveX.3F_COM.3F_JavaBeans.3F" name="Are_Gecko.27s_APIs_based_on_ActiveX.3F_COM.3F_JavaBeans.3F">Are Gecko's APIs based on ActiveX? COM? JavaBeans?</h3> + +<p>Gecko is reusable on all platforms thanks to <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a>, a subset of COM that works across platforms. COM, developed by Digital and later adopted by Microsoft, is the de facto standard for modular interfaces on Windows platforms.</p> + +<p>Additionally, on the Windows platform, Gecko's XPCOM interfaces are wrapped in an ActiveX control that VB developers can utilize (ActiveX wrappers are not available on other platforms because ActiveX is a Windows-only technology).</p> + +<p>A JavaBean wrapper is not currently under development, but there is nothing in Gecko's architecture that precludes such development in the future. Source code and documentation for these interfaces are available through mozilla.org.</p> + +<p>For future embedding API plans, see {{ interwiki('wikimo', 'Mozilla_2:Embedding_APIs', 'wikimo:Mozilla 2:Embedding APIs') }}.</p> + +<h3 id="Are_Gecko.27s_APIs_compatible_with_Microsoft.27s_Trident_APIs.3F" name="Are_Gecko.27s_APIs_compatible_with_Microsoft.27s_Trident_APIs.3F">Are Gecko's APIs compatible with Microsoft's Trident APIs?</h3> + +<p>Gecko's XPCOM interfaces are different than Microsoft's. The most important differences between the two models involve reflection of the Document Object Model (DOM) in the interfaces.</p> + +<p>Microsoft's Trident interfaces reflect the DOM in a proprietary API, whereas Gecko exposes the DOM according to the W3C's recommended standard. Other incompatibilities exist. Adam Lock created a partial compatibility layer that may enable developers to more easily migrate from Microsoft's engine to the Gecko engine.</p> + +<h3 id="Which_platforms_does_Gecko_run_on.3F" name="Which_platforms_does_Gecko_run_on.3F">Which platforms does Gecko run on?</h3> + +<p>Gecko runs today on Win32 (Windows XP Service Pack 2, Windows Vista, Windows 7, Windows 8, Windows 8.1), Mac OS X 10.5 and later, and Linux. OEMs and contributors from the Net participating in mozilla.org are porting Gecko to other platforms. Such porting efforts are underway for Solaris, HP/UX, AIX, Irix, OS/2, OpenVMS, BeOS, and Amiga, among others.</p> + +<p>Older versions of Gecko supported earlier versions of Win32 and Mac OS X.</p> + +<h3 id="What_are_the_components_of_Gecko.3F" name="What_are_the_components_of_Gecko.3F">What are the components of Gecko?</h3> + +<p>Gecko includes the following components:</p> + +<ul> + <li>Document parser (handles HTML and XML)</li> + <li>Layout engine with content model</li> + <li>Style system (handles CSS, etc.)</li> + <li>JavaScript runtime (<a href="/en/SpiderMonkey" title="en/SpiderMonkey">SpiderMonkey</a>)</li> + <li>Image library</li> + <li>Networking library (<a href="/en/Necko" title="en/Necko">Necko</a>)</li> + <li>Platform-specific graphics rendering and widget sets for Win32, X, and Mac</li> + <li>User preferences library</li> + <li>Mozilla Plug-in API (<a href="/en/Plugins" title="en/Plugins">NPAPI</a>) to support the Navigator plug-in interface</li> + <li>Open Java Interface (OJI), with Sun Java 1.2 JVM</li> + <li><a href="/en/RDF" title="en/RDF">RDF</a> back end</li> + <li>Font library</li> + <li>Security library (<a href="/en/NSS" title="en/NSS">NSS</a>)</li> +</ul> + +<div class="originaldocinfo"> +<h2 id="Original_Document_Information" name="Original_Document_Information">Original Document Information</h2> + +<ul> + <li>Author(s): Angus</li> + <li>Other Contributors: Ekrock, Vidur, Hidday, Drunclear</li> + <li>Copyright Information: Portions of this content are © 1998–2006 by individual mozilla.org contributors; content available under a Creative Commons license</li> +</ul> +</div> + +<p>{{ languages( { "ja": "ja/Gecko_FAQ", "zh-cn": "cn/Gecko_FAQ" } ) }}</p> diff --git a/files/pt-br/mozilla/gecko/index.html b/files/pt-br/mozilla/gecko/index.html new file mode 100644 index 0000000000..bc9ead9919 --- /dev/null +++ b/files/pt-br/mozilla/gecko/index.html @@ -0,0 +1,73 @@ +--- +title: Gecko +slug: Mozilla/Gecko +tags: + - Gecko + - Mozilla +translation_of: Mozilla/Gecko +--- +<p><strong>Gecko </strong>é o nome do motor de layout desenvolvido pelo Projeto Mozilla. Ele foi primeiramente nomeado NGLayout.</p> +<p>A função do Gecko é ler o conteúdo da web, como <a href="https://developer.mozilla.org/en-US/docs/HTML" title="HTML">HTML</a>, <a href="https://developer.mozilla.org/en-US/docs/CSS" title="CSS">CSS</a>, <a href="https://developer.mozilla.org/en-US/docs/XUL" title="XUL">XUL</a>, <a href="https://developer.mozilla.org/en-US/docs/JavaScript" title="JavaScript">JavaScript</a> e renderiza-lo na tela do usuário, ou imprimí-la. Em aplicações baseadas em XUL o Gecko também é usado para renderizar a interface do usuário.</p> +<p>Gecko é utilizado em muitas aplicações, incluindo alguns navegadores, como o Firefox, SeaMonkey, etc. (Para a lista completa, veja em <a class="external" href="http://en.wikipedia.org/wiki/Gecko_%28layout_engine%29#Web_browsers" rel="external" title="http://en.wikipedia.org/wiki/Gecko_(layout_engine)#Web_browsers">Artigo da Wikipedia do Gecko</a>.) Produtos usando a mesma versão do Gecko tem suporte idêntico aos padrões.</p> +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 class="Documentation" id="Documentação">Documentação</h2> + <dl> + <dt> + <a href="/en-US/docs/Gecko_FAQ" title="Gecko_FAQ">Perguntas frequentes Gecko</a></dt> + <dd> + Perguntas frequentes sobre o Gecko.</dd> + <dt> + <a href="/en-US/docs/Gecko_DOM_Reference" title="https://developer.mozilla.org/en-US/docs/Gecko_DOM_Reference">Referência DOM Gecko</a></dt> + <dd> + Referência do DOM.</dd> + <dt> + <a href="/en-US/docs/Gecko-Specific_DOM_Events" title="Gecko/Gecko event reference">Referência de eventos Gecko</a></dt> + <dd> + Referência de eventos usados em aplicações Gecko e Mozilla;</dd> + <dd> + Para convenção-web de eventos DOM, veja <a href="https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference" title="DOM/DOM event reference">Referência de evento DOM</a>.</dd> + <dt> + <a href="/en-US/docs/Gecko/Versions" title="Gecko/Versions">Versões Gecko e versões de aplicação</a></dt> + <dd> + Versões do Gecko e das aplicações que ele é usado.</dd> + <dt> + <a class="external" href="/en-US/docs/Introduction_to_Layout_in_Mozilla" title="https://developer.mozilla.org/en-US/docs/Introduction_to_Layout_in_Mozilla">Introdução ao Layout na Mozilla</a></dt> + <dd> + Conversa técnica sobre layout.</dd> + <dt> + <a href="/en-US/docs/Embedding_Mozilla" title="Embedding_Mozilla">Integrando Mozilla</a></dt> + <dd> + Usando Gecko na sua aplicação.</dd> + <dt> + <a href="/en-US/docs/Character_Sets_Supported_by_Gecko" title="Character Sets Supported by Gecko">Conjuntos de caracteres suportados pelo Gecko</a></dt> + <dd> + Uma lista de caracteres suportados pelo Gecko.</dd> + <dt> + <a href="/en-US/docs/Gecko/HTML_parser_threading" title="Gecko/HTML_parser_threading">HTML parser threading</a></dt> + <dd> + Descrição de multithreading no HTML parser.</dd> + <dt> + {{interwiki('wikimo', 'Gecko:Home_Page', 'Página inicial Gecko na MozillaWiki')}}</dt> + <dd> + Início para desenvolvedores ativos. Roteiros e mais recursos atualizados.</dd> + </dl> + <p><span class="alllinks"><a href="/en-US/docs/tag/Gecko" title="tag/Gecko">Ver tudo...</a></span></p> + </td> + <td> + <h2 class="Community" id="Comunidade">Comunidade</h2> + <ul> + <li>Veja fóruns da Mozilla... {{DiscussionList("dev-tech-layout", "mozilla.dev.tech.layout")}}</li> + </ul> + <h2 class="Related_Topics" id="Tópicos_relacionados">Tópicos relacionados</h2> + <dl> + <dd> + <a href="/en-US/docs/Web_Standards" title="Web_Standards">Convenções da Web</a>, <a href="/en-US/docs/XUL" title="XUL">XUL</a>, <a href="/en-US/docs/Embedding_Mozilla" title="Embedding_Mozilla">Integrando Mozilla</a>, <a href="/en-US/docs/Developer_Guide" title="Developing_Mozilla">Desenvolvendo Mozilla</a></dd> + </dl> + </td> + </tr> + </tbody> +</table> +<p> </p> diff --git a/files/pt-br/mozilla/implementing_pontoon_in_a_mozilla_website/index.html b/files/pt-br/mozilla/implementing_pontoon_in_a_mozilla_website/index.html new file mode 100644 index 0000000000..ca96828d17 --- /dev/null +++ b/files/pt-br/mozilla/implementing_pontoon_in_a_mozilla_website/index.html @@ -0,0 +1,76 @@ +--- +title: Implementing Pontoon in a Mozilla project +slug: Mozilla/Implementing_Pontoon_in_a_Mozilla_website +tags: + - Localização +translation_of: Mozilla/Implementing_Pontoon_in_a_Mozilla_website +--- +<p>O <a class="external external-icon" href="https://pontoon.mozilla.org">Pontoon</a> é uma ferramenta de tradução (l10n) baseado na web do tipo O-Que-Você-Ver-É-O-Que-Você-Tem (WYSIWYG), usada para traduzir conteúdo web. Na Mozilla, usamos o Pontoon para traduzir os sites da Mozilla e a interface de aplicativo do Firefox OS, conhecida como Gaia. O Pontoon é uma ferramenta muito simples e intuitiva que requer pouca ou nenhuma habilidade técnica para usar no trabalho de tradução, o que vai reduzir seu tempo para publicar versões localizadas de seu projeto. Aqui nós vamos discutir como você pode adicionar Pontoon a seu projeto Mozilla.</p> + +<div class="note"> +<p><strong>Você gostaria de melhorar o Pontoon?</strong> Aprenda como se envolver no <a href="https://github.com/mozilla/pontoon">GitHub</a>.</p> +</div> + +<div class="note"> +<p><strong>Primeiros passos com l10n em seu projeto?</strong> Veja o wiki sobre <a href="https://wiki.mozilla.org/L10n:NewProjects">fazer com que seu projeto seja localizado</a>.</p> +</div> + +<h2 id="A._Torne_seu_projeto_localizável">A. Torne seu projeto localizável</h2> + +<p>Nós percebemos que estas já são consideradas <a class="external external-icon" href="https://mozweb.readthedocs.org/en/latest/reference/l10n.html">boas práticas</a> padrões para localização de projetos no Mozilla, mas sentimos que é bom adicioná-las aqui como um pequeno lembrete.</p> + +<ol> + <li>Certifique-se que seu projeto possui suporte a um dos frameworks de l10n (<a class="external external-icon" href="https://www.gnu.org/software/gettext/">gettext</a>, <a class="external external-icon" href="https://docs.oasis-open.org/xliff/xliff-core/v2.0/xliff-core-v2.0.html">XLIFF</a>, <a class="external external-icon" href="https://projectfluent.org/">L20n</a>, <a class="external external-icon" href="https://github.com/mozilla-l10n/langchecker/wiki/.lang-files-format">lang</a>, <a class="external external-icon" href="https://wikipedia.org/wiki/.properties">properties</a>, etc.).</li> + <li>Extraia strings localizáveis para os arquivos de recursos.</li> + <li>Envie os arquivos de recursos para um repositório (SVN, HG ou Git). + <ul> + <li>Pastas de locale individuais devem estar localizadas no memos nível de aninhamento da árvore de diretório. Locales fontes precisam ser chamados <code>templates</code>, <code>en</code> ou <code>en-US</code>. Você pode criar uma pasta de locales decicada para esse propósito. Código de locale não pode ser parte do nome do arquivo.</li> + <li>Padrão correto: + <pre>/locales/{codigo_locale}/caminho/para/extensão</pre> + </li> + <li>Padrão incorreto: + <pre>/locales/{codigo_locale}/camiho/para/arquivo.{codigo_locale}.extensão</pre> + </li> + </ul> + </li> + <li>Certifique-se de que o Pontoon possui acesso de escrita ao repositório. + <ul> + <li>Se estiver usando GitHub, adicione <a class="external external-icon" href="https://github.com/mozilla-pontoon">mozilla-pontoon</a> ou <a href="https://github.com/orgs/mozilla/teams/pontoon-l10n-robots">pontoon-l10n-robots</a> como colaborador de seu projeto.</li> + </ul> + </li> +</ol> + +<h2 id="B._opcional_Habilite_localização_em-página_de_seu_projeto_web">B. (opcional) Habilite localização em-página de seu projeto web</h2> + +<ol> + <li>Vincule um script de seu elemento HTML <code><body></code>, de forma que Pontoon possa falar com seu site, detectar o conteúdo e torná-lo localizável "in loco". Você só precisa fazer isso no ambiente que será usado para a localização na-página. Por exemplo, no servidor de preparo: + + <ul> + <li> + <pre id="line1"><span> </span><span><<span class="start-tag">script</span> <span class="attribute-name">src</span>="<a class="attribute-value">https://pontoon.mozilla.org/pontoon.js</a>"</span><span>></<span class="end-tag">script</span>></span></pre> + </li> + </ul> + </li> + <li>Se seu site usa <a href="/pt-BR/docs/Web/HTTP/CSP">CSP</a>, por favor certifique-se de que o seguinte é permitido para o domínio <code>pontoon.mozilla.org</code>: + <ol> + <li>carregar dentro do iframe</li> + <li>carregar CSS remotas</li> + <li>carregar imagens remotas</li> + </ol> + </li> + <li>Se seu site usa o cabeçalho <a href="/docs/Web/HTTP/Headers/X-Frame-Options">X-Frame-Options</a>, por favor certifique-se de carregar dentro do iframe é permitido para o domínio <code>pontoon.mozilla.org</code>.</li> + <li>Certifique-se de que seu site oferece suporte a HTTPS. É gratuito, automatizado e aberto. <a href="https://letsencrypt.org/">Vamos criptografar</a>!</li> +</ol> + +<h2 id="C._Adicione_seu_projeto_ao_Pontoon">C. Adicione seu projeto ao Pontoon</h2> + +<p>Seu projeto já está pronto para ser configurado no Pontoon. Por favor preencha um relatório de problema em <a class="external external-icon" href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Localization%20Infrastructure%20and%20Tools&component=Administration%20%2F%20Setup">Localization Infrastructure and Tools :: Administration / Setup</a> e forneça a seguinte informação:</p> + +<ul> + <li>Nome do projeto</li> + <li>URL do repositório</li> + <li>Lista de locales requisitadas</li> + <li>URL do site, incluindo todas as URLs de subpáginas (apenas se usando localização na-página)</li> +</ul> + +<p>Para mais detalhes, por favor entre em contato com a <a class="external external-icon" href="mailto:pontoon-team@mozilla.com">Project Management Team</a>.</p> diff --git a/files/pt-br/mozilla/index.html b/files/pt-br/mozilla/index.html new file mode 100644 index 0000000000..c3bb3aee1d --- /dev/null +++ b/files/pt-br/mozilla/index.html @@ -0,0 +1,13 @@ +--- +title: Mozilla +slug: Mozilla +tags: + - Iniciando + - Mozilla + - NeedsTranslation + - TopicStub +translation_of: Mozilla +--- +<p>Os artigos abaixo incluem conteúdos sobre como baixar e compilar os códigos fontes da Mozilla. Além disso, encontrará artigos úteis sobre como o código funciona, como desenvolver complementos para aplicativos Mozilla e afins.</p> + +<p>{{LandingPageListSubpages}}</p> diff --git a/files/pt-br/mozilla/javascript_code_modules/index.html b/files/pt-br/mozilla/javascript_code_modules/index.html new file mode 100644 index 0000000000..fd00be0bda --- /dev/null +++ b/files/pt-br/mozilla/javascript_code_modules/index.html @@ -0,0 +1,83 @@ +--- +title: Módulos de código JavaScript +slug: Mozilla/JavaScript_code_modules +translation_of: Mozilla/JavaScript_code_modules +--- +<div>{{gecko_minversion_header("1.9")}}</div> + +<p>JavaScript code modules let multiple privileged JavaScript scopes share code. For example, a module could be used by Firefox itself as well as by extensions, in order to avoid code duplication.</p> + +<h2 id="General_topics">General topics</h2> + +<dl style="-moz-columns: 2; columns: 2;"> + <dt><a href="/en-US/docs/JavaScript_code_modules/Using" title="./Using">Using JavaScript code modules</a></dt> + <dd>An introduction to how to use JavaScript code modules.</dd> + <dt><a href="/en-US/docs/Components.utils.import" title="Components.utils.import">Component.utils.import</a></dt> + <dd>How to import a JavaScript code module.</dd> + <dt><a href="/en-US/docs/Components.utils.unload" title="Components.utils.unload">Component.utils.unload</a> {{gecko_minversion_inline("7.0")}}</dt> + <dd>How to unload a JavaScript code module.</dd> + <dt><a href="/en-US/docs/Code_snippets/Modules" title="Code_snippets/Modules">Code snippets: Modules</a></dt> + <dd>Examples of how to use code modules.</dd> + <dt><a class="external" href="http://wiki.mozilla.org/Labs/JS_Modules">Mozilla Labs JS Modules</a></dt> + <dd>This page features a list of JS modules, along with download links and documentation, that extension developers can use in their code.</dd> +</dl> + +<dl> +</dl> + +<h2 id="Standard_code_modules">Standard code modules</h2> + +<dl style="-moz-columns: 2; columns: 2;"> + <dt><a href="/en-US/docs/Addons/Add-on_Manager" title="Addons/Add-on_Manager">AddonManager.jsm</a> {{gecko_minversion_inline("2.0")}}</dt> + <dd>Interface to install, manage, and uninstall add-ons.</dd> + <dt><a href="/en-US/docs/Addons/Add-on_Repository" title="Addons/Add-on Repository">AddonRepository.jsm</a> {{gecko_minversion_inline("2.0")}}</dt> + <dd>Allows searching of the add-ons repository.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Assert.jsm" title="./Assert.jsm">Assert.jsm</a> {{gecko_minversion_inline("28.0")}}</dt> + <dd>Implements the <a href="http://wiki.commonjs.org/wiki/Unit_Testing/1.1" title="http://wiki.commonjs.org/wiki/Unit_Testing/1.1">CommonJS Unit Testing specification version 1.1</a>, which provides a basic, standardized interface for performing in-code logical assertions with optional, customizable error reporting.</dd> + <dt><a href="/en-US/docs/Mozilla/js-ctypes" title="./ctypes.jsm">ctypes.jsm</a> {{fx_minversion_inline("3.6")}}</dt> + <dd>Provides an interface that allows JavaScript code to call native libraries without requiring the development of an XPCOM component.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/CustomizableUI.jsm" title="./ctypes.jsm">CustomizableUI.jsm</a> {{fx_minversion_inline("29")}}</dt> + <dd>Allows you to interact with customizable buttons and items in Firefox's main window UI.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/DeferredTask.jsm" title="./DeferredTask.jsm">DeferredTask.jsm</a> {{gecko_minversion_inline("18.0")}}</dt> + <dd>Run a task after a delay.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Dict.jsm" title="./Dict.jsm">Dict.jsm</a> {{gecko_minversion_inline("5.0")}}</dt> + <dd>Provides an API for key/value pair dictionaries.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/DownloadLastDir.jsm" title="./DownloadLastDir.jsm">DownloadLastDir.jsm</a> {{gecko_minversion_inline("2.0")}}</dt> + <dd>Provides the path to the directory into which the last download occurred.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Downloads.jsm" title="./Downloads.jsm">Downloads.jsm</a> {{gecko_minversion_inline("23.0")}}</dt> + <dd>Provides a single entry point to interact with the downloading capabilities of the platform.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm" title="./FileUtils.jsm"><span style="font-weight: bold;">FileUtils.jsm</span></a> {{gecko_minversion_inline("1.9.2")}}</dt> + <dd>Provides helpers for dealing with files.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Geometry.jsm" title="./Geometry.jsm">Geometry.jsm</a> {{gecko_minversion_inline("2.0")}}</dt> + <dd>Provides routines for performing basic geometric operations on points and rectangles.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/ISO8601DateUtils.jsm" title="./ISO8601DateUtils.jsm">ISO8601DateUtils.jsm</a></dt> + <dd>Provides routines to convert between JavaScript <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Date" title="JavaScript/ Reference/Global Objects/Date"><code>Date</code></a> objects and ISO 8601 date strings.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Log.jsm">Log.jsm</a> (formerly log4moz) {{gecko_minversion_inline("27.0")}}</dt> + <dd>Provides a <a href="https://en.wikipedia.org/wiki/Log4j">log4j</a> style API for logging log messages to various endpoints, such as the <a href="/en-US/docs/Tools/Browser_Console">Browser Console</a> or a file on disk. This module was formerly</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/NetUtil.jsm" title="./NetUtil.jsm"><span style="font-weight: bold;">NetUtil.jsm</span></a></dt> + <dd>Provides helpful networking utility functions, including the ability to easily copy data from an input stream to an output stream asynchronously.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/openLocationLastURL.jsm" title="./openLocationLastURL.jsm">openLocationLastURL.jsm</a> {{gecko_minversion_inline("1.9.1.4")}}</dt> + <dd>Provides access to the last URL opened using the "Open Location" option in the File menu.</dd> + <dt><a href="/Mozilla/JavaScript_code_modules/OSFile.jsm" title="/en-US/docs/JavaScript_OS.File">OSFile.jsm</a> {{gecko_minversion_inline("16.0")}}</dt> + <dd>Provides routines to access files. Read, write, rename, create directories, ...</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/PerfMeasurement.jsm" title="./PerfMeasurement.jsm">PerfMeasurement.jsm</a> {{fx_minversion_inline("4.0")}}</dt> + <dd>Provides access to low-level hardware and OS performance measurement tools.</dd> + <dt><a href="/en-US/docs/Localization_and_Plurals" title="Localization and Plurals">PluralForm.jsm</a></dt> + <dd>Provides an easy way to get the correct plural forms for the current locale, as well as ways to localize to a specific plural rule.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/PopupNotifications.jsm" title="./PopupNotifications.jsm">PopupNotifications.jsm</a> {{gecko_minversion_inline("2.0")}}</dt> + <dd>Provides an easy way to present non-modal notifications to users.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm" title="./Promise.jsm">Promise.jsm</a> {{gecko_minversion_inline("25.0")}}</dt> + <dd>Implements the <a class="external" href="https://github.com/promises-aplus/promises-spec/blob/1.0.0/README.md" title="https://github.com/promises-aplus/promises-spec/blob/1.0.0/README.md">Promises/A+</a> proposal as known in April 2013.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Services.jsm" title="./Services.jsm">Services.jsm</a> {{gecko_minversion_inline("2.0")}}</dt> + <dd>Provides getters for conveniently obtaining access to commonly-used services.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/source-editor.jsm" title="./source-editor.jsm">source-editor.jsm</a> {{fx_minversion_inline("11.0")}}</dt> + <dd>The Source Editor is used by developer tools such as the Style Editor; this interface implements the editor and lets you interact with it.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Sqlite.jsm" title="./Sqlite.jsm">Sqlite.jsm</a> {{gecko_minversion_inline("20.0")}}</dt> + <dd>A Promise-based API to {{ interface("mozIStorage") }}/SQLite.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Task.jsm" title="./Task.jsm">Task.jsm</a> {{gecko_minversion_inline("17.0")}}</dt> + <dd>Implements a subset of <a class="external" href="http://taskjs.org/" title="http://taskjs.org/">Task.js</a> to make sequential, asynchronous operations simple, using the power of JavaScript's <code>yield</code> operator.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/Timer.jsm" title="/en-US/docs/Mozilla/JavaScript_code_modules/Timer.jsm">Timer.jsm </a>{{gecko_minversion_inline("22.0")}}</dt> + <dd>A pure JS implementation of <code>window.setTimeout</code>.</dd> + <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm" title="./XPCOMUtils.jsm">XPCOMUtils.jsm</a></dt> + <dd>Contains utilities for JavaScript components loaded by the JS component loader.</dd> +</dl> diff --git a/files/pt-br/mozilla/js-ctypes/index.html b/files/pt-br/mozilla/js-ctypes/index.html new file mode 100644 index 0000000000..b531577cb3 --- /dev/null +++ b/files/pt-br/mozilla/js-ctypes/index.html @@ -0,0 +1,97 @@ +--- +title: js-ctypes +slug: Mozilla/js-ctypes +translation_of: Mozilla/js-ctypes +--- +<p>{{jsctypesSidebar("Introduction")}}</p> + +<p><strong>js-ctypes</strong> permite que código de aplicação e extensão chamar e receber de código nativo escrito em C. Suporte a C++ é possível através de ponteiros <code>vtable </code>veja <a href="/en-US/docs/Mozilla/js-ctypes/Examples/Using_COM_from_js-ctypes">Usando COM a partir de js-ctypes</a>. Para uma discussão sobre suporte extendido ao C++ support veja {{bug("505907")}}. Outro que se tornou possível através do js-ctypes é o JNI, que foi elaborado no a seção <a href="/en-US/docs/Mozilla/JavaScript_code_modules/JNI.jsm">JNI.jsm</a> e não na seção js-ctypes por causa da abstração do JSM abstraindo todo o js-ctypes. Diferentemente de um componente binário XPCOM, ela permite aos desenvolvedores à embarcar um único binário para utilização em diversas versões do Firefox.</p> + +<div class="note"><strong>Note:</strong> js-ctypes somente está disponível a partir de código chrome; isso significa que ctypes não está disponível para websites, somente para código de aplicação e extensão.</div> + +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 class="Documentation" id="Documentation" name="Documentation">Documentação</h2> + + <p class="summary">Se você é novato ao js-ctypes, e não tem nenhuma idéia do que se trata, as páginas que você precisa ler primeiro são - <a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/ctypes.open">ctypes.open </a>seguido por <a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Standard_OS_Libraries">Bibliotecas de SO Padrão</a></p> + + <dl> + <dt><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes" title="Mozilla/js-ctypes/Using_js-ctypes">Usando JS-Ctypes</a></dt> + <dd> + <ul> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/ctypes.open">ctypes.open</a> + <ul> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/ctypes.open#Custom_Native_File">Arquivo Nativo Customizado</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Standard_OS_Libraries">Bibliotecas de SO Padrão</a> + <ul> + <li><a href="/en-US/Add-ons/Code_snippets/Finding_Window_Handles">Encontrando Manipuladores de Janelas</a></li> + </ul> + </li> + </ul> + </li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Working_with_data">Trabalhando com Dados</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Working_with_ArrayBuffers">Trabalhando com ArrayBuffers</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_types">Declarando Tipoes</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_and_calling_functions">Declarando e chamando Funções</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/Callbacks">Declarando e Usando Callbacks</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Type_conversion">Conversão de Tipoes</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/Memory_Management">Gerenciamento de Memória</a></li> + <li><a href="/en-US/docs/Web/API/ChromeWorker">ChromeWorker</a></li> + </ul> + </dd> + <dt><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference" title="js-ctypes/js-ctypes_reference">Referência JS-ctypes</a></dt> + <dd>Um guia de referência à API js-ctypes. + <ul> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/ABI">ABI</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/CData">CData</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/CType">CType</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/ctypes">ctypes</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/FunctionType">FunctionType</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/Int64">Int64</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/Library">Library</a></li> + <li><a href="/en-US/docs/Mozilla/js-ctypes/js-ctypes_reference/UInt64">UInt64</a></li> + </ul> + </dd> + </dl> + + <p><span class="alllinks"><a href="/en-US/docs/tag/js-ctypes" title="tag/js-ctypes">Ver Tudo...</a></span></p> + + <h2 class="Tools" id="Examples" name="Examples"><a href="/en-US/docs/Mozilla/js-ctypes/Examples" title="Mozilla/js-ctypes/Examples">Exemplos</a></h2> + + <dl> + <dt><a href="/en-US/docs/Mozilla/js-ctypes/Examples/Add_to_iPhoto" title="Mozilla/js-ctypes/Examples/Add_to_iPhoto">Adicionar ao iPhoto</a></dt> + <dd>Uma extensão Firefox que usa js-ctypes para chamar rotinas do framework Carbon and Core Foundation no Mac OS X para implememtar uma funcionalidade de "Adicionar imagem ao iPhoto" no Firefox.</dd> + <dt><a href="/en-US/docs/Mozilla/js-ctypes/Examples/Using_C_structs_and_pointers">Usando estruturas C e ponteiros</a></dt> + <dd> </dd> + <dt><a href="/en-US/docs/Mozilla/js-ctypes/Examples/Using_COM_from_js-ctypes">Usando COM a partir de js-ctypes</a></dt> + <dd> </dd> + <dt><a href="/en-US/docs/Mozilla/js-ctypes/Examples/Using_Objective-C_from_js-ctypes">Usando Objective-C a partir de js-ctypes</a></dt> + </dl> + + <dl> + <dt><a href="https://github.com/ochameau/jscpptypes">Github :: ochameau / jscpptypes</a></dt> + <dd>Uma biblioteca distorcida para usar C++ a partir de js-ctypes</dd> + </dl> + </td> + <td> + <h2 class="Community" id="Community" name="Community">Comunidade</h2> + + <ul> + <li>Ver os forums Mozilla ...{{DiscussionList("dev-extensions", "mozilla.dev.extensions")}}</li> + <li><a href="irc://moznet/jsctypes">IRC - #jsctypes</a></li> + <li><a href="http://stackoverflow.com/questions/tagged/jsctypes">Stackoverflow - jsctypes</a></li> + </ul> + + <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Tópicos Relacionados</h2> + + <ul> + <li><a href="/en-US/docs/Mozilla/Tech/XPCOM/Guide/Changes_in_Gecko_2.0#Binary_components">XPCOM em Gecko 2 - Componentes Binários</a></li> + </ul> + </td> + </tr> + </tbody> +</table> + +<p> </p> diff --git a/files/pt-br/mozilla/localization/guia_rápido/index.html b/files/pt-br/mozilla/localization/guia_rápido/index.html new file mode 100644 index 0000000000..917e513127 --- /dev/null +++ b/files/pt-br/mozilla/localization/guia_rápido/index.html @@ -0,0 +1,33 @@ +--- +title: Localização Guia Rápido +slug: Mozilla/Localization/Guia_rápido +tags: + - Guide + - Localization + - Mozilla + - Translation +translation_of: Mozilla/Localization/Quick_start_guide +--- +<p><span id="result_box" lang="pt"><span class="hps">Bem-vindo ao</span> <span class="hps">Mozilla</span> <span class="hps">localização</span></span> (Abreviado como L10n em Inglês)!</p> +<p><span id="result_box" lang="pt"><span class="hps">Se você está aqui</span> <span class="hps">para iniciar</span> <span class="hps">a sua própria</span> <span class="hps">localização</span> <span class="hps">no projeto</span> <span class="hps">Mozilla</span> <span class="hps">ou</span> <span class="hps">para se juntar aos</span> <span class="hps">esforços de uma</span> <span class="hps">localização</span> <span class="hps">existente</span><span>, você veio</span> <span class="hps">ao lugar certo</span><span>.</span></span> <span id="result_box" lang="pt"><span class="hps">Este manual</span> <span class="hps">contém todas as</span> <span class="hps">informações básicas</span><span>, técnicas</span> <span class="hps">que você precisa para</span> <span class="hps">se envolver</span> <span class="hps">no programa</span> <span class="hps">l10n</span> <span class="hps">Mozilla.</span> <span class="hps alt-edited">Vamos guiá-lo</span> <span class="hps">através dos</span> <span class="hps">passos para começar</span><span>, a partir da</span> <span class="hps">configuração do ambiente</span> <span class="hps">inicial para</span> <span class="hps">testar e</span> <span class="hps">lançar</span> <span class="hps">sua própria</span> <span class="hps">localização</span><span>.</span> <span class="hps">Ao longo do caminho</span><span>, você vai aprender</span> <span class="hps">sobre a variedade de</span> <span class="hps">projetos que você pode</span> <span class="hps">contribuir e</span> <span class="hps">as ferramentas utilizadas para</span> <span class="hps">localizá-los</span><span>.</span></span></p> +<p><span class="short_text" id="result_box" lang="pt"><span class="hps">Quando chegarmos</span> <span class="hps">a exemplos específicos</span></span>, <span class="short_text" id="result_box" lang="pt"><span class="hps">vamos</span> <span class="hps">levá-los</span> <span class="hps">ao projeto</span> <span class="hps">Firefox</span></span>, como o projeto é mais amplamente localizado na Mozilla. <span id="result_box" lang="pt"><span class="hps">Como você está perto do</span> <span class="hps">final deste guia</span><span>, você</span> <span class="hps">deve ser capaz de</span> <span class="hps">fazer uma mudança</span> <span class="hps">para</span> <span class="hps">o Firefox</span> <span class="hps">em</span> <span class="hps">sua configuração</span> <span class="hps">local e</span><span>, em seguida,</span> <span class="hps">ver a mudança</span> <span class="hps">na interface do</span> <span class="hps">Firefox</span></span>. <span id="result_box" lang="pt"><span class="hps">Quando terminar</span> <span class="hps">este guia</span><span>, você terá</span> <span class="hps">todas as ferramentas necessárias</span> <span class="hps">para</span> <span class="hps">começar a contribuir</span><span>!</span></span></p> +<p><span id="result_box" lang="pt"><span class="hps">Lembre-se,</span> <span class="hps">este guia irá</span> <span class="hps">instruí-lo</span></span> apenas sobre os aspectos técnicos da Mozilla L10n. Visite a página do <a class="link-https" href="https://wiki.mozilla.org/L10n:Localization_Process" title="https://wiki.mozilla.org/L10n:Overview">Processo L10n</a> para aprender sobre o processo inteiro.</p> +<div style="width: 25%; background-color: #4AA02C; float: left; display: block; margin: 1.5%; border: 1px solid #C4C295; text-align: center; padding: 2.5%; padding-top: 0px;"> + <h2 id="Configuração_Inicial"><a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/Initial_setup?redirectlocale=en-US&redirectslug=Localization_Quick_Start_Guide%2FInitial_setup" title="en/Localization_Quick_Start_Guide/Initial_setup">Configuração Inicial</a></h2> + Tecnologia de preparação para o trabalho de localização.</div> +<div style="width: 25%; background-color: #A2BFF4; float: left; display: block; margin: 1.5%; border: 1px solid #C4C295; text-align: center; padding: 2.5%; padding-top: 0px;"> + <h2 id="Fase_da_tradução"><a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/Translation_phase" title="en/Localization_Quick_Start_Guide/Translation_phase">Fase da tradução</a></h2> + <span class="short_text" id="result_box" lang="pt"><span class="hps">Localização das</span> <span class="hps">ferramentas</span> e <span class="hps">tutoriais para</span> <span class="hps">tradução</span><span>.</span></span></div> +<div style="width: 25%; background-color: orange; float: left; display: block; margin: 1.5%; border: 1px solid #C4C295; text-align: center; padding: 2.5%; padding-top: 0px;"> + <h2 id="Fase_da_garantia_de_qualidade"><a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/QA_phase" title="en/Localization_Quick_Start_Guide/QA_phase">Fase da <span class="short_text" id="result_box" lang="pt"><span class="hps">garantia de qualidade</span></span></a></h2> + Testando os tutoriais de localização.</div> +<div style="width: 92%; background-color: #C0C0C0; float: left; display: block; margin: 1.5%; border: 1px solid #C4C295; text-align: center; padding: 2.5%; padding-top: 0px;"> + <h2 id="Fase_de_liberação"><a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/Release_phase" title="en/Localization_Quick_Start_Guide/Release_phase">Fase de liberação</a></h2> + <span class="short_text" id="result_box" lang="pt"><span class="hps">Passos para</span> <span class="hps">enviar seu</span> <span class="hps">trabalho de localização</span><span>.</span></span></div> +<div style="background-color: white; border: 3px solid; display: block; padding: 20px; margin-top: 20px;"> + <span id="result_box" lang="pt"><span class="hps">Estas</span> <span class="hps">quatro etapas</span> <span class="hps">compõem</span> <span class="hps">o lado</span> <span class="hps">técnico</span> <span class="hps">do programa</span> <span class="hps">de localização</span></span>. Para saber mais sobre as etapas, clique nos links acima. Para um melhor aproveitamento, nós sugerimos que siga passo a passo começando por <a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/Initial_setup?redirectlocale=en-US&redirectslug=Localization_Quick_Start_Guide%2FInitial_setup">Configuração Inicial</a>.</div> +<p> </p> +<div class="note"> + <span id="result_box" lang="pt"><span class="hps">Nota: Este</span> <span class="hps">guia foi escrito para</span> <span class="hps">dois tipos de</span> <span class="hps">contribuintes</span><span>: Os que</span> querem <span class="hps">iniciar uma nova</span> <span class="hps">localização e</span> <span class="hps">aqueles que se integram</span> <span class="hps">a uma</span> <span class="hps">localização</span> <span class="hps">existente.</span></span> <span id="result_box" lang="pt"><span class="hps">É</span> <span class="hps">importante saber</span> <span class="hps">qual tipo de informação</span> <span class="hps">se aplica a</span> <span class="hps">qual tipo de</span> <span class="hps">contribuinte</span><span>.</span></span><span style="display: none;"> </span> <span id="result_box" lang="pt"><span class="hps">Para</span> <span class="hps">ajudá-lo a</span> <span class="hps">filtrar</span> <span class="hps">a informação</span> <span class="hps">mais aplicável</span><span>,</span> <span class="hps">note que</span> <span class="hps">todas as informações</span> <span class="hps">que são exclusivas para</span> <span class="hps">quem está começando</span> <span class="hps">uma nova</span> <span class="hps">localização</span> <span class="hps">será</span> <span class="hps">em fonte</span> <span class="hps"><span style="color: #ffa500;">laranja</span>.</span> <span class="hps">Toda a informação</span> <span class="hps">que é exclusiva para</span> <span class="hps">aqueles que se integram</span> <span class="hps">a uma</span> <span class="hps">localização</span> <span class="hps">existente será</span> <span class="hps">em fonte</span> <span class="hps"><span style="color: #0000ff;">azul</span>.</span></span></div> +<p class="note"> </p> +<p>{{ Next("Localization_Quick_Start_Guide/Initial_setup") }}</p> diff --git a/files/pt-br/mozilla/localization/guia_rápido/initial_setup/index.html b/files/pt-br/mozilla/localization/guia_rápido/initial_setup/index.html new file mode 100644 index 0000000000..ec02a3c67c --- /dev/null +++ b/files/pt-br/mozilla/localization/guia_rápido/initial_setup/index.html @@ -0,0 +1,96 @@ +--- +title: Configuração inicial +slug: Mozilla/Localization/Guia_rápido/Initial_setup +translation_of: Mozilla/Localization/Quick_start_guide/Initial_setup +--- +<div class="wiki-right-present wiki-left-closed wiki-left-none" id="wiki-column-container"> +<div class="column-container column-container-reverse"> +<div class="column-strip wiki-column" id="wiki-right"> +<div class="toc toggleable" style="width: auto;"> </div> + +<div class="toc toggleable" style="width: auto;"> </div> + +<div class="toc toggleable" id="toc" style="width: auto;"><span style="line-height: 1.5; background-color: rgb(255, 255, 255);">Você também precisa descobrir se já existe para a sua região um trabalho de localização. Aqui nós falaremos sobre as contas que precisa, bem como as ferramentas e suas configurações que você precisa antes de contribuir.</span></div> +</div> + +<div class="column-main wiki-column text-content" id="wiki-content" style="width: 959px;"> +<article id="wikiArticle"> +<h3 id="New_or_existing" style="line-height: 24px; font-size: 1.71428571428571rem;">New or existing</h3> + +<p>Before anything else, you need to know if you will be creating a new localization or joining an existing one. This will determine what information is most applicable to you throughout the rest of this guide.</p> + +<p>Here's what you do:</p> + +<p>Look through the existing <a class="external link-https external-icon" href="https://wiki.mozilla.org/L10n:Teams" title="https://wiki.mozilla.org/L10n:Teams">localization community directory</a> to see if one already exists for your locale.</p> + +<ol start="1" style="list-style-type: lower-alpha;"> + <li><span style="color: rgb(0, 0, 205);">If a community already exists, reach out to them and ask how you can help.</span></li> + <li><span style="color: rgb(255, 140, 0);">If a community doesn't exist, send an <a class="external link-https external-icon" href="https://groups.google.com/forum/?fromgroups#!forum/mozilla.dev.l10n.new-locales" title="https://groups.google.com/forum/?fromgroups#!forum/mozilla.dev.l10n.new-locales">email to the new-locales newsgroup</a> for additional guidance</span><span style="color: rgb(255, 140, 0);">.</span></li> +</ol> + +<h3 id="Accounts" style="line-height: 24px; font-size: 1.71428571428571rem;">Accounts</h3> + +<p>There are a handful of accounts that you need to be aware as you begin. They're not required for you to begin contributing, but will be required when you are preparing to produce an official release. For now, simply be aware that these will become important as your efforts progress. These accounts will store your code, contributions, and help you produce an official localization.</p> + +<dl> + <dt style="margin-left: 40px;">hg (Mercurial)</dt> + <dd>Mercurial is the revision control environment that houses the main Mozilla source code as well as localized code for each official Mozilla localization. You will need this for localizing Mozilla applications. For anyone to gain access to hg repos, you must visit the <a class="external external-icon" href="http://www.mozilla.org/hacking/committer/" title="http://www.mozilla.org/hacking/committer/">Mozilla Commiter page</a> and follow the process outlined there. <a class="external external-icon" href="https://bugzilla.mozilla.org/show_bug.cgi?id=741305" title="https://bugzilla.mozilla.org/show_bug.cgi?id=741305">Here is an example bug</a> that illustrates the process well. Use <a class="external link-https external-icon" href="https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&component=Repository%20Account%20Requests&rep_platform=All&op_sys=All&cc=l10n%40mozilla.com&short_desc=l10n%20hg%20account%20for%20John%20Doe%20(ab-CD)" title="https://bugzilla.mozilla.org/enter_bug.cgi?product=mozilla.org&component=Repository%20Account%20Requests&rep_platform=All&op_sys=All&cc=l10n%40mozilla.com&short_desc=l10n%20hg%20account%20for%20John%20Doe%20(ab-CD)">this bug template</a>when filing your hg account registration bug. Add a request about creating your locale's repository to the <a class="external external-icon" href="http://groups.google.com/group/mozilla.dev.l10n.new-locales/topics" title="http://groups.google.com/group/mozilla.dev.l10n.new-locales/topics">new locales newsgroup</a>.</dd> + <dt style="margin-left: 40px;">SVN</dt> + <dd style="margin-left: 40px;">SVN is a revision control environment that Mozilla uses to house Mozilla source websites and their localizations for each official Mozilla localization. See <a class="external link-https external-icon" href="https://wiki.mozilla.org/SVN#SVN_account_for_localizers" title="https://wiki.mozilla.org/SVN#SVN_account_for_localizers">this wiki page</a> about how to gain access to SVN. Add a request about creating your locale's repository to the<a class="external external-icon" href="http://groups.google.com/group/mozilla.dev.l10n.new-locales/topics" title="http://groups.google.com/group/mozilla.dev.l10n.new-locales/topics">new locales newsgroup</a>.</dd> +</dl> + +<dl> + <dt style="margin-left: 40px;">Web-based L10n tools</dt> + <dd style="margin-left: 40px;">We'll talk about these in a little bit. For now, just be aware that should you choose to use them, you may need to create a personal account.</dd> + <dt style="margin-left: 40px;">Mozilla LDAP</dt> + <dd style="margin-left: 40px;">You will need a Mozilla LDAP account once you're ready to have your localization registered on the main Mozilla repositories. Add a request about creating your LDAP account to the<a class="external external-icon" href="http://groups.google.com/group/mozilla.dev.l10n.new-locales/topics" title="http://groups.google.com/group/mozilla.dev.l10n.new-locales/topics"> new locales newsgroup</a>.</dd> + <dt style="margin-left: 40px;">Locale-specific Bugzilla component</dt> + <dd style="margin-left: 40px;">Having a Bugzilla component specific to your locale will help us to track your localization's progress from first steps to official release. It will also notify us when you're having problems unique to your localization team's work. Add a request about creating your locale's Bugzilla component to the <a class="external external-icon" href="http://groups.google.com/group/mozilla.dev.l10n.new-locales/topics" title="http://groups.google.com/group/mozilla.dev.l10n.new-locales/topics">new locales newsgroup</a>.</dd> +</dl> + +<h3 id="Local_environment_tools" style="line-height: 24px; font-size: 1.71428571428571rem;">Local environment tools</h3> + +<p>Similar to accounts, there is a number of environment tools that you should install on your personal computer. These tools will help you to store your contributions, build Mozilla applications and language packs, and test your work. Install and configure them in the following order.</p> + +<div class="note"> +<p>If you're using a Windows machine, you'll need to set up a Unix shell first. <a href="https://www.cygwin.com/">Cygwin</a> is the most popular, but there are others you can find using a quick internet search.</p> +</div> + +<dl> + <dt style="margin-left: 40px;">Perl</dt> + <dd style="margin-left: 40px;">Perl is a programming language that will help you create Mozilla application builds and language packs. You can find the source files and install instructions <a class="external external-icon" href="http://www.perl.org/" title="http://www.perl.org/">here</a>.</dd> + <dt style="margin-left: 40px;">Python</dt> + <dd style="margin-left: 40px;">Python is a programming language in which many of our L10n testing scripts are written. You can find the source files and install instructions <a class="external external-icon" href="http://python.org/" title="http://python.org/">here</a>.</dd> + <dt style="margin-left: 40px;">A solid, Unicode-based, text editor</dt> + <dd style="margin-left: 40px;">Here are some suggestions: + <ul> + <li style="margin-left: 40px;">Windows: <a class="external external-icon" href="http://notepad-plus.sourceforge.net/uk/site.htm" title="http://notepad-plus.sourceforge.net/uk/site.htm">Notepad++</a> or <a class="external external-icon" href="http://www.flos-freeware.ch/notepad2.html" title="http://www.flos-freeware.ch/notepad2.html">Notepad2</a></li> + <li style="margin-left: 40px;">GNU/Linux: <a class="external external-icon" href="http://en.wikipedia.org/wiki/Vim_%28text_editor%29" title="http://en.wikipedia.org/wiki/Vim_(text_editor)">vim</a>, <a class="external external-icon" href="http://projects.gnome.org/gedit/" title="http://projects.gnome.org/gedit/">gedit</a> or <a class="external external-icon" href="http://www.kate-editor.org/kate" title="http://www.kate-editor.org/kate">Kate</a></li> + <li style="margin-left: 40px;">Mac OS X: <a class="external external-icon" href="http://www.barebones.com/products/TextWrangler/" title="http://www.barebones.com/products/TextWrangler/">TextWrangler</a></li> + </ul> + </dd> + <dt style="margin-left: 40px;">GNU make</dt> + <dd style="margin-left: 40px;"><span class="external external-icon">Make is a tool which controls the generation of executables. You can find version</span> 3.79.1 or higher <a class="external external-icon" href="http://www.gnu.org/software/make/" title="http://www.gnu.org/software/make/">here</a>. Unfortunately, other varieties of <code>make</code> won't do.</dd> + <dt style="margin-left: 40px;">autoconf 2.13</dt> + <dd style="margin-left: 40px;">autoconf is a utility that is vital to manually creating Mozilla application builds and language packs. We use version 2.13 and higher for these builds. You can find the source files and install instructions <a class="external external-icon" href="http://www.gnu.org/software/autoconf/" title="http://www.gnu.org/software/autoconf/">here</a>.</dd> + <dt style="margin-left: 40px;">wget</dt> + <dd style="margin-left: 40px;">wget is a command-line utility that allows you to retrieve files using internet protocols. We use it for retrieving files from repositories. You can find the source files and install instructions <a class="external external-icon" href="http://www.gnu.org/s/wget/" title="http://www.gnu.org/s/wget/">here</a>.</dd> + <dt style="margin-left: 40px;">compare-locales</dt> + <dd style="margin-left: 40px;">compare-locales is a Python script that helps you check your work without needing to run Firefox or another application. Install intructions are located <a href="https://developer.mozilla.org/en/Compare-locales" title="https://developer.mozilla.org/en/Compare-locales">here</a>.</dd> + <dt style="margin-left: 40px;">L10n checks</dt> + <dd style="margin-left: 40px;">L10n checks is another Python script that helps you check your work without running an application. Install instructions are located <a href="https://developer.mozilla.org/en/L10n_Checks" title="https://developer.mozilla.org/en/L10n_Checks">here</a>.</dd> + <dt style="margin-left: 40px;">Hg (Mercurial)</dt> + <dd style="margin-left: 40px;">As noted above, we use Mercurial for maintaining Mozilla source code and localized code. Not only will you need a localization repository to store your localizations, but you need to have it installed and configured on your personal computer as well. You can find everything you need to know about installing and configuring Mercurial for your localization work <a href="https://developer.mozilla.org/en/Localizing_with_Mercurial#Install_Mercurial" title="https://developer.mozilla.org/en/L10n_on_Mercurial#Install_Mercurial">here</a>.</dd> + <dt style="margin-left: 40px;">Locale Switcher or Quick Locale Switcher</dt> + <dd style="margin-left: 40px;">Both Locale Switcher and Quick Locale Switcher are add-ons for Mozilla applications. Either one is necessary to enable you to see your work within a Mozilla application. You can install either by searching for them in Firefox's add-ons manager or following <a class="external link-https external-icon" href="https://addons.mozilla.org/en-US/firefox/addon/locale-switcher/" title="https://addons.mozilla.org/en-US/firefox/addon/locale-switcher/">these</a> <a class="external link-https external-icon" href="https://addons.mozilla.org/en-US/firefox/addon/quick-locale-switcher/" title="https://addons.mozilla.org/en-US/firefox/addon/quick-locale-switcher/">links</a>.</dd> +</dl> + +<h2 id="End_of_initial_setup" style="line-height: 30px; font-size: 2.14285714285714rem;">End of initial setup</h2> + +<p>Now that you've finished your initial setup, it's time for the best part: translating!</p> +</article> +</div> +</div> +</div> + +<p> </p> diff --git a/files/pt-br/mozilla/localization/index.html b/files/pt-br/mozilla/localization/index.html new file mode 100644 index 0000000000..ca4e66d3ec --- /dev/null +++ b/files/pt-br/mozilla/localization/index.html @@ -0,0 +1,25 @@ +--- +title: Localização na Mozilla +slug: Mozilla/Localization +tags: + - Landing + - Localization + - Localização + - Mozilla + - Tradução + - Translation + - l10n +translation_of: Mozilla/Localization +--- +<p><span class="seoSummary"><strong>Localização</strong> (L10n) é o processo de tradução de interfaces do usuário de softwares de um idioma para outro e sua adaptação a uma cultura estrangeira. Esses recursos são para qualquer pessoa com interesse nos aspectos técnicos envolvidos na localização. Eles são para desenvolvedores e todos os contribuidores.</span></p> + +<h2 id="Veja_também">Veja também</h2> + +<dl> + <dt><a href="/en-US/docs/Project:MDN/Localizing" title="/en-US/docs/Project:MDN/Localizing">Localizando o MDN</a></dt> + <dd>Este recurso abrange a localização da documentação aqui no MDN.</dd> + <dt><a href="/en-US/Apps/Build/Localization">Localização de aplicativos</a></dt> + <dd>Este conjunto de documentos aplica-se mais especificamente à localização de aplicativos, incluindo aplicativos do Firefox OS.</dd> + <dt><a href="/en-US/docs/Web/API/L10n">L10n</a></dt> + <dd>Documentos de referência para a API L10n que a Mozilla usa para localizar o Firefox OS.</dd> +</dl> diff --git a/files/pt-br/mozilla/localization/localization_and_plurals/index.html b/files/pt-br/mozilla/localization/localization_and_plurals/index.html new file mode 100644 index 0000000000..859adb7a4d --- /dev/null +++ b/files/pt-br/mozilla/localization/localization_and_plurals/index.html @@ -0,0 +1,371 @@ +--- +title: Localização e Plurais +slug: Mozilla/Localization/Localization_and_Plurals +tags: + - Internacionalização + - Internationalization + - Localization + - Localização +translation_of: Mozilla/Localization/Localization_and_Plurals +--- +<p>Você provavelmente está aqui porque está localizando um arquivo .properties e ele tem um link para essa página. Essa página ajuda a explicar como localizar essas strings de forma que a forma de plural correta seja mostrada para o usuário. Por exemplo, "1 página" vs "2 páginas".</p> + +<p>Se você está aqui para tornar seu código (ex.: extensões) localizável para formas de plural, você pode pular direto para <a href="#Developing_with_PluralForm">Desenvolvendo com PluralForm</a>, mas se você provavelmente precisa localizar as strings iniciais para seu código, então seria bom também ler pelo menos a seção Uso.</p> + +<p> </p> + +<h2 id="Usage" name="Usage">Uso</h2> + +<p>Aqui estão alguns termos usados nesta página para ajudar a manter as coisas claras:</p> + +<ul> + <li><strong>regra de plural</strong>: Para um idioma dado, há uma regra gramatical sobre como alterar palavras dependendo do número qualificando a palavra. Idiomas diferentes podem ter regras diferentes.</li> + <li><strong>forma de plural</strong>: Para uma regra de plural em particular, pode haver múltiplas formas de uma palavra, tal como "página" e "páginas". Neste caso, há 2 formas, mas outros idiomas podem ter 1 ou muito mais.</li> +</ul> + +<p>Se você está aqui para <code>pluralRule</code> no arquivo <code>chrome/global/intl.properties</code>, você precisa descobrir qual <em>regra de plural</em> deve ser escolhida para sua localização. Essa regra de plural é usada para determinar quantas <em>formas de plural</em> são necessárias para cada palavra que precisa ser localizada com plurais em mente.</p> + +<p>Para todos os demais arquivos de propriedades que possuem link para essa página, você terá que fornecer formas de plural suficiente da palavra desejada e separá-las com ponto e vírgula (;). Se você não sabe quantas formas de plural você precisa, verifique o número de <code>pluralRule</code> em <code>chrome/global/intl.properties</code> e procure pela entrada correspondente à entrada na lista de regras de plural a seguir.</p> + +<h2 id="List_of_Plural_Rules" name="List_of_Plural_Rules">Lista de Regras de Plural</h2> + +<p>Essa seção contém uma lista de regras de plural ordenada por seu número de regras de plural. Cada entrada indica quantas formas de plural são necessárias ao localizar uma palavra. Para cada entrada, há uma lista de famílias e idiomas naquelas famílias para lhe ajudar a descobrir se esta é a regra que você deveria escolher para <code>pluralRule</code>. Adicionalmente, há uma breve descrição de cada forma de plural seguida por alguns exemplos de números que caem naquela forma em particular.</p> + +<p>Para a regra de plural dada, a ordem na qual as formas de plural são listadas está na mesma ordem que você localizar uma palavra, separadas por caractere de ponto e vírgula. Por exemplo, o inglês usa a regra de plural 1, e localizar <code>plurals</code> exigiria uma string de "plural;plurais" na qual a primeira palavra é a forma singular e a segunda é a forma plural geral.</p> + +<h3 id="Plural_rule_.230_.281_form.29" name="Plural_rule_.230_.281_form.29">Regra de plural #<em><strong>0</strong></em> (1 forma)</h3> + +<p><strong>Famílias</strong>: asiática (chinês, japonês, coreano), persa, turca/altaica (turco), tailandês, laociana<br> + <strong>tudo</strong>: <small>0, 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, …</small></p> + +<h3 id="Plural_rule_.231_.282_forms.29" name="Plural_rule_.231_.282_forms.29">Regra de plural #<em><strong>1</strong></em> (2 formas)</h3> + +<p><strong>Famílias</strong>: germânica (dinamarquês, holandês, inglês, faroês, frísio, alemão, norueguês, sueco), fino-úgricas (estoniando, finlandês, húngaro), língua isolada (basco), latina/grega (grego), semítica (hebráico), românica (italiano, português, espanhol, catalão), vietnamita<br> + <strong>é 1</strong>: <small>1</small><br> + <strong>todo resto</strong>: <small>0, 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, …</small></p> + +<h3 id="Plural_rule_.232_.282_forms.29" name="Plural_rule_.232_.282_forms.29">Regra de plural #<em><strong>2</strong></em> (2 formas)</h3> + +<p><strong>Família</strong>: Românica (francês, português brasileiro)<br> + <strong>é 0 ou 1</strong>: <small>0, 1</small><br> + <strong>todo resto</strong>: <small>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, …</small></p> + +<h3 id="Plural_rule_.233_.283_forms.29" name="Plural_rule_.233_.283_forms.29">Regra de plural #<em><strong>3</strong></em> (3 formas)</h3> + +<p><strong>Famílias</strong>: báltica (letã)<br> + <strong>é 0</strong>: <small>0</small><br> + <strong>termina em 1, excluindo 11</strong>: <small>1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291, …</small><br> + <strong>todo resto</strong>: <small>2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, …</small></p> + +<h3 id="Plural_rule_.234_.283_forms.29" name="Plural_rule_.234_.283_forms.29">Regra de plural #<em><strong>4</strong></em> (4 formas)</h3> + +<p><strong>Famílias</strong>: céltica (gaélico escocês)<br> + <strong>é 1 ou 11</strong>: <small>1, 11</small><br> + <strong>é 2 ou 12</strong>: <small>2, 12</small><br> + <strong>é 3-10 ou 13-19</strong>: <small>3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19</small><br> + <strong>todo resto</strong>: <small>0, 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, …</small></p> + +<h3 id="Plural_rule_.235_.283_forms.29" name="Plural_rule_.235_.283_forms.29">Regra de plural #<em><strong>5</strong></em> (3 formas)</h3> + +<p><strong>Families</strong>: Romanic (Romanian)<br> + <strong>is 1</strong>: <small>1</small><br> + <strong>is 0 or ends in 01-19, excluding 1</strong>: <small>0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, …</small><br> + <strong>everything else</strong>: <small>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, …</small></p> + +<h3 id="Plural_rule_.236_.283_forms.29" name="Plural_rule_.236_.283_forms.29">Regra de plural #<em><strong>6</strong></em> (3 formas)</h3> + +<p><strong>Families</strong>: Baltic (Lithuanian)<br> + <strong>ends in 1, excluding 11</strong>: <small>1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291, …</small><br> + <strong>ends in 0 or ends in 11-19</strong>: <small>0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, …</small><br> + <strong>everything else</strong>: <small>2, 3, 4, 5, 6, 7, 8, 9, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 72, 73, …</small></p> + +<h3 id="Plural_rule_.237_.283_forms.29" name="Plural_rule_.237_.283_forms.29">Regra de plural #<em><strong>7</strong></em> (3 formas)</h3> + +<p><strong>Families</strong>: Slavic (Belarusian, Bosnian, Croatian, Serbian, Russian, Ukrainian)<br> + <strong>ends in 1, excluding 11</strong>: <small>1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291, …</small><br> + <strong>ends in 2-4, excluding 12-14</strong>: <small>2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104, 122, 123, 124, 132, 133, 134, 142, 143, 144, 152, 153, 154, 162, 163, 164, 172, 173, 174, 182, 183, …</small><br> + <strong>everything else</strong>: <small>0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 35, 36, 37, 38, 39, 40, 45, 46, 47, 48, 49, 50, 55, 56, 57, 58, 59, 60, 65, 66, 67, 68, 69, 70, 75, 76, 77, …</small></p> + +<h3 id="Plural_rule_.238_.283_forms.29" name="Plural_rule_.238_.283_forms.29">Regra de plural #<em><strong>8</strong></em> (3 formas)</h3> + +<p><strong>Families</strong>: Slavic (Slovak, Czech)<br> + <strong>is 1</strong>: <small>1</small><br> + <strong>is 2-4</strong>: <small>2, 3, 4</small><br> + <strong>everything else</strong>: <small>0, 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, …</small></p> + +<h3 id="Plural_rule_.239_.283_forms.29" name="Plural_rule_.239_.283_forms.29">Regra de plural #<em><strong>9</strong></em> (3 formas)</h3> + +<p><strong>Families</strong>: Slavic (Polish)<br> + <strong>is 1</strong>: <small>1</small><br> + <strong>ends in 2-4, excluding 12-14</strong>: <small>2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54, 62, 63, 64, 72, 73, 74, 82, 83, 84, 92, 93, 94, 102, 103, 104, 122, 123, 124, 132, 133, 134, 142, 143, 144, 152, 153, 154, 162, 163, 164, 172, 173, 174, 182, 183, …</small><br> + <strong>everything else</strong>: <small>0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 39, 40, 41, 45, 46, 47, 48, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 65, 66, 67, 68, …</small></p> + +<h3 id="Plural_rule_.2310_.284_forms.29" name="Plural_rule_.2310_.284_forms.29">Regra de plural #<em><strong>10</strong></em> (4 formas)</h3> + +<p><strong>Families</strong>: Slavic (Slovenian, Sorbian)<br> + <strong>ends in 01</strong>: <small>1, 101, 201, …</small><br> + <strong>ends in 02</strong>: <small>2, 102, 202, …</small><br> + <strong>ends in 03-04</strong>: <small>3, 4, 103, 104, 203, 204, …</small><br> + <strong>everything else</strong>: <small>0, 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, …</small></p> + +<h3 id="Plural_rule_.2311_.285_forms.29" name="Plural_rule_.2311_.285_forms.29">Regra de plural #<em><strong>11</strong></em> (5 formas)</h3> + +<p><strong>Families</strong>: Celtic (Irish Gaelic)<br> + <strong>is 1</strong>: <small>1</small><br> + <strong>is 2</strong>: <small>2</small><br> + <strong>is 3-6</strong>: <small>3, 4, 5, 6</small><br> + <strong>is 7-10</strong>: <small>7, 8, 9, 10</small><br> + <strong>everything else</strong>: <small>0, 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, …</small></p> + +<h3 id="Plural_rule_.2312_.284_forms.29" name="Plural_rule_.2312_.284_forms.29">Regra de plural #<em><strong>12</strong></em> (6 formas)</h3> + +<p><strong>Families</strong>: Semitic (Arabic)<br> + <strong>is 1</strong>: <small>1</small><br> + <strong>is 2</strong>: <small>2</small><br> + <strong>ends in 03-10</strong>: <small>3, 4, 5, 6, 7, 8, 9, 10, 103, 104, 105, 106, 107, 108, 109, 110, 2</small><small>03, 204, 205, 206, 207, 208, 209, 210, </small><small>…</small><br> + <strong>everything else but is 0 and ends in 00-02, excluding 0-2</strong>: <small>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, … </small><br> + <strong>ends in 00-02, excluding 0-2</strong>: <small>100, 101, 102, 200, 201, 202, …</small><br> + <strong>is 0</strong>: <small>0</small></p> + +<h3 id="Plural_rule_.2313_.284_forms.29" name="Plural_rule_.2313_.284_forms.29">Regra de plural #<em><strong>13</strong></em> (4 formas)</h3> + +<p><strong>Families</strong>: Semitic (Maltese)<br> + <strong>is 1</strong>: <small>1</small><br> + <strong>is 0 or ends in 01-10, excluding 1</strong>: <small>0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, …</small><br> + <strong>ends in 11-19</strong>: <small>11, 12, 13, 14, 15, 16, 17, 18, 19, 111, 112, 113, 114, 115, 116, 117, 118, 119, 211, 212, 213, 214, 215, 216, 217, 218, 219, …</small><br> + <strong>everything else</strong>: <small>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, …</small></p> + +<h3 id="Plural_rule_.2314_.283_forms.29" name="Plural_rule_.2314_.283_forms.29">Regra de plural #<em><strong>14</strong></em> (3 formas)</h3> + +<p><strong>Families</strong>: Slavic (Macedonian)<br> + <strong>ends in 1</strong>: <small>1, 11, 21, 31, 41, 51, 61, 71, 81, 91, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 201, 211, 221, 231, 241, 251, 261, 271, 281, 291, …</small><br> + <strong>ends in 2</strong>: <small>2, 12, 22, 32, 42, 52, 62, 72, 82, 92, 102, 112, 122, 132, 142, 152, 162, 172, 182, 192, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, …</small><br> + <strong>everything else</strong>: <small>0, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 45, 46, 47, 48, 49, 50, 53, 54, 55, 56, 57, 58, 59, 60, 63, …</small></p> + +<h3 id="Plural_rule_.2315_.283_forms.29" name="Plural_rule_.2315_.283_forms.29">Regra de plural #<em><strong>15</strong></em> (2 formas)</h3> + +<p><strong>Families</strong>: Icelandic<br> + <strong>ends in 1, excluding 11</strong>: <small>1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, 131, 141, 151, 161, 171, 181, 191, 201, 221, 231, 241, 251, 261, 271, 281, 291, …</small><br> + <strong>everything else</strong>: <small>0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, …</small></p> + +<h3 id="Plural_rule_.2316_.283_forms.29" name="Plural_rule_.2316_.283_forms.29">Regra de plural #<em><strong>16</strong></em> (6 formas)</h3> + +<p><strong>Families</strong>: Celtic (Breton)<br> + <strong>is 1</strong>: <small>1</small><br> + <strong>ends in 1, excluding 1, 11, 71, 91</strong>: <small>21, 31, 41, 51, 61, 81, 101, 121, 131, 141, 151, 161, 181, 201, 221, 231, 241, 251, 261, 281, ...</small><br> + <strong>ends in 2, excluding 12, 72, 92</strong>: <small>2, 22, 32, 42, 52, 62, 82, 102, 122, 132, 142, 152, 162, 182, 202, 222, 232, 242, 252, 262, 282, ...</small><br> + <strong>ends in 3, 4 or 9 excluding 13, 14, 19, 73, 74, 79, 93, 94, 99</strong>: <small>3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 53, 54, 59, ...</small><br> + <strong>ends in 1000000</strong>: <small>1000000: 1000000, 2000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 9000000, 10000000, ...</small><br> + <strong>everything else</strong>: <small>0, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 30, 35, 36, 37, 38, 40, ...</small></p> + +<h2 id="Examples" name="Examples">Examples</h2> + +<p>The following are some examples for various languages and a brief thought processes.</p> + +<h3 id="French" name="French">French</h3> + +<p>Some French speaking places treat 0 as plural while others treat it as singular. The only other singular is 1 while everything else is plural. So pick either plural rule #1 or #2.</p> + +<p><code>pluralRule=2<br> + seconds=seconde;secondes<br> + minutes=minute;minutes<br> + hours=heure;heures<br> + days=jour;jours </code></p> + +<p>Like many other times when localizing words, gender agreement might force you to rearrange words in a way that the gender is always the same. (seconde vs jour)</p> + +<h3 id="Chinese" name="Chinese">Chinese</h3> + +<p>A word doesn't change if there is a different number in front of it, so all numbers use the same plural form. With just one plural form, it has to be plural rule #0. For each word to localize, it's just like localizing a single word with no semi-colons needed.</p> + +<p><code>pluralRule=0<br> + seconds=秒<br> + minutes=分<br> + hours=時<br> + days=日 </code></p> + +<h3 id="Polish" name="Polish">Polish</h3> + +<p>There's a singular form for 1, a plural form for 2-4, and another for 5-21 at which point 22 is the same as 2. Plural rule #7 has a "ends in 2-4, not 12-14" but the singular form includes everything ending in 1 except 11. Plural rule #9 has the correct singular form for only 1.</p> + +<p><code>pluralRule=9<br> + seconds=sekunda;sekundy;sekund<br> + minutes=minuta;minuty;minut<br> + hours=godzina;godziny;godzin<br> + days=dzień;dni;dni </code></p> + +<p>Even though the last 2 plural forms of "day" are the same, both are still needed because there needs to be 3 plural forms for each word.</p> + +<h3 id="Sorbian" name="Sorbian">Sorbian</h3> + +<p>There are 4 plural forms: nominative singular, nominative dual, nominative plural, genitive plural. These match up with plural rule #10.</p> + +<p><code>pluralRule=10<br> + seconds=sekunda;sekundźe;sekundy;sekundow<br> + minutes=mjeńšina;mjeńšinje;mjeńšiny;mjeńšin<br> + hours=hodźina;hodźinje;hodźiny;hodźin<br> + days=dźeń;dnjej;dny;dnjow </code></p> + +<h2 id="Testing_Extension" name="Testing_Extension">Testing Extension</h2> + +<p>To help make sure you pick the right plural rule and provide enough plural forms for strings, you should use the pluralForm Checker extension. After installing the extension, it should be available from the Tools menu.</p> + +<p>To use it, list off the property files and properties that you want to check and click the button. The extension will load each property and display the plural forms in a table. Selecting a table entry will populate the bottom box with sample uses of the word for some numbers.</p> + +<p><img alt="Image:pluralForm-checker.0.3.png" class="internal" src="/@api/deki/files/804/=PluralForm-checker.0.3.png"></p> + +<p><a class="external" href="http://ed.agadak.net/firefox/pluralForm-checker.xpi">Install pluralForm Checker v0.3 extension</a></p> + +<h3 id="Extension_input" name="Extension_input">Extension input</h3> + +<p>It would be good to keep this list updated with all the words that need plural forms. People using the extension can then copy/paste this input.</p> + +<p><code><small><a class="external" rel="freelink">chrome://mozapps/locale/downloads/do...tes,hours,days</a><br> + <a class="external" rel="freelink">chrome://mozapps/locale/downloads/do...dsTitlePercent</a><br> + <a class="external" rel="freelink">chrome://browser/locale/browser.prop...ausedDownloads</a> </small></code></p> + +<h3 id="Version_history" name="Version_history">Version history</h3> + +<p>0.1: Initial version with pluralRule check, properties input loading, table generation, sample output display<br> + 0.2: Use PluralForm.numForms() to get the number of forms instead of figuring out locally to better support future rules - <strong>Requires build from 2007/01/27 or later</strong><br> + 0.3: Generate a list of what numbers fall into which plural form to minimize the sample output to at most 3 of each form</p> + +<h2 id="Developing_with_PluralForm" name="Developing_with_PluralForm">Developing with PluralForm</h2> + +<p>The functionality for getting the correct plural forms is provided by a JavaScript Module, <code>PluralForm.jsm</code>. This module provides a couple methods for localizing to the browser's current locale as well as getting methods to localize to a desired plural rule. The latter ability of specifying a plural rule is useful for extensions because the extension doesn't necessarily have to be localized to the browser's locale.</p> + +<h3 id="Loading_PluralForm.jsm" name="Loading_PluralForm.jsm">Loading <code>PluralForm.jsm</code></h3> + +<p>Loading the PluralForm module from JavaScript is simple with <a href="/en/Components.utils.import" title="en/Components.utils.import">Components.utils.import</a>. Just put the following line somewhere that will be evaluated before you want to use PluralForm. At the top of your JavaScript file is fine.</p> + +<pre>Components.utils.import("resource://gre/modules/PluralForm.jsm");</pre> + +<h3 id="Methods:_get" name="Methods:_get">Methods: <code>get</code></h3> + +<p>These methods make use of the browser's current locale specified by <code><a class="external" rel="freelink">chrome://global/locale/intl.properties</a></code>'s <code>pluralRule</code> value.</p> + +<pre>/** + * Get the correct plural form of a word based on the number + * + * @param aNum + * The number to decide which plural form to use + * @param aWords + * A semi-colon (;) separated string of words to pick the plural form + * @return The appropriate plural form of the word + */ +string pluralForm +get(int aNum, string aWords)</pre> + +<p>Here is an example of using this method:</p> + +<pre>// Load PluralForm and for this example, assume English +Components.utils.import("resource://gre/modules/PluralForm.jsm"); + +// PluralForm.get expects a semi-colon separated list of words +let downloads = "download;downloads"; +// Pretend this number came from somewhere else +let num = 10; + +// Display the correct plural form for 10 downloads: "You have 10 downloads.") +print("You have " + num + " " + PluralForm.get(num, downloads) + "."); + +// Try again with a different value: "You have 1 download." +num = 1; +print("You have " + num + " " + PluralForm.get(num, downloads) + ".")</pre> + +<p>The above example works, but is still difficult to localize because we're concatenating strings assuming a particular grammatical structure. The following would be better:</p> + +<pre>Components.utils.import("resource://gre/modules/PluralForm.jsm"); + +let downloads = "You have one download.;You have #1 downloads."; +let num = 10; + +// For English, this would display "You have 10 downloads." +print(PluralForm.get(num, downloads).replace("#1", num);</pre> + +<p>Notice in the above example that the code can be written to support placeholders or not use placeholders in some forms of the string. Additionally, the localizer has control over where the placeholder is in relation to the rest of the text.</p> + +<p>Of course, the strings to be localized will be placed in a separate file such as yourextension.properties instead of being hardcoded in the JavaScript code file.</p> + +<p>The following 3 file snippets show how to use PluralForm with your <code>.xul</code>, <code>.properties</code>, <code>.js</code> files.</p> + +<p><code>downloads.xul</code>:</p> + +<pre><stringbundleset> + <stringbundle id="strings" src="chrome://downloads.properties"/> +</stringbundleset></pre> + +<p><code>downloads.properties</code>:</p> + +<pre># LOCALIZATION NOTE (downloadsTitleFiles): Semi-colon list of plural forms. +# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals +# #1 number of files +# example: 111 files - Downloads +downloadsTitleFiles=#1 file - Downloads;#1 files - Downloads + +# LOCALIZATION NOTE (timePair): #1 time number; #2 time unit +# example: 1 second; 11 seconds +timePair=#1 #2 +seconds=second;seconds +minutes=minute;minutes +hours=hour;hours +</pre> + +<p><code>downloads.js</code>:</p> + +<pre>Components.utils.import("resource://gre/modules/PluralForm.jsm"); +let getStr = function(string) document.getElementById("strings").getString(string); + +// Get the correct plural form for the title +let numDownloads = 3; +let title = PluralForm.get(numDownloads, getStr("downloadsTitleFiles")); +// Put in the correct number of downloads +print(title.replace("#1", numDownloads)); + +// Get the correct plural form of seconds +let timeLeft = 55; +let seconds = PluralForm.get(timeLeft, getStr("seconds")); +// Print the localized string for "55 seconds" +print(getStr("timePair").replace("#1", timeLeft).replace("#2", seconds));</pre> + +<h3 id="Method:_makeGetter" name="Method:_makeGetter">Method: <code>makeGetter</code></h3> + +<p>If you're writing an extension, you'll want to use <code>makeGetter</code> instead of <code>PluralForm.get()</code> or <code>PluralForm.numForms()</code> because someone installing the extension on a different locale will be using the strings provided by your default extension locale. For example, your extension localized for English with plural rule #1, which expects 2 plural forms, is installed on a localized version of Firefox with plural rule #4, which expects 3 forms.</p> + +<pre>/** + * Create a pair of plural form functions for the given plural rule number. + * + * @param aRuleNum + * The plural rule number to create functions + * @return A pair: [function that gets the right plural form, + * function that returns the number of plural forms] + */ +[string pluralForm get(int aNum, string aWords), int numForms numForms()] +makeGetter(int aRuleNum)</pre> + +<p>Here is an example usage of <code>makeGetter</code>:</p> + +<pre>Components.utils.import("resource://gre/modules/PluralForm.jsm"); + +// Let's get Irish (plural rule #11) +let [get, numForms] = PluralForm.makeGetter(11); + +// Make up some values to use with "get" +let dummyText = "form 1;form 2;form 3;form 4;form 5"; +let dummyNum = 10; + +// In the case of Irish, the value 10 uses plural form #4, so "form 4" is printed +print(get(dummyNum, dummyText));</pre> + +<p>In this example, the Irish plural rule was hardcoded, but this could be a value specified in the .properties file. So for your extension, specify a pluralRule value in the .properties and call <code>PluralForm.makeGetter(pluralRuleFromProperties)</code> making sure to save the 2 returned functions. (You can use <a href="/en/JavaScript/New_in_JavaScript/1.7#Destructuring_assignment" title="en/New_in_JavaScript_1.7#Destructuring_assignment">destructured assignment</a> in JavaScript 1.7 to keep things clean.) The returned functions act just like <code>PluralForm.get()</code> and <code>PluralForm.numForms()</code> except for the specified plural rule instead of the default plural rule.</p> + +<h2 id="Credits" name="Credits">Credits</h2> + +<p>Plural Form code first implemented for {{ Bug(394516) }} - <em>Figure out a remaining-time rounding scheme for minutes -> hours/days</em><br> + Plural rules and families derived from <a class="external" href="http://www.gnu.org/software/gettext/manual/html_node/gettext_150.html#Plural-forms">GNU <code>gettext</code> documentation</a>.</p> + +<p> </p> + +<p> </p> + +<p>{{ languages( { "es": "es/Localización_y_Plurales", "fr": "fr/Localisation_et_pluriels", "ja": "ja/Localization_and_Plurals", "pl": "pl/Lokalizacja_i_liczba_mnoga" } ) }}</p> diff --git a/files/pt-br/mozilla/localization/localizing_with_pontoon/index.html b/files/pt-br/mozilla/localization/localizing_with_pontoon/index.html new file mode 100644 index 0000000000..efe8ef99b2 --- /dev/null +++ b/files/pt-br/mozilla/localization/localizing_with_pontoon/index.html @@ -0,0 +1,135 @@ +--- +title: Traduzindo com o Pontoon +slug: Mozilla/Localization/Localizing_with_Pontoon +tags: + - Tradução +translation_of: Mozilla/Localization/Localizing_with_Pontoon +--- +<p>O <a href="https://pontoon.mozilla.org" title="https://pontoon.mozilla.org">Pontoon</a> é uma ferramenta de tradução (l10n) baseado na web do tipo O-Que-Você-Ver-É-O-Que-Você-Tem (WYSIWYG), usada para traduzir conteúdo web. Na Mozilla, usamos o Pontoon para traduzir os sites da Mozilla e a interface de aplicativo do Firefox OS, conhecida como Gaia. O Pontoon é uma ferramenta muito simples e intuitiva que requer pouca ou nenhuma habilidade técnica para usar no trabalho de tradução. Aqui discutiremos como usar o Pontoon para traduzir projetos, do primeiro acesso até a finalização de suas contribuições. Ao longo do caminho, apontaremos alguns belos recursos que o tornarão mais eficiente e farão suas contribuições de tradução mais fáceis.</p> + +<div class="note"> +<p><strong>Você é um desenvolvedor?</strong> Leia sobre <a href="/en-US/docs/Implementing_Pontoon_Mozilla">implementando Pontoon no seu site</a> ou aprenda como se envolver no <a href="https://github.com/mozilla/pontoon">GitHub</a>.</p> +</div> + +<h2 id="Primeiros_passos">Primeiros passos</h2> + +<p>A <a href="https://pontoon.mozilla.org" title="https://pontoon.mozilla.org">página inicial do Pontoon</a> é muito fácil de usar. Para começar a traduzir o projeto, clique no ícone Persona e entre. Em seguida, simplesmente selecione o projeto que você quer trabalhar e seu idioma nos menus suspensos. O Pontoon abrirá automaticamente esse idioma do projeto para você iniciar. Note que para nossos propósitos aqui, usaremos o site do<a href="https://affiliates.mozilla.org/"> Firefox Afiliados</a> para demonstrar a funcionalidade e fluxo de trabalho do Pontoon. E aí está, aberto dentro do Pontoon:</p> + +<p><em><img alt="Navegador do aplicativo e espaço de trabalho" src="https://mdn.mozillademos.org/files/8323/affiliates.png" style="height: 558px;"></em></p> + +<h3 id="Barra_de_ferramentas_principal">Barra de ferramentas principal</h3> + +<p>Como você pode ver, a maior parte da interface é composta pelo site que está sendo traduzido. Somente a barra de ferramentas no topo pertence ao Pontoon, contendo os seguintes itens (da esquerda para a direita):</p> + +<p><img alt="Barra de ferramentas principal" src="https://mdn.mozillademos.org/files/8325/toolbar.png"></p> + +<h4 id="Lista_de_strings">Lista de strings</h4> + +<p>Abre uma barra lateral com uma lista da todas as strings para traduzir.</p> + +<h4 id="Seletor_de_projeto_(Affiliates)">Seletor de projeto (Affiliates)</h4> + +<p>Alterna entre os projetos para traduzir.</p> + +<h4 id="Seletor_de_recursos_(Homepage)">Seletor de recursos (Homepage)</h4> + +<p>Alterna entre os recursos do projeto para traduzir, como sub-páginas ou arquivos de tradução. Oculta se não há recursos disponíveis para o projeto.</p> + +<dl> +</dl> + +<h4 id="Seletor_de_idioma_(Slovenian)">Seletor de idioma (Slovenian)</h4> + +<p>Alterna entre os idiomas para traduzir.</p> + +<h4 id="Go">Go</h4> + +<p>Abre a seleção de projeto-recurso-idioma.</p> + +<h4 id="Indicador_de_progresso">Indicador de progresso</h4> + +<p>Exibe seu progresso no recurso sendo traduzido. Mais detalhes estão disponíveis na janela de contexto.</p> + +<dl> +</dl> + +<h4 id="Menu_do_usuário">Menu do usuário</h4> + +<p>Permite tarefas específicas do usuário, como enviar para o repositório, baixar arquivos e sair.</p> + +<h4 id="Menu_de_informações">Menu de informações</h4> + +<p>Cede informações importantes, como a linha do tempo antecipada do projeto e uma lista de atalhos do teclado.</p> + +<dl> +</dl> + +<p>Tudo bem, que tal traduzirmos algo agora?<span id="cke_bm_608E" style="display: none;"> </span></p> + +<dl> +</dl> + +<h2 id="Traduzir_strings">Traduzir strings</h2> + +<p>Quando usando o Pontoon para tradução, você tem algumas opções para traduzir suas strings. Você pode traduzir em contexto, fora do contexto, ou uma combinação dos dois. Começaremos olhando na tradução em contexto.</p> + +<h3 id="Em_contexto">Em contexto</h3> + +<p>O modo de tradução em contexto do Pontoon é o que se coloca acima dos outros. Ele abre uma nova página (ou aplicativo) e ativa a edição em tempo real daquela página. Aqui está como você traduz sua primeira string:</p> + +<p><img alt="Tradução em contexto" src="https://mdn.mozillademos.org/files/8331/in-context.png"></p> + +<ol> + <li>Passe com o seu mouse sobre o texto que você quer.</li> + <li>Um botão de edição aparece sobre aquele texto. Clique nele para ativar o modo de tradução.</li> + <li>Substitua o texto original com sua tradução dentro do seu idioma.</li> + <li>Clique no botão de salvar para guardar sua tradução.</li> +</ol> + +<div> +<h3 id="Fora_de_contexto">Fora de contexto</h3> + +<p>Algumas strings são impossíveis de traduzir em contexto, por exemplo, os conteúdos da etiqueta <title> nos sites e strings com regionalismos ou formas plurais diferentes. Clicando no ícone de hambúrguer na barra de ferramentas principal, uma lista de todas as strings e traduções disponíveis abrirá na barra lateral. Você também pode usar a barra lateral para tradução fora de contexto:</p> +</div> + +<p><img alt="Tradução fora de contexto: list" src="https://mdn.mozillademos.org/files/8337/out-of-context-1.png"> <img alt="Tradução fora de contexto: traduzir" src="https://mdn.mozillademos.org/files/8335/out-of-context-2.png"></p> + +<ol> + <li>Clique na string que gostaria de traduzir.</li> + <li>O painel de tradução com a string original e seus detalhes (por exemplo, comentários) será aberto.</li> + <li>Traduza a string na área de tradução abaixo.</li> + <li>Clique no botão de salvar para guardar sua tradução.</li> +</ol> + +<p>Conforme você traduz strings fora de contexto, as traduções também aparecerão no site, se elas também puderem ser traduzidas em contexto.</p> + +<h3 id="Ajudantes_de_tradução">Ajudantes de tradução</h3> + +<p>Como você pode ver, sugestões do histórico, traduções memorizadas, máquina de tradução e outros idiomas também estão disponíveis no painel de tradução fora de contexto. Chamamos tudo isso de ajudantes de tradução e aqui está como cada um deles lhe ajudarão conforme você traduz strings:</p> + +<p><img alt="Ajudantes de tradução: Histórico" src="https://mdn.mozillademos.org/files/8339/helpers-history.png"> <img alt="Ajudantes de tradução: Maquinário" src="https://mdn.mozillademos.org/files/8341/helpers-machinery.png"> <img alt="Ajudantes de tradução: Outros idiomas" src="https://mdn.mozillademos.org/files/8343/helpers-locales.png"> <img alt="Ajudantes de tradução: Pesquisar" src="https://mdn.mozillademos.org/files/8345/helpers-menu.png"></p> + +<h4 id="Histórico">Histórico</h4> + +<p>Exibe traduções sugeridas anteriormente, incluindo de outros usuários.</p> + +<h4 id="Maquinário">Maquinário</h4> + +<p>Exibe combinações de vários serviços: memória de tradução interna, <a href="http://transvision.mozfr.org/">Mozilla Transvision</a>, <a href="https://amagama-live.translatehouse.org/">open source translation memory</a>, <a href="https://www.microsoft.com/Language/pt-BR/Default.aspx">Portal de idiomas da Microsoft</a> e a <a href="http://www.bing.com/translator">máquina de tradução</a>.</p> + +<h4 id="Outros_idiomas">Outros idiomas</h4> + +<p>Exibe traduções compatíveis de outros idiomas.</p> + +<h4 id="Pesquisar">Pesquisar</h4> + +<p>Quase igual ao maquinário, mas Almost like machinery, mas pega a palavra-chave fornecida como parâmetro de entrada em vez da string original.</p> + +<p>Clicando em uma sugestão, ela é copiada para dentro da área de tradução.</p> + +<dl> +</dl> + +<h2 id="Publicando_sua_tradução">Publicando sua tradução</h2> + +<p>Suponhamos que agora você quer publicar seu trabalho de tradução para enviar a um repositório. O Pontoon lhe permite fazer isso também! Na verdade, ele faz isso para você sincronizando automaticamente com os repositórios em bases horárias. Você pode agora dar tapinhas nas suas costas, fazer uma dancinha, ir dormir ou outra coisa para comemorar seu trabalho!</p> diff --git a/files/pt-br/mozilla/localization/localizing_with_verbatim/index.html b/files/pt-br/mozilla/localization/localizing_with_verbatim/index.html new file mode 100644 index 0000000000..e5fe258987 --- /dev/null +++ b/files/pt-br/mozilla/localization/localizing_with_verbatim/index.html @@ -0,0 +1,158 @@ +--- +title: Localizando com o Verbatim +slug: Mozilla/Localization/Localizing_with_Verbatim +translation_of: Mozilla/Localization/Localizing_with_Pontoon +--- +<p><span class="seoSummary">Verbatim is a web-based tool (specifically a Mozilla-hosted Pootle instance) for localizing Mozilla web content. It can be used to localize a variety of Mozilla projects and is capable of supporting any language. This guide will walk you through localizing a common Mozilla web project.</span> The tutorial here will give you a solid foundation for using Verbatim to localize any Mozilla web project you hope to add to your localization community's efforts. We'll discuss what specific projects Verbatim is currently being used for, how to get started with Verbatim, and the tasks that are commonly accomplished through using Verbatim.</p> + +<h2 id="Getting_started_with_Verbatim">Getting started with Verbatim</h2> + +<p>Being that it is web-based, localizers must be online to use Verbatim. There are essentially two ways to get started with Verbatim: start a new localization or join an existing localization community's efforts. Either way, you will need to follow these steps to start working on a Verbatim project.</p> + +<table style="width: 100%; border-style: solid; border-color: rgb(0,0,0);"> + <thead> + <tr style="text-align: center;"> + <th scope="col" style="text-align: center;"><strong>Start a new localization on Verbatim</strong></th> + <th scope="col" style="text-align: center;"><strong>Join an existing localization on Verbatim</strong></th> + </tr> + </thead> + <tbody> + <tr> + <td> + <ol> + <li>Point your browser to <a class="external" href="http://localize.mozilla.org/">http://localize.mozilla.org</a>. This is where Verbatim is hosted.</li> + </ol> + </td> + <td> + <ol> + <li>Point your browser to <a class="external" href="http://localize.mozilla.org/">http://localize.mozilla.org</a>. This is where Verbatim is hosted.</li> + </ol> + </td> + </tr> + <tr> + <td> + <ol start="2"> + <li>If you have a Mozilla LDAP account, simply sign in using your LDAP credentials. If not, register for an account and sign in once you've completed registration. The links for both are located in the upper right-hand corner of the page.</li> + </ol> + </td> + <td> + <ol start="2"> + <li>If you have a Mozilla LDAP account, simply sign in using your LDAP credentials. If not, register for an account and sign in once you've completed registration. The links for both are located in the upper right-hand corner of the page.</li> + </ol> + </td> + </tr> + <tr> + <td> + <ol start="3"> + <li>File a <a class="link-https" href="https://bugzilla.mozilla.org/enter_bug.cgi?alias=&assigned_to=nobody%40mozilla.org&blocked=&bug_file_loc=https%3A%2F%2Flocalize.mozilla.org%2F&bug_severity=normal&bug_status=NEW&cf_blocking_191=---&cf_blocking_192=---&cf_status_191=---&cf_status_192=---&cf_status_firefox10=---&cf_status_firefox11=---&cf_status_firefox8=---&cf_status_firefox9=---&cf_tracking_firefox10=---&cf_tracking_firefox11=---&cf_tracking_firefox8=---&cf_tracking_firefox9=---&comment=I%20would%20like%20to%20request%20that%20you%20add%20the%20%5Binsert%20your%20locale%20code%20here%5D%20as%20a%20new%20localization%20in%20Verbatim.%0D%0A%0D%0A%5BAdd%20any%20other%20comments%20you%20may%20have%20here.%5D&component=Verbatim&contenttypeentry=&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&data=&defined_groups=1&dependson=&description=&flag_type-4=X&flag_type-607=X&form_name=enter_bug&keywords=&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=All&priority=--&product=Webtools&qa_contact=verbatim%40webtools.bugs&rep_platform=All&requestee_type-325=&requestee_type-4=&requestee_type-607=&short_desc=Request%20for%20new%20localization%20on%20Verbatim&status_whiteboard=&target_milestone=---&version=Trunk" title="https://bugzilla.mozilla.org/enter_bug.cgi?alias=&assigned_to=nobody%40mozilla.org&blocked=&bug_file_loc=https%3A%2F%2Flocalize.mozilla.org%2F&bug_severity=normal&bug_status=NEW&cf_blocking_191=---&cf_blocking_192=---&cf_status_191=---&cf_status_192=---&cf_status_firefox10=---&cf_status_firefox11=---&cf_status_firefox8=---&cf_status_firefox9=---&cf_tracking_firefox10=---&cf_tracking_firefox11=---&cf_tracking_firefox8=---&cf_tracking_firefox9=---&comment=I%20would%20like%20to%20request%20that%20you%20add%20the%20%5Binsert%20your%20locale%20code%20here%5D%20as%20a%20new%20localization%20in%20Verbatim.%0D%0A%0D%0A%5BAdd%20any%20other%20comments%20you%20may%20have%20here.%5D&component=Verbatim&contenttypeentry=&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&data=&defined_groups=1&dependson=&description=&flag_type-4=X&flag_type-607=X&form_name=enter_bug&keywords=&maketemplate=Remember%20values%20as%20bookmarkable%20template&op_sys=All&priority=--&product=Webtools&qa_contact=verbatim%40webtools.bugs&rep_platform=All&requestee_type-325=&requestee_type-4=&requestee_type-607=&short_desc=Request%20for%20new%20localization%20on%20Verbatim&status_whiteboard=&target_milestone=---&version=Trunk">bug</a> using this prefilled bugzilla template. Add your locale code and language name to the description field, as well as any other information you'd like to share. See the following example.</li> + </ol> + + <div class="note"><strong>Example</strong>: I would like to request that you add the <em><strong>en-US</strong></em> as a new localization in Verbatim. The langauge is <em><strong>English</strong></em>. Also, I like cookies. Lots and lots of cookies. I can easily be motivated by any and all baked goods.</div> + </td> + <td> + <ol start="3"> + <li><a class="link-https" href="https://wiki.mozilla.org/Category:L10n_Teams" title="https://wiki.mozilla.org/Category:L10n_Teams">Contact the community</a> to find out which projects they need you to concentrate your efforts on. See the following example for what you could include in your email to the community leaders.</li> + </ol> + + <div class="note"><strong>Example</strong>: I would like to join your localization efforts on Verbatim for this locale. Where would be the best place for me to begin? Also, I would like to buy you a drink to encourage you to let me join the team!</div> + </td> + </tr> + </tbody> +</table> + +<p>Now that you're registered and logged in, we'll outline the general translation workflow, using the <a class="link-https" href="https://localize.mozilla.org/projects/mdn" title="https://localize.mozilla.org/projects/mdn/">MDN project page</a> as our example.</p> + +<h2 id="Translating">Translating</h2> + +<p>First thing's first, you need to find untranslated source strings to translate.</p> + +<ol> + <li>Navigate to the <a class="link-https" href="https://localize.mozilla.org/projects/mdn" title="https://localize.mozilla.org/projects/mdn/">MDN project page</a>.</li> + <li>Select your language from the <strong>Overview</strong> tab.</li> + <li>Now click on the the <strong>Translate</strong> tab. This tab will display the directories for the MDN user interface.</li> + <li>Select the <strong>LC Messages</strong> directory. This is where the project's <code>.po</code> files containing translatable strings are located. You will now see an overview of each <code>.po</code> file.</li> + <li>In the summary column, the number of words untranslated will be shown as a link. Click on that link to be taken directly to the first string that needs to be translated.</li> +</ol> + +<p>Now you're ready to contribute translations and you won't believe how easy it is. Check it out, you can contribute translations in two simple steps:</p> + +<ol> + <li>Simply type your translation in the box to below the English string</li> + <li>Select <strong>Suggest</strong>. If you have approval permission, select <strong>Submit</strong>. You will then be taken to the next string that needs translating.</li> + <li>Hooray! You're translating! Repeat steps one and two for the remainder of the untranslated strings.</li> +</ol> + +<div class="note"><strong>Note</strong>: If you come across a string that already has a suggested translation, you can still suggest your own translation if you feel it is more accurate.</div> + +<h3 id="Some_extra_cool_features_on_Verbatim">Some extra cool features on Verbatim</h3> + +<p>Here are a few additional items about the Verbatim interface that you should be aware of. Some of these can be seen in the screen shot below.</p> + +<p><a href="/@api/deki/files/5930/=Translate_Tab.png" title="Translate Tab.png"><img alt="Translate Tab.png" class="internal default" src="/@api/deki/files/5930/=Translate_Tab.png" style="width: 1113px; height: 221px;"></a></p> + +<ul> + <li>You can copy the English string over to the translation box by clicking the <strong>Copy</strong> icon.</li> + <li>You can use machine translation by clicking on the <strong>Google Translate</strong> icon.</li> + <li>You can move forward and back through the strings by clicking the <strong>Next</strong> and <strong>Previous</strong> buttons.</li> + <li>You can navigate directly to a particular string by clicking it's string number on the far left.</li> + <li>You can mark a translation as <strong>Fuzzy</strong> if you think there could be a better way to say something. This will mark it so it can be found and updated later. Remember that only submitted strings will be commited to the localization's repository, not fuzzy strings. If strings remain marked as fuzzy, the source string will appear in your localized version instead of a translated string.</li> + <li>You can add notes about a particular string in the <strong>Translator Comments</strong> section.</li> + <li>When translating a string with both singular and plural forms you will see two boxes on the right hand side. The box for the singular form is labeled <strong>Plural Form 0</strong> and the box for the plural form is labeled <strong>Plural Form 1</strong>.</li> +</ul> + +<h2 id="Additional_tasks">Additional tasks</h2> + +<p>If you are a localizer with approval priviledges, here are a few more tasks that you should be aware of.</p> + +<h3 id="Review_suggested_translations">Review suggested translations</h3> + +<ol start="1"> + <li>Click on the <strong>Review</strong> tab. It will show how many strings are waiting for review for each <code>.po</code> file.<a href="/@api/deki/files/5931/=Review_Tab1.png" title="Review Tab1.png"><img align="right" alt="Review Tab1.png" class="internal rwrap" src="/@api/deki/files/5931/=Review_Tab1.png?size=webview" style="width: 274px; height: 145px;"></a></li> + <li>Select <span style="font-weight: bold;">Review</span><strong> suggestions</strong> to start approving suggestions. It will take you to the first string that needs to be reviewed.</li> + <li>You can accept the suggestion by clicking the green checkmark or reject the suggestion by clicking the red X (see the screen shot from the previous section).</li> +</ol> + +<p>It is important to note that <em>only</em> submitted strings will appear in your localized pages. Neither suggestions nor fuzzy strings will appear. Before commiting your final localized product, make sure all strings have been submitted.</p> + +<h3 id="Using_VCS_on_Verbatim">Using VCS on Verbatim</h3> + +<p>VCS (<strong>V</strong>ersion <strong>C</strong>ontrol <strong>S</strong>ystem) is the repository system we use to update the project's strings as well as push your translated content onto the web. The difference between the two tasks is simply a matter of which link to click.</p> + +<p><img align="right" alt="VCS.png" class="internal rwrap" src="/@api/deki/files/5925/=VCS.png" style="">To push your strings onto the web and see your changes, simply select the <strong>Commit to VCS</strong> link underneath each file name. It usually takes about an hour before you can see your changes on the project site.</p> + +<p>To update your <code>.po</code> files with new untranslated strings, simple select the <strong>Update from VCS</strong> link underneath each file name.</p> + +<p> </p> + +<div class="note"><br> +<strong>Note</strong>: Some projects are automatically updated nightly while others require you to manually update them to receive new source content. Be sure to pay close attention to this, as it can alter your workflow.</div> + +<h2 id="Translating_Verbatim_files_with_an_external_application">Translating Verbatim files with an external application</h2> + +<p>While in the <strong>Translate</strong> tab, you have the option to export the <code>.po </code>and <code>.xliff</code> files and translate the strings with an external application (i.e., a text editor or translation memory tool).</p> + +<ol> + <li>To download the <code>.po</code> file, select the <strong>Download</strong> link found underneath each file name. To download the .<code>xliff</code> file, select the <strong>Download XLIFF</strong> link.</li> + <li>Proceed to translate the strings using your selected tool.</li> +</ol> + +<p>Once you've finished your translations, you'll need to upload your file to Verbatim. You can do this from the <strong>Translate</strong> tab.</p> + +<ol> + <li>Navigate to the bottom of the files list to the <strong>Upload File</strong> section.</li> + <li>Click on the <strong>Browse</strong> button and select the file you wish to upload.</li> + <li>Select an upload setting from the options provided.</li> + <li>Once your upload setting has been selected, click <strong>Upload</strong>.</li> +</ol> + +<div class="warning"> +<p class="warning"><strong>Important</strong>: There have been some problems in the past with community members updating their source strings while others are in the process of localizing the previous updated files. This can cause community members to overlook new source strings, producing untranslated strings in a localized project. Be sure to coordinate these manual updates within your community to avoid this problem.</p> +</div> + +<h2 id="You're_ready_to_go!">You're ready to go!</h2> + +<p>Whew! You've arrived at the end! Time to take what you've learned and put it to good use spreading Mozilla to everyone in your region. Have fun and <a class="link-mailto" href="mailto:l10n-drivers@mozilla.com" title="l10n-drivers@mozilla.com">let us know</a> if you run into any difficulties. We'll be happy to help in any way we can.</p> + +<p> </p> + +<p><a href="/en/Localization_Quick_Start_Guide:_Translation" title="Localization Quick Start Guide: Translation">Back: Quick Start Guide</a></p> diff --git a/files/pt-br/mozilla/localization/writing_localizable_code/index.html b/files/pt-br/mozilla/localization/writing_localizable_code/index.html new file mode 100644 index 0000000000..f403bdbb1c --- /dev/null +++ b/files/pt-br/mozilla/localization/writing_localizable_code/index.html @@ -0,0 +1,47 @@ +--- +title: Escrevendo código localizável +slug: Mozilla/Localization/Writing_localizable_code +tags: + - Internacionalização + - Localização +translation_of: Mozilla/Localization/Writing_localizable_code +--- +<div>Essa página lhe fala sobre as melhores práticas e diretrizes ao lidar com código de UI relacionado a localização. Ela é destinada a desenvolvedores do Mozilla e de extensões.</div> + +<p>Para mais detalhes técnicos, por favor veja também <a href="/pt-BR/docs/XUL_Tutorial/Localization" title="XUL_Tutorial/Localization">UL_Tutorial:Localization</a>.</p> + +<h2 id="About_Localizers" name="About_Localizers">Sobre localizadores</h2> + +<p>Algumas notas sobre localizadores para desenvolvedores que raramente lidam ocm eles:</p> + +<ul> + <li>localizadores gostam de ferramentas, e eles não gostam de editores,</li> + <li>ferramentas de localização geralmente são baseadas em pares de chave-valor,</li> + <li>pelo menos alguns localizadores possuem talentos com foco em habilidades linguísticas e não conhecedores de programação, ou alté mesmo compilação de aplicativos.</li> +</ul> + +<h2 id="Guidelines" name="Guidelines">Diretrizes</h2> + +<p>Portanto, há algunas diretrizes que você deve seguir para facilitar a localização de seu código:</p> + +<dl> + <dt>Escolha bons nomes de chaves</dt> + <dd>Os nomes escolhidos para suas chaves (independentemente de ser um DTD ou um arquivo de propriedade) devem ser descritivos. Pensem neles como sendo nomes longos de variáveis. Se você alterar as semânticas de uma string localizada, altere a chave. Isso provavelmente será um bom nome de chave, e ajudará as ferramentas a compreender que a alteração que você fez é diferente de uma mera correção de ortografia.</dd> + <dt>Tente não presumir a gramática em strings compostas</dt> + <dd>A separação de frases em várias chaves muitas vezes, inadvertidamente, pressupõe uma gramática, uma estrutura de oração e essas strings compostas são muitas vezes muito difíceis de traduzir. Quando uma string composta é necessária, tente dar aos tradutores "espaço para se mover". Um exemplo de uma string composta bem utilizada é a configuração do Firefox para páginas visitadas: o tradutor pode (implicitamente) posicionar o campo de texto como ele bem entender.</dd> + <dt>Não use macros de pré-processador</dt> + <dd>O uso de <code>#if #else #endif</code> ou <code>#expand</code> é fortemente desencorajado. Há algumas exceções a esta regra, mas, em geral, o arquivo localizado deve estar em conformidade com padrões e não devem exigir ferramentas de compilação para serem transformadas. Se você deseja adicionar processamento de compilação a arquivos localizados, certifique-se de solicitar feedback do <a href="/User:AxelHecht" title="User:AxelHecht">l10n@</a>. Na maioria dos casos, você também pode colocar o processamento em código de conteúdo e referência diferentes pares de valor-chave em <code>l10n</code>.</dd> + <dt>Use uma boa estrutura de diretórios de fontes</dt> + <dd>Certifique-se de colocar os arquivos localizáveis no lugar correto. A adição de diretórios de topo de nível é um meio termo entre a propriendade do módulo no repositório no <code>cvsroot</code> e a facilidade de localização.</dd> + <dt>Use uma boa estrutura de diretório de chrome</dt> + <dd>Para um módulo <code>mod</code> em particular, um caminho alvo <code>jar:ab-CD.jar!/locale/ab-CD/mod/foo.dtd</code> foi amplamente testado e é um bom lugar para seus arquivos referenciados como <code><a class="external" rel="freelink">chrome://mod/locale/foo.dtd</a></code>. Usar uma estrutura de diretórios como essa facilita o processo de localização sem o código fonte e é especialmente recomendada para autores de extensão. <a href="pt-BR/docs/Developer_Guide/Intrucoes_Build/Manifestos_JAR" title="JAR_Manifests">Manifestos de JAR</a> podem facilitar isso.</dd> +</dl> + +<h2 id="l10n_impact" name="l10n_impact">Impacto de l10n</h2> + +<p>Em árvores congeladas, há a regra de não verificar alterações de <em>l10n-impact</em>. Então, o que isso significa? <em>l10n-impact</em> é</p> + +<ul> + <li>qualquer alteração a <code>mozilla/@mod@/locales</code>; Localizadores descobrem se eles têm que se atualizar sobre alterações ao fazer consultas de bonsai, assim como todo mundo faz. Nenhuma alteração significa que esse resultado de consulta é vazio.</li> + <li>qualquer uso alterado ou novo de strings localizadas existentes; Qualquer coisa que dispara um ciclo de QA em 40+ localizações é <em>l10n-impact</em>.</li> +</ul> diff --git a/files/pt-br/mozilla/marketplace/diretrizes_para_avaliação_de_aplicativos/index.html b/files/pt-br/mozilla/marketplace/diretrizes_para_avaliação_de_aplicativos/index.html new file mode 100644 index 0000000000..65be91fdc0 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/diretrizes_para_avaliação_de_aplicativos/index.html @@ -0,0 +1,87 @@ +--- +title: Diretrizes para Avaliação de Aplicativos +slug: Mozilla/Marketplace/Diretrizes_para_Avaliação_de_Aplicativos +translation_of: Archive/Mozilla/Marketplace/User_Review_Guidelines +--- +<p dir="ltr" style="margin-top: 0pt; margin-bottom: 0pt;"><span style="line-height: 1.38;">Avaliação de aplicativos é um jeito de compartilhar sua opinião sobre aplicativos que você instalou e usou. Nosso </span><font face="arial"><span style="font-size: 15px; line-height: 20.7px;">time de moderação de avaliações se reserva o direito de remover qualquer avaliação que não siga estas diretrizes.</span></font></p> + +<h2 dir="ltr" id="Dicas_para_escrever_boas_avaliações" style="line-height: 1.38; margin-top: 18pt; margin-bottom: 4pt;"><strong style="background-color: transparent; color: #000000; font-family: arial; font-size: 23px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">Dicas para escrever boas avaliações </strong></h2> + +<h3 dir="ltr" id="O_que_fazer" style="line-height: 1.38; margin-top: 14pt; margin-bottom: 4pt;"><strong style="background-color: transparent; color: #000000; font-family: arial; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">O que fazer:</strong></h3> + +<ul style="margin-top: 0pt; margin-bottom: 0pt;"> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Escreva como se estivesse contando a um amigo sobre sua experiência com o aplicativo.</span></p> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Dê detalhes específicos e úteis. Por exemplo:</span></p> + + <ul style="margin-top: 0pt; margin-bottom: 0pt;"> + <li dir="ltr" style="list-style-type: circle; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">O aplicativo funcionou como esperado?</span></p> + </li> + <li dir="ltr" style="list-style-type: circle; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">De quais recursos você gostou ou não gostou?</span></p> + </li> + <li dir="ltr" style="list-style-type: circle; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">O aplicativo foi útil?</span></p> + </li> + <li dir="ltr" style="list-style-type: circle; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Foi fácil de usar?</span></p> + </li> + <li dir="ltr" style="list-style-type: circle; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Você vai continuar usando esse aplicativo?</span></p> + </li> + </ul> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Antes de submeter sua avaliação, leia o que escreveu para minimizar os erros de digitação.</span></p> + </li> +</ul> + +<h3 dir="ltr" id="O_que_não_fazer" style="line-height: 1.38; margin-top: 14pt; margin-bottom: 4pt;"><strong style="background-color: transparent; color: #000000; font-family: arial; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">O que não fazer:</strong></h3> + +<ul style="margin-top: 0pt; margin-bottom: 0pt;"> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Escrever avaliações de aplicativos que você não usou pessoalmente.</span></p> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Usar linguagem profana, sexual ou que incite o ódio.</span></p> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Incluir HTML, links, código fonte ou snippets. Avaliações devem conter apenas texto.</span></p> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;">Fazer afirmações falsas, difamar desenvolvedores ou fazer insultos pessoais.</p> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Incluir seu email pessoal, número de telefone ou outros detalhes pessoais.</span></p> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Escrever avaliações para aplicativos que você ou sua organização criou ou representa.</span></p> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Criticar um aplicativo pela natureza de sua função. Por exemplo, deixar uma avaliação negativa para um aplicativo porque exibe propagandas ou requer coleta de dados, quando é esse o propósito do aplicatico ou ele requer coleta de dados para funcionar. </span></p> + </li> + <li dir="ltr" style="list-style-type: disc; font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"> + <p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Avaliar negativamente um aplicativo por não funcionar em uma versão do FirefoxOS que a descrição informa explicitamente não suportar. </span></p> + </li> +</ul> + +<h2 dir="ltr" id="Perguntas_Frequentes_sobre_Avaliações" style="line-height: 1.38; margin-top: 18pt; margin-bottom: 4pt;"><strong style="background-color: transparent; color: #000000; font-family: arial; font-size: 23px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">Perguntas Frequentes sobre Avaliações</strong></h2> + +<h3 dir="ltr" id="Como_denuncio_uma_avaliação_problemática" style="line-height: 1.38; margin-top: 14pt; margin-bottom: 4pt;"><strong style="background-color: transparent; color: #000000; font-family: arial; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">Como denuncio uma avaliação problemática?</strong></h3> + +<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Por favor, reporte ou sinalize qualquer avaliação questionável clicando em "Reportar" para que a avaliação seja encaminhada para moderação. Nosso time de moderação utilizará as Diretrizes de Avaliação para concluir se a avaliação deve ser apagada ou retornar ao site.</span></p> + +<h3 dir="ltr" id="O_que_devo_fazer_se_tiver_problemas_com_um_aplicativo" style="line-height: 1.38; margin-top: 14pt; margin-bottom: 4pt;"><strong style="background-color: transparent; color: #000000; font-family: arial; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">O que devo fazer se tiver problemas com um aplicativo?</strong></h3> + +<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Você deve contactar o desenvolvedor pelos botões "Email de suporte" ou "Site de Suporte" na página do aplicativo no Marketplace.</span></p> + +<h3 dir="ltr" id="Como_desenvolvedor_de_aplicativos_posso_responder_avaliações" style="line-height: 1.38; margin-top: 14pt; margin-bottom: 4pt;"><strong style="background-color: transparent; color: #000000; font-family: arial; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">Como desenvolvedor de aplicativos, posso responder avaliações?</strong></h3> + +<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">No momento isso não é possível.</span></p> + +<h3 dir="ltr" id="Como_desenvolvedor_de_aplicativos_posso_excluir_avaliações_ou_notas_desfavoráveis" style="line-height: 1.38; margin-top: 14pt; margin-bottom: 4pt;"><strong style="background-color: transparent; color: #000000; font-family: arial; font-size: 17px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;">Como desenvolvedor de aplicativos, posso excluir avaliações ou notas desfavoráveis? </strong></h3> + +<p dir="ltr" style="line-height: 1.38; margin-top: 0pt; margin-bottom: 0pt;"><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">Em geral, não, mas se a avaliação não seguir as diretrizes listadas acima, você pode clicar em "Reportar" para submeter o caso à moderação. Se a avaliação inclui uma reclamação que não se aplica mais devido ao lançamento de uma nova versão, podemos considerar excluir a avaliação. Envie seu pedido detalhado para</span> <a href="https://groups.google.com/forum/#!forum/mozilla.appreview" title="appreview@lists.mozilla.org">mozilla.appreview</a><span style="background-color: transparent; color: #000000; font-family: arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;">.</span></p> diff --git a/files/pt-br/mozilla/marketplace/index.html b/files/pt-br/mozilla/marketplace/index.html new file mode 100644 index 0000000000..b936966bc4 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/index.html @@ -0,0 +1,133 @@ +--- +title: Firefox Marketplace +slug: Mozilla/Marketplace +tags: + - Apps + - Firefox OS + - Introdução + - Loja + - Principiante + - Prioridade + - chegada +translation_of: Archive/Mozilla/Marketplace +--- +<div class="boxed translate-rendered"> +<div class="summary">A Marketplace Firefox é uma loja aberta e não-proprietária para aplicativos web. Aqui você encontrará toda a informação necessária para iniciar e publicar aplicativos na Marketplace Firefox. Encontre orientações para fazer apps de sucesso, opções de entrega, publicação e atualização de apps, e as bibliotecas e APIs para fazer uso das características da Marketplace.</div> + +<div class="column-container"> +<p>A Mozilla está trazendo seus valores fundamentais — abertura, liberdade, escola do usuário — para o mundo de divulgação de apps.</p> + +<p>Utilizando tecnologias Web padrões, linguagens, e ferramentas, a <a href="https://marketplace.firefox.com/">Firefox Marketplace</a> permite que você publique <a href="https://developer.mozilla.org/en-US/Apps">Apps Web Abertos</a>. Esses apps podem ser empacotados, rodando dentro do Firefox OS, ou hospedado no seu próprio Servidor Web. Apps publicados estão disponíveis para usuários de telefone Firefox OS onde quer que eles estejam no mundo. Usuários descobrem seus apps facilmente na Marketplace Firefox usando a seção de apps em destaque, categorias de apps, e a poderosa pesquisa. Então os usuários estão possibilitados de instalar apps gratuitos instantaneamente, ou comprar apps pagos com o suporte crescente para pagamentos por cartão de crédito e cobrança de faturas.</p> +</div> + +<div class="row topicpage-table"> +<div class="section"> +<h2 class="Community" id="Community" name="Community"><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare">Se preparando para o sucesso</a></h2> + +<dl> + <dd>Quer você esteja criando apps por prazer ou por lucro, você vai querer que as pessoas os descubram, os usem e se divirtam com eles. Essa sessão explica como popularizar e construir comunidades de usuários satisfeitos.</dd> +</dl> + +<h2 class="Community" id="Community" name="Community"><a href="https://developer.mozilla.org/en-US/Marketplace/Options">Opções de publicação</a></h2> + +<dl> + <dd>Empacotado ou Hospedado, eis a questão. Descubra sobre entregar o seu app e as opções para fazer seus apps disponíveis em aparelhos Android e desktops, além do Firefox OS.</dd> +</dl> + +<h2 class="Community" id="Community" name="Community"><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Introduction">Publicando apps</a></h2> + +<dl> + <dd>O mundo está ansioso para você publicar seus apps. Descubra como botar seus apps na Firefox Marketplace, incluindo os processos para submeter seus apps, o processo de revisão, atualização de seus apps, monitorando a performance deles, e revisando os comentários dos usuários.</dd> +</dl> +</div> + +<div class="section"> +<dl> +</dl> + +<h2 class="Tools" id="Tools" name="Tools">Ferramentas para desenvolvimento de apps</h2> + +<dl> + <dt><a href="https://developer.mozilla.org/en-US/Marketplace/APIs">Bibliotecas e APIs da Firefox Marketplace</a></dt> + <dd>Obtenha uma visão geral e encontre links para bibliotexas e APIs disponíveis para acrescentar características aos seus apps da Marketplace.</dd> + <dt><a href="https://developer.mozilla.org/en-US/Apps/Tools_and_frameworks/App_developer_tools">Ferramentas para desenvolvedores de Apps</a></dt> + <dd>Encontre uma lista completa das ferramentas que você pode usar para fazer o desenvolvimento de Apps Web Abertos mais eficiente e divertido.</dd> + <dt><a href="https://developer.mozilla.org/en-US/docs/Tools/WebIDE">WebIDE</a></dt> + <dd>Sua ferramenta principal para testar, implantar, e depurar apps <a href="https://developer.mozilla.org/en-US/Firefox_OS">Firefox OS</a> usando o <a href="https://developer.mozilla.org/en-US/docs/Tools/Firefox_OS_Simulator">Simulador Firefox OS</a> ou um dispositivo real com Firefox OS.</dd> +</dl> +</div> +</div> + +<h2 id="Subnav">Subnav</h2> + +<ol> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare">Se preprare para o sucesso</a> + + <ol> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare/Introduction">Introdução</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare/Deciding_what_to_build">Decidindo o que construir</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare/Getting_to_know_your_users">Conhecendo seus usuários</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare/Choosing_your_business_model">Escolhendo seu modelo de negócios</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare/Localizing_your_apps">Localizando seus apps</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare/Promoting_your_app">Promovendo seu app</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Prepare/Creating_your_community">Criando sua comunidade</a></li> + </ol> + </li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Options">Suas opções de publicação</a> + <ol> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Options/Introduction">Introdução</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Options/Packaged_apps">Apps empacotados</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Options/Hosted_apps">Apps hospedados</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Options/Packaged_or_hosted">Empacotados ou hospedados?</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Options/Mobile_optimized_websites">Websites otimizados para dispositivos móveis</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Options/Self_publishing">Publique apps você mesmo</a></li> + </ol> + </li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing">Visão geral sobte publicação de apps</a> + <ol> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Introduction">Introdução</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submission_checklist">Checklist de submissão</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Marketplace_review_criteria" title="An explanation of the criteria an app must meet in order to be published on the Firefox Marketplace">Critério de revisão da Marketplace</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Marketplace_showcase_criteria">Critério para vitrine da Marketplace</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Adding_a_subdomain" title="For security reasons, each app must have its own domain (or subdomain) on the Web. This article covers how to go about creating a subdomain for your app.">Adicionando um subdompinio para um app</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Policies_and_Guidelines">Políticas e Diretrizes</a> + <ol> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Policies_and_Guidelines/Introduction">Introdução</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Policies_and_Guidelines/Marketplace_screenshot_criteria" title="Some guidelines on how to create an effective screenshot for marketplace submission">Critério de captura de tela Marketplace</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Policies_and_Guidelines/Privacy_policies" title="Your users' privacy is very important, so you need to develop and adhere to a reasonable privacy policy to engender their trust. This article provides a guide to developing privacy policies.">Política de privacidade</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Policies_and_Guidelines/Testing_and_troubleshooting">Teste e resolução de problemas de app</a></li> + </ol> + </li> + </ol> + </li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit">Envie seu app</a> + <ol> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Overview">Visão geral</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Sign-in_to_your_developer_account" title="This step-by-step guide will help you successfully submit your app to the Firefox Marketplace.">Passo 1: Entre</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Load_your_app">Passo 2: Carregue o app</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Enter_your_apps_details">Passo 3: Liste detalhes</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Next_steps">Passo 4: Próximos passos</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Rating_Your_Content">Passo 5: Avaliação de app</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Define_your_team">Passo 6: Definir membros da equipe</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/View_your_listing">Passo 7: Ver lista</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Edit_other_localizations">Passo 8: Editar outras localizações</a></li> + </ol> + </li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Managing_your_apps">Gerenciando e atualizando apps publicados</a> + <ol> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Managing_your_apps/Introduction_Managing_your_apps">Introdução</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Managing_your_apps/Status___Versions">Status de seu app</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Updating_apps" title="Information about how both hosted and packaged app updates are handled, and what you need to do to ensure that your app properly supports updating.">Atualizando apps</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Managing_your_apps/App_Statistics">Estatísticas do App</a></li> + </ol> + </li> + <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Marketplace/Add-on_submission">Submissão de complemento</a> + <ol> + <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Marketplace/Add-on_submission">Visão geral da submissão de complemento</a></li> + <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Marketplace/Add-on_submission/Review_criteria">Critério de revisão de complemento</a></li> + </ol> + </li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/APIs">Bibliotecas e APIs</a></li> + <li><a href="https://developer.mozilla.org/en-US/Marketplace/FAQ">FAQ Firefox Marketplace</a></li> +</ol> +</div> diff --git a/files/pt-br/mozilla/marketplace/marketplace_apis/index.html b/files/pt-br/mozilla/marketplace/marketplace_apis/index.html new file mode 100644 index 0000000000..fc006758a5 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/marketplace_apis/index.html @@ -0,0 +1,68 @@ +--- +title: Firefox Marketplace APIs +slug: Mozilla/Marketplace/Marketplace_APIs +translation_of: Archive/Mozilla/Marketplace/Marketplace_APIs +--- +<div class="summary"> +<p><span id="result_box" lang="pt"><span class="hps">Links para</span> <span class="hps">as principais referências</span> <span class="hps">que abrangem o</span></span><span class="seoSummary">Mozilla's Firefox Marketplace APIs, </span><span id="result_box" lang="pt"><span class="hps">com o qual</span> <span class="hps">você pode manipular</span> <span class="hps">as submissões</span> <span class="hps">de aplicativos</span><span>,</span> <span class="hps">configurar</span> <span class="hps">uma conta de pagamento</span> <span class="hps">de um aplicativo</span><span>,</span> <span class="hps">e muito mais.</span></span></p> +</div> + +<div class="row topicpage-table"> +<div class="section"> +<dl> + <dt><a href="/en-US/docs/Web/Apps/Publishing/Marketplace_utility_library">Biblioteca Utilitária do Marketplace</a></dt> + <dd><span id="result_box" lang="pt"><span class="hps">Para</span> <span class="hps">ajudá-lo a</span> <span class="hps">trabalhar com o</span> <span class="hps">Firefox</span> <span class="hps">mercado</span><span>, nós fornecemos</span> <span class="hps">uma biblioteca</span> <span class="hps">JavaScript</span> <span class="hps">que você</span> <span class="hps">pode</span> <span class="hps">usar em seus</span> <span class="hps">aplicativos</span> <span class="hps">para torná-lo</span> <span class="hps">mais fácil de</span> <span class="hps">lidar com</span> <span class="hps">pagamentos em</span><span>-app</span> <span class="hps">e</span> <span class="hps">verificar</span> <span class="hps">recibos de pagamento</span><span>.</span></span></dd> + <dt><a href="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/submission.html" title="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/submission.html">Submission API</a></dt> + <dd><span id="result_box" lang="pt"><span class="hps">A</span> <span class="hps">API</span> <span class="hps">Submission</span> <span class="hps">permite validar</span> <span class="hps">seu aplicativo,</span> <span class="hps">atualizar</span> <span class="hps">seu aplicativo,</span> <span class="hps">e</span> <span class="hps">buscar</span> <span class="hps">informações sobre os</span> <span class="hps">aplicativos disponíveis</span> <span class="hps">para serem instalados</span><span>.</span></span></dd> + <dt><a href="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/payment.html" title="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/payment.html">Payment API</a></dt> + <dd> + <div id="gt-src-tools"> + <div dir="ltr" style="zoom: 1;"><span id="result_box" lang="pt"><span class="hps">A</span> <span class="hps">API</span> <span class="hps">de pagamento</span> <span class="hps">permite que você faça</span> <span class="hps">coisas como</span> <span class="hps">obter</span> <span class="hps">informações sobre</span> <span class="hps">compras no aplicativo</span> <span class="hps">e obter informações</span> <span class="hps">sobre os preços</span> <span class="hps">para</span> <span class="hps">níveis</span> <span class="hps">vários países.</span></span></div> + </div> + </dd> + <dt><a href="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/overview.html" title="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/overview.html">Outras APIs do Marketplace</a></dt> + <dd><span id="result_box" lang="pt"><span class="hps">A</span> <span class="hps">documentação completa para</span> <span class="hps">as</span> <span class="hps">APIs</span> <span class="hps">de mercado</span> <span class="hps">do Firefox</span><span>.</span></span></dd> +</dl> +</div> + +<div class="section"> +<h5 class="Tools" id="Tools" name="Tools">Tools for app developers</h5> +<ul> + <li><a href="https://marketplace.firefox.com/developers/">Visit Firefox Marketplace Developer Hub</a></li> + <li><a href="/en-US/docs/Mozilla/Firefox_OS/Using_Firefox_OS_Simulator">Firefox OS Simulator</a></li> + <li><a href="/en-US/docs/Apps/App_developer_tools">App developer tools</a></li> +</ul> +<h5 class="Documentation" id="Documentation" name="Documentation">Technology reference documentation</h5> +<div class="twocolumns"> + <ul> + <li><a href="/en-US/docs/Web/CSS">CSS</a></li> + <li><a href="/en-US/docs/DOM">DOM</a></li> + <li><a href="/en-US/docs/Web/HTML">HTML</a></li> + <li><a href="/en-US/docs/JavaScript">JavaScript</a></li> + <li><a href="/en-US/docs/WebAPI">WebAPI</a></li> + <li><a href="/en-US/docs/Web/WebGL">WebGL</a></li> + <li><a href="/en-US/docs/SVG">SVG</a></li> + <li><a href="https://www.mozilla.org/en-US/apps/">Open Web Apps overview site</a></li> + <li><a href="https://wiki.mozilla.org/Apps">Apps project wiki page</a></li> + </ul> +</div> +<h5 class="Community" id="Community" name="Community">Getting help from the community</h5> +<p>If you still aren't sure how to do what you're trying to get done, feel free to join the conversation!</p> +<ul> + <li>Consult the webapps forum: <ul> + <li><a href="https://lists.mozilla.org/listinfo/dev-webapps">Lista de E-mails</a></li> + + + <li><a href="http://groups.google.com/group/mozilla.dev.webapps">grupo de discussão</a></li> + <li><a href="http://groups.google.com/group/mozilla.dev.webapps/feeds">RSS feed</a></li> +</ul> + <ul> + <li>Ask your question on the Open Web Apps IRC channel: <a class="link-irc" href="irc://irc.mozilla.org/openwebapps">#openwebapps</a></li> + </ul> + </li> +</ul> +<p><span class="alllinks"><a href="http://www.catb.org/~esr/faqs/smart-questions.html" rel="external">Don't forget about the <em>netiquette</em>...</a></span></p> +</div> +</div> + +<p> </p> diff --git a/files/pt-br/mozilla/marketplace/opcoes/aplicativos_hospedados/index.html b/files/pt-br/mozilla/marketplace/opcoes/aplicativos_hospedados/index.html new file mode 100644 index 0000000000..6db162bca9 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/opcoes/aplicativos_hospedados/index.html @@ -0,0 +1,69 @@ +--- +title: Aplicativos hospedados +slug: Mozilla/Marketplace/Opcoes/Aplicativos_hospedados +translation_of: Archive/Mozilla/Marketplace/Options/Hosted_apps +--- +<div class="summary"> +<p>Um aplicativo hospedado é um aplicativo Open Web que possui todos os recursos (HTML, CSS, Javascript, manifesto do aplicativo etc.) armazenados em um servidor web. Este artigo trata de uma introdução á aplicativos hospedados e possui links para tudo o que você precisa conhecer sobre aplicativos hospedados do ponto de vista do desenvolvedor.</p> +</div> + +<p>Um aplicativo Open Web fornece todo seu conteúdo a partir de um servidor web, da mesma forma que um web site convencional, juntamente com um <a href="https://developer.mozilla.org/en-US/docs/Web/Apps/Manifest">manifesto do aplicativo</a> no diretório. O manifesto do aplicativo fornece detalhes do aplicativo, tal como sua descrição, icones usados para identificar o aplicativo instalado etc. Os detalhes no manifesto do aplicativo são usados para instalar o aplicativo em dispositivos com Firefox OS, <a href="https://developer.mozilla.org/en-US/Marketplace/Options/Open_web_apps_for_android">dispositivos Android</a> e <a href="https://developer.mozilla.org/en-US/Marketplace/Options/Open_web_apps_for_desktop">desktops</a>. Uma vez instalado, o aplicativo carrega o conteúdo dinâmicamente a partir do servidor web, e está habilitado para acessar outros recursos nas internet, tal como um banco de dados.</p> + +<p>De cordo com o <a href="/en-US/Firefox_OS/Security/Security_model#App_Security">modelo de segurança do Firefox OS</a>, aplicativos hospedados são definicos como aplicativos web. Isso significa que eles não são habilitados a usar <a href="https://developer.mozilla.org/en-US/Apps/Build/App_permissions">APIs de permissão privilegiada</a>: para fazer uso destas APIs o aplicativo deve ser um <a href="/en-US/Marketplace/Options/Packaged_apps">aplicativo empacotado</a>.</p> + +<div class="note"> +<p><strong>Observe:</strong> O Firefox Marketplace suporta aplicativos hospedados pagos somente para Firefox OS e aplicativos hospedados gratuitos para Firefox OS, Firefox para Android e Firefox para Desktop. Suporte para aplicativos pagos para todas as plataformas está em desenvolvimento.</p> +</div> + +<h2 id="Opções_para_hospedar_seu_aplicativo">Opções para hospedar seu aplicativo</h2> + +<p>Onde hospedar seus aplicativos é com você. Se você não escolheu uma solução de hospedagem, esta sessão descreve duas das mais comuns opções utilizadas que valem a pena considerar.</p> + +<h3 id="GitHub">GitHub</h3> + +<p>Se o conteúdo do seu Open Web App é estático (HTML/CSS/Javascript, sem processamento server-side), <a class="external external-icon" href="http://pages.github.com" rel="external">páginas no GitHub</a> é uma boa opção de hospedagem. Irá hospedar seu manifesto no <a href="https://developer.mozilla.org/en-US/Apps/Developing/Manifest#Serving_from_GitHub">correto formato MIME </a>se você der a extensão <code>.webapp</code>.</p> + +<h3 id="Soluções_genéricas_de_hospedagem">Soluções genéricas de hospedagem</h3> + +<p>Para um plicativo Open Web dinâmico, aqueles que requerem processamento server-side, você pode usar alguma solução genérica de hospedagem (como um servidor web que você possua ou tenha acesso a ele). Você vai precisar garantir que o seu servidor oferece os recursos corretos. Uma número de servidores oferecem serviços web que já vêm prontos para as necessidades dos aplicativos hospedados, como <a class="external external-icon" href="http://www.heroku.com" rel="external">Heroku</a>. <a class="external external-icon" href="http://code.google.com/appengine" rel="external">Google App Engine</a> ou <a class="external external-icon" href="http://aws.amazon.com/application-hosting" rel="external">Amazon App Hosting</a>.</p> + +<div class="note"> +<p><strong>Note</strong>: Installable open web apps used to have a "single app per origin" security policy, but this was lifted as of Firefox 34/Firefox OS 2.1 (read <a href="https://developer.mozilla.org/en-US/Apps/Build/installable_apps_for_Firefox_OS/App_manifest_FAQ#Can_I_have_more_than_one_app_at_my_origin.3F">this FAQ entry</a> for more information). If you still need to support older versions, consider hosting different apps (e.g. a test and live version) at separate origins; one strategy is to <a href="/en-US/Marketplace/Publishing/Adding_a_subdomain">create different subdomains</a> for your apps, or you could test it using <a href="/en-US/docs/Tools/WebIDE">WebIDE</a>. See the <a href="https://developer.mozilla.org/en-US/docs/Web/Apps/FAQs/About_app_manifests">FAQs about apps manifests</a> for more information on origins.</p> +</div> + +<h2 id="Testing_hosted_apps">Testing hosted apps</h2> + +<p>To install a hosted app into a Firefox OS Simulator or onto a device for testing purposes, see <a href="https://developer.mozilla.org/en-US/Firefox_OS/Using_the_App_Manager">Using the App Manager</a>. Alternatively, you can install it on to a device from a Web server by following the steps described in <a href="https://developer.mozilla.org/en-US/Marketplace/Options/Self_publishing">Publishing apps yourself</a>.</p> + +<h2 id="Publishing_hosted_apps">Publishing hosted apps</h2> + +<p>You have two options for publishing hosted apps: on Firefox Marketplace or self-publishing.</p> + +<h3 id="Publishing_on_Firefox_Marketplace">Publishing on Firefox Marketplace</h3> + +<p>The process for submitting a hosted app to Firefox Marketplace is described in the <a href="https://developer.mozilla.org/en-US/Marketplace/Publishing">App Publishing</a> section.</p> + +<p>When you submit your hosted app, the Marketplace generates a new manifest called the <strong>mini-manifest</strong> that is based on the app manifest on your hosted app's Web server. When a user installs your app, the mini-manifest is passed to the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Apps.install"><code>Apps.install()</code></a> function to install the app. The mini-manifest exists for installation and update purposes and isn't used when your app runs.</p> + +<h3 id="Publishing_yourself">Publishing yourself</h3> + +<p>It's possible to publish hosted apps outside Firefox Marketplace, on your own web server. Details are provided in <a href="https://developer.mozilla.org/en-US/Marketplace/Options/Self_publishing">Publishing apps yourself</a>.</p> + +<h2 id="Updating_hosted_apps">Updating hosted apps</h2> + +<p>Updating of hosted apps happens in two ways:</p> + +<ul> + <li>changes made on the app's Web server are presented to users the next time they run the app.</li> + <li>changes to device content controlled by the mini-manifest, such as the app's icon or name, are updated when a new version of the app is submitted to Firefox Marketplace.</li> +</ul> + +<p>For information on updating apps in Firefox Marketplace, see <a href="https://developer.mozilla.org/en-US/docs/Web/Apps/Updating_apps">Updating apps</a>. For self-published apps see <a href="https://developer.mozilla.org/en-US/Marketplace/Options/Self_publishing">Publishing apps yourself</a>.</p> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="https://developer.mozilla.org/en-US/Firefox_OS/Security/Security_model">Firefox OS security Overview</a></li> + <li><a href="https://developer.mozilla.org/en-US/Firefox_OS/Security/Application_security">Application Security</a></li> + <li><a class="external external-icon" href="https://github.com/robnyman/Firefox-OS-Boilerplate-App" title="https://github.com/robnyman/Firefox-OS-Boilerplate-App">Firefox OS Boilerplate App</a></li> +</ul> diff --git a/files/pt-br/mozilla/marketplace/opcoes/index.html b/files/pt-br/mozilla/marketplace/opcoes/index.html new file mode 100644 index 0000000000..e990cd6ad5 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/opcoes/index.html @@ -0,0 +1,19 @@ +--- +title: Suas opções de publicação +slug: Mozilla/Marketplace/Opcoes +tags: + - needsRevision +translation_of: Archive/Mozilla/Marketplace/Options/Introduction +--- +<p><a href="/en-US/Marketplace/Options/Introduction">Nesta seção</a> você descobrirá:</p> +<ul> + <li>os formatos em que você pode entregar Aplicativos Web Abertos ‐ Como aplicativos <a href="/en-US/Marketplace/Options/Packaged_apps">empacotados</a> ou <a href="/en-US/Marketplace/Options/Hosted_apps">hospedados</a> ‐ assim como os deltalhes de <a href="/en-US/Marketplace/Options/Packaged_or_hosted_">como escolher entre esses formatos</a>.</li> + <li>como as ferramentas de <a href="/en-US/Marketplace/Options/Open_web_apps_for_android">Aplicativos Web Abertos para Android</a> e <a href="/en-US/Marketplace/Options/Open_web_apps_for_desktop">Aplicativos Web Abertos para Desktop</a> portam seus aplicativos para dispositivos Androide computadores Mac/Windows/Linux.</li> + <li>informação sobre escolher entre esses dispositivos com diferentes quantias de memória.</li> + <li>suas opções para <a href="/en-US/Marketplace/Options/Self_publishing">publicar aplicativos por si próprio</a>, fora do Marketplace.</li> + <li>como você pode <a href="/en-US/Marketplace/Options/Creating_a_store">criar seu próprio Marketplace</a>.</li> +</ul> +<div class="warning"> + <p>O conteúdo nesta seção ainda está sob desenvolvimento.</p> +</div> +<p> </p> diff --git a/files/pt-br/mozilla/marketplace/opcoes/introdução/index.html b/files/pt-br/mozilla/marketplace/opcoes/introdução/index.html new file mode 100644 index 0000000000..8b6d60ab93 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/opcoes/introdução/index.html @@ -0,0 +1,27 @@ +--- +title: Introdução — Suas opções de publicação +slug: Mozilla/Marketplace/Opcoes/Introdução +translation_of: Archive/Mozilla/Marketplace/Options/Introduction +--- +<div class="summary"> +<p>O Firefox Marketplace possui um canal que permite que você possa publicar seus aplicativos e fazer com que eles sejam mais facilmente localizados por usuários do Firefox OS, Firefox para Android e Firefox para Desktop. De toda forma, esta não é a única opção que você tem para disponibilizar seus aplicativos. Nesta sessão, você conhecerá os formatos com os quais você pode entregar seus aplicativos, o mecanismo no navegador Firefox para habilitar seus aplicativos para dispositivos Android e PCs, opções para publicação de seus próprios aplicativos e formas de criar sua própria Marketplace personalizada.</p> +</div> + +<h2 id="Suas_opções_de_publicação">Suas opções de publicação</h2> + +<dl> + <dt><a href="/en-US/Marketplace/Options/Packaged_apps">Aplicativos empacotados</a></dt> + <dd>Conheça o método preferido para fornecer seus aplicativos - que oferece acesso à privilégios e APIs de segurança.</dd> + <dt><a href="/en-US/Marketplace/Options/Hosted_apps">Aplicativos hospedados</a></dt> + <dd>Descubra como fazer aplicativos disponíveis à partir de um servidor, enquanto dá aos usuários o benefício de um aplicativo instalado.</dd> + <dt><a href="/en-US/Marketplace/Options/Packaged_or_hosted_">Empacotado ou hospedado?</a></dt> + <dd>Use essa checklist para determinar qual formato de entrega cairia bem nos seus aplicativos.</dd> + <dt><a href="/en-US/Marketplace/Options/Open_web_apps_for_android">Open Web Apps para Android</a></dt> + <dd>Seus aplicativos do Firefox Marketplace são agora entregues para usuários Android em uma APK, permitindo que instalem-os e usem seus aplicativos assim como qualquer outro aplicativo Android. Descubra como fazer isto.</dd> + <dt><a href="/en-US/Marketplace/Options/Open_web_apps_for_desktop">Open Web Apps para Desktop</a></dt> + <dd>Seus aplicativos do Open Web Apps são agora intalados em computadores Windows, Mac e Linux pelo navegador Firefox para Desktop, permitindo que os usuários executem seus aplicativos assim como qualquer outro aplicativo desktop. Descubra como fazer isto.</dd> + <dt><a href="/en-US/Marketplace/Options/Self_publishing">Publicando aplicativos você mesmo</a></dt> + <dd>Ocasionalmente você pode querer publicar seu aplicativo fora da Firefox Marketplace, talvez para torná-lo mais disponível para teste ou distribuição em sua empresa. Descubra as opções que você tem e como implementá-las.</dd> + <dt><a href="/en-US/Marketplace/Options/Creating_a_store">Criando sua própria Marketplace</a></dt> + <dd>Mesmo que você publique seus aplicativos no Firefox Marketplace, ou publicando sozinho, você tem um número de opções para apresentá-los em uma loja. Esta sessão fala destas opções e como implementá-las.</dd> +</dl> diff --git a/files/pt-br/mozilla/marketplace/publishing/criterio-de-revisao-loja-de-aplicativos/index.html b/files/pt-br/mozilla/marketplace/publishing/criterio-de-revisao-loja-de-aplicativos/index.html new file mode 100644 index 0000000000..80851ac85c --- /dev/null +++ b/files/pt-br/mozilla/marketplace/publishing/criterio-de-revisao-loja-de-aplicativos/index.html @@ -0,0 +1,120 @@ +--- +title: Critérios de Revisão Marketplace +slug: Mozilla/Marketplace/Publishing/criterio-de-revisao-loja-de-aplicativos +tags: + - App Revisor + - Apps + - Marketplace + - Mobile + - Revisão + - Segurança + - l1on +translation_of: Archive/Mozilla/Marketplace/Publishing/Marketplace_review_criteria +--- +<div class="summary"> +<p><span id="result_box" lang="pt"><span class="alt-edited">Este artigo descreve o conjunto de requisitos que um aplicativo deve cumprir para ser distribuído através do Firefox Marketplace. Estes requisitos são projetados para equilibrar as necessidades de ambos os usuários e desenvolvedores de aplicativos a partir do Firefox Marketplace. Os desenvolvedores querem requisitos justos, consistentes e não-draconianas que eles podem confiar para construir um negócio online. Por outro lado, os usuários querem garantia de que os aplicativos são seguros, irá trabalhar em seu dispositivo, e que a aplicação irá fazer o que diz que vai fazer. Os requisitos de aplicativos abaixo apontar para o delicado equilíbrio entre essas necessidades.</span></span></p> +</div> + +<p><span id="result_box" lang="pt"><span class="alt-edited">Aqui estão expectativas dos revisores do que é ou não é app da Mozilla :</span></span></p> + +<ul> + <li><span id="result_box" lang="pt"><span class="alt-edited">Critérios serão aplicados de maneira justa, compassiva e consistente. O processo de revisão do app não se destina a ser um gatekeeper, mas sim um ponto de contato confiável que fornece feedback para ajudar os desenvolvedores a serem mais bem sucedido.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Os revisores não são uma equipe de QA! Durante o processo de revisão, alguém vai olhar sobre o manifesto do aplicativo e passar alguns minutos exercitando o aplicativo como um usuário normal faria.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Se um aplicativo falhar na avaliação, será dado ao desenvolvedor uma explicação clara dos problemas encontrados, os passos para reproduzir e, quando possível, o revisor deve apontar o desenvolvedor na direção certa, fornecendo links para documentação de apoio relevante ou fazer recomendações sobre a mudança que precisa ser feita.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Os revisores não fazem nenhum julgamento sobre a forma como um aplicativo parece, apenas em como o aplicativo funciona. Por exemplo, um aplicativo com um parágrafo do texto em vermelho sobre um fundo laranja não seria rejeitado porque é feio, mas pode ser rejeitado se não for legível.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Nós sempre damos aos desenvolvedores o benefício da dúvida. Se não tiver certeza se um aplicativo deve ser rejeitado, os revisores vão fazer perguntas antes de emitir uma rejeição. Aplicativos não será (conscientemente) rejeitado devido a questões de plataforma que estão fora do controle do colaborador; no entanto, pode recusar a aprovação se não podemos obter o aplicativo para trabalhar.</span></span></li> +</ul> + +<h2 id="Segurança">Segurança</h2> + +<p><span id="result_box" lang="pt"><span>Todos os detalhes da</span> <span>arquitetura de segurança</span> <span>app</span> <span>estão disponíveis</span> <span>aqui:</span></span> <a href="https://wiki.mozilla.org/Apps/Security">https://wiki.mozilla.org/Apps/Security</a></p> + +<ul> + <li><span id="result_box" lang="pt"><span>O</span> <span>manifesto do aplicativo</span> <span>deve</span> <span>ser servido</span> <span>a partir da</span> <span>mesma origem que</span> <span>o aplicativo</span><span>.</span></span></li> + <li>The app manifest must be served a <code>Content-Type</code> header of <code>application/x-web-app-manifest+json</code>.</li> + <li><span id="result_box" lang="pt"><span>Aplicativos</span> <span>não devem usar</span> <span>redirecionamentos</span> <span>ou</span> <span>iframe</span> <span>para carregar o conteúdo</span> <span>que o desenvolvedor</span> <span>não está autorizado a</span> <span>usar.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Permissões solicitadas deve ser especificado no manifesto do aplicativo com a descrição do motivo pelo qual a permissão é necessária.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Aplicativos do <a href="/en-US/Apps/Build/Manifest#type">tipo</a> privilegiado passará por outras verificações, incluindo a revisão do código, devido ao potencial para atividade maliciosa e perda de dados do usuário com APIs privilegiados.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">A Política de Segurança de Conteúdo <a href="/en-US/docs/Security/CSP/Introducing_Content_Security_Policy">(CSP)</a> definido no manifesto do aplicativo determina o código que aplicativo pode fazer. O padrão, se não especificado, para aplicações não-privilegiados é o mesmo que qualquer site; aplicativos do <a href="/en-US/Apps/Build/Manifest#type">tipo </a>privilegiado tem um <a href="/en-US/Marketplace/Options/Packaged_apps#Privileged_app">padrão mais restritivo</a>. O relatório de validação criado em submissão ao Firefox Marketplace vai indicar violações CSP potenciais em seu app - embora tenha cuidado falso-positivos e uso em partes das bibliotecas 3rd partido que você não usa.</span></span></li> +</ul> + +<h2 id="Privacidade">Privacidade</h2> + +<p> </p> + +<ul> + <li><span id="result_box" lang="pt"><span>O desenvolvedor deve</span> <span>conectar-se a</span> <span>uma política de privacidade</span> <span>durante o envio</span><span>,</span> <span>mas não existem</span> <span>requisitos para</span> <span>o formato e conteúdo</span> <span>desta política de privacidade</span><span>.</span> <span>Sinta-se livre</span> <span>para usar nosso</span> <span>modelo de <a href="https://github.com/flamsmark/privacy-policy-template">política de privacidade</a></span><a href="https://github.com/flamsmark/privacy-policy-template"> </a><span><a href="https://github.com/flamsmark/privacy-policy-template">privacidade</a>.</span> <span>Também dê uma</span> <span>olhada em nossas</span> <a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Privacy_policies">diretrizes de política de privacidade.</a></span></li> +</ul> + +<h2 id="Conteúdo">Conteúdo</h2> + +<ul> + <li><span id="result_box" lang="pt"><span class="alt-edited">Quaisquer aplicativos que violam nossas Diretrizes de conteúdo a seguir não são permitidos. Se você acha que tem um caso extremo, por favor, pergunte a equipe de revisão de esclarecimento, mesmo se o aplicativo ainda não esteja pronto para ser submetido. Queremos ajudá-lo a ficar no caminho certo, em vez de investir tempo de desenvolvimento em conteúdo que será rejeitada.</span></span></li> + <li><span id="result_box" lang="pt"><span>A partir de janeiro</span> <span>de 2014,</span> <span>todos os aplicativos</span> <span>devem</span> <span>receber uma classificação</span> <span>da</span> <span>Coalizão Internacional de Classificação</span> <span>(IARC</span><span>)</span><span>.</span> <span>Para obter esta</span> <span>classificação</span><span>, vamos</span> <span>encaminhá-lo para</span> <span>um breve questionário</span> <span>durante o</span> <span>processo de submissão,</span> <span>e você vai</span> <span>receber a</span> <span>classificação</span> <span>imediatamente.</span> <span>Mais informações sobre</span> <span>o processo de</span> <span>classificação</span> <span>está disponível <a href="https://developer.mozilla.org/en-US/Marketplace/Submission/Rating_Your_Content">aqui</a>.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Imagens e descrições apresentadas ao Firefox Marketplace deve representar com precisão o aplicativo. Você pode incluir 1-2 imagens "marketing" que mostram a compatibilidade, comparar características, ou outra forma, gerar interesse, mas deve haver pelo menos uma captura de tela do aplicativo em ação, de modo que os usuários podem visualizar o que eles estão realmente recebendo. Se uma das suas imagens é uma tela inicial ou lançamento, você também deve incluir uma imagem da parte funcional de sua aplicação.</span></span></li> + <li><span id="result_box" lang="pt"><span>No manifesto do aplicativo</span><span>, as<a href="/en-US/docs/Web/Apps/Manifest#locales"> chaves de localidade</a></span> <span>deve coincidir com as</span> <span>localizações</span> <span>que</span> <span>seu aplicativo</span> <span>suporta.</span> <span>Ao fornecer</span> <span>uma chave</span> <span>de localidade</span> <span>em polaco</span><span>, os usuários vão</span> <span>esperar que o seu</span> <span>app</span> <span>para estar disponível</span> <span>nesse idioma.</span></span></li> + <li><span id="result_box" lang="pt"><span>O</span> <span>ícone do aplicativo</span> <span>deve seguir o</span> <span>guia de estilo</span> <a href="https://www.mozilla.org/en-US/styleguide/products/firefox-os/icons/">ícones de aplicativos Firefox OS</a><span>.</span> <span>Apenas</span> <span>um ícone de</span> <span>128 x 128</span> <span>é obrigatório, mas</span> <span>recomendamos também</span> <span>um ícone de</span> <span>512</span> <span>x 512</span> <span>também (</span><span>para mais</span> <span>detalhes, consulte</span> <span>a <a href="/en-US/Apps/Build/Icon_implementation_for_apps#Firefox_OS">implementação Ícone para apps.</a></span><span>) Note que</span> <span>os ícones podem</span> <span>ser redondo</span><span>,</span> <span>quadrado arredondado</span> <span>canto</span><span>,</span> <span>ou quadrado</span><span>,</span> <span>de acordo com o</span> <span>guia de estilo</span> <span>.</span></span></li> +</ul> + +<h3 id="Diretrizes_do_Conteúdo"><strong>Diretrizes do Conteúdo</strong></h3> + +<p><span id="result_box" lang="pt"><span class="alt-edited">Esta lista descreve os tipos de conteúdo que são inadequados para o Firefox Marketplace. Esta lista é ilustrativa, não é definitivo, e pode ser atualizado. Se um pedido for encontrado para ser uma violação dessas diretrizes de conteúdo, Mozilla tem o direito de remover imediatamente o aplicativo do Firefox Marketplace.</span></span></p> + +<ul> + <li><span id="result_box" lang="pt"><span>Nenhum</span> <span>material pornográfico</span> <span>obsceno ou</span> <span>representações gráficas de</span> <span>sexualidade e violência</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span>Nenhum conteúdo</span> <span>que infrinja</span> <span>os direitos de ninguém</span><span>, incluindo a propriedade</span> <span>intelectual ou outros</span> <span>direitos de propriedade ou</span> <span>direitos</span> <span>de privacidade ou publicidade</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span>Nenhum conteúdo</span> <span>que é projetado para</span> <span>prejudicar</span> <span>Mozilla</span> <span>ou</span> <span>usuários</span> <span>(tais como</span> <span>códigos maliciosos</span><span>, vírus</span><span>, spyware</span> <span>ou malware</span><span>)</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span>Nenhum conteúdo</span> <span>que seja ilegal ou</span> <span>promova atividades ilegais</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Nenhum conteúdo que é deprecivo, enganosa, fraudulenta ou é projetado para phish ou realizar outro roubo de identidade.</span></span></li> + <li><span class="short_text" id="result_box" lang="pt"><span class="alt-edited">Nenhum conteúdo que promova jogos de azar.</span></span></li> + <li><span id="result_box" lang="pt"><span>Nenhum</span> <span>conteúdo que</span> <span>engaja na</span> <span>propaganda de produtos</span> <span>ou serviços</span> <span>ilegais ou</span> <span>controladas.</span></span></li> + <li>Nenhum <span class="short_text" id="result_box" lang="pt"><span>conteúdos que exploram crianças</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span>Nenhum conteúdo</span> <span>que degrada</span><span>,</span> <span>intimida</span><span>,</span> <span>incite à violência</span> <span>contra</span> <span>ou</span> <span>incentiva</span> <span>ação</span> <span>prejudicial</span> <span>contra alguém</span> <span>ou um grupo</span> <span>com base na idade</span><span>, sexo, raça</span><span>,</span> <span>etnia, nacionalidade</span><span>, religião, orientação</span> <span>sexual,</span> <span>deficiência, religião</span><span>, localização geográfica</span> <span>ou</span> <span>outra categoria protegida</span> <span>ou constitua</span> <span>discurso de ódio</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span>Nenhum</span> <span>conteúdo que</span> <span>engana</span> <span>um usuário</span> <span>a tomar uma decisão</span> <span>de compra.</span></span></li> +</ul> + +<h2 id="Funcionalidade">Funcionalidade</h2> + +<p><span id="result_box" lang="pt"><span class="alt-edited">O revisor deve ser capaz de realizar primários recursos anunciados pelo aplicativo. Falhas de cosméticos e inconvenientes menores serão relatados para o desenvolvedor, mas não vai impedir que um aplicativo seja aprovado.</span></span></p> + +<ul> + <li><span id="result_box" lang="pt"><span>O aplicativo</span> <span>não deve comprometer</span> <span>o desempenho e</span> <span>estabilidade do sistema.</span></span></li> +</ul> + +<h2 id="Usuabilidade">Usuabilidade</h2> + +<p><span id="result_box" lang="pt"><span>elementos de navegação</span><span>, tais como botões</span> <span>e links,</span> <span>deve ser fácil de</span> <span>clique</span> <span>ou toque</span><span>.</span></span></p> + +<ul> + <li><span id="result_box" lang="pt"><span>O desenvolvedor</span> <span>deve fazer uma</span> <span>tentativa razoável</span> <span>para otimizar o</span> <span>layout do</span> <span>aplicativo para</span> <span>a plataforma de destino</span><span>.</span> <span>O</span> <span>intuito desta exigência</span> <span>é pegar</span> <span>falhas</span> <span>óbvias</span><span>, tais como</span><span>:</span></span> + + <ul> + <li><span id="result_box" lang="pt"><span>Um aplicativo</span> <span>apresentado</span> <span>para celular</span> <span>que é</span><span>, obviamente,</span> <span>um site</span> <span>desktop.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Um aplicativo que muito obviamente não se ajusta para preencher o espaço disponível na tela (imagine um aplicativo de 320x480, que ocupa apenas no canto superior em um tablet, com o resto da tela em branco. Isso certamente não se destina!)</span></span></li> + </ul> + </li> + <li><span id="result_box" lang="pt"><span>O aplicativo</span> <span>deve implementar</span> <span>seu próprio método de</span> <span>navegação</span> <span>e não depender do navegador Chrome</span><span> ou</span> <span>um botão de hardware</span> <span>de volta</span><span>, que</span> <span>não estará presente</span> <span>em todos os dispositivos</span></span> .</li> + <li><span id="result_box" lang="pt"><span>Por exemplo,</span> <span>um aplicativo</span> <span>será rejeitado</span> <span>se o revisor</span> <span>navega</span> <span>em algum lugar</span> <span>dentro do aplicativo</span> <span>e não</span> <span>é capaz de</span> <span>navegar de volta</span><span>.</span> <span>Apps não</span> <span>são necessários para implementar</span> <span>uma barra de botões</span> <span>comum</span> <span>para</span> <span>aplicativos nativos</span><span>.</span></span></li> + <li><span lang="pt"><span>Em</span> <span>v1.1</span> <span>Firefox</span> <span>OS</span> <span>e maior</span><span>, você pode</span> <span>adicionar a propriedade</span> <span>manifesto</span> <span>chrome</span> <span>para adicionar</span> <span>controles de navegação</span> <span>mínimas.</span></span> </li> +</ul> + +<h2 id="Política_de_Bloqueamentos">Política de Bloqueamentos</h2> + +<p><span id="result_box" lang="pt"><span class="alt-edited">Nós esperamos que nós nunca tem que usá-lo, mas nós nos reservamos o direito de remover ("lista de bloqueio") qualquer aplicativo publicado que é encontrado mais tarde para violar quaisquer requisitos de segurança, de privacidade ou conteúdo, ou aplicativos que degradam seriamente sistema ou o desempenho da rede. Os desenvolvedores serão informados sobre a situação antes que um aplicativo é enviado a lista de bloqueios, vai ser assumido como sendo um bom cidadão a menos que tenhamos provas específicas em contrário, e receberão assistência integral da equipe de revisão app para comunicar o que está acontecendo e obter o problema resolvido. Os exemplos específicos de situações em que se justifica bloqueamento incluem:</span></span></p> + +<ul> + <li>Phishing</li> + <li>Spamming</li> + <li><span id="result_box" lang="pt"><span>Alterar</span> <span>o conteúdo de</span> <span>filhotes de cachorro</span> <span>v1.0</span> <span>para</span> <span>Brutal</span> <span>Violência</span> <span>v1.0</span> <span>(</span><span>sem atualizar</span> <span>a classificação de</span> <span>conteúdo)</span></span></li> + <li><span id="result_box" lang="pt"><span>mau comportamento</span> <span>grave de</span> <span>aplicativo</span> <span>para uma</span> <span>grande porcentagem de usuários</span> <span>-</span> <span>desempenho do telefone</span> <span>degradante</span><span>,</span> <span>causando</span> <span>reinicializações</span><span>, causando</span> <span>perda de dados</span> <span>do usuário</span><span>, etc.</span><span>, onde</span> <span>os usuários não podem</span> <span>dizer que é</span> <span>por causa do</span> <span>app</span> <span>e onde não</span> <span>é resolvido</span> <span>com a reinicialização do</span> <span>dispositivo.</span></span></li> + <li><span id="result_box" lang="pt"><span>Um aplicativo</span> <span>que está sendo</span> <span>usado para</span> <span>ataques na rede</span><span>, como</span> <span>uma negação</span> <span>de serviço distribuída</span> <span>(DDoS</span><span>)</span><span>.</span></span></li> +</ul> + +<h2 id="Mais_Informações">Mais Informações</h2> + +<p><span id="result_box" lang="pt"><span>Os seguintes recursos fornecem</span> <span>mais informações sobre</span> <span>o processo de revisão</span> <span>e de aplicativos</span> <span>revisores:</span></span></p> + +<ul> + <li><a href="https://wiki.mozilla.org/Marketplace/Reviewers/Apps/Testing">Critérios da Revisão de App</a> — <span id="result_box" lang="pt"><span>Esta página descreve</span> <span>os testes</span> <span>que os revisores</span> <span>de aplicativos</span> <span>irá realizar</span> <span>em</span> <span>seus aplicativos</span></span></li> + <li><a href="https://wiki.mozilla.org/Marketplace/Reviewers/Apps">App reviewers</a> — <span id="result_box" lang="pt"><span>como contactar</span> <span>a equipa de revisão</span> <span>app</span> <span>e envolver-se</span> <span>a avaliar</span> <span>aplicativos</span></span></li> +</ul> diff --git a/files/pt-br/mozilla/marketplace/publishing/index.html b/files/pt-br/mozilla/marketplace/publishing/index.html new file mode 100644 index 0000000000..e2b172a388 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/publishing/index.html @@ -0,0 +1,9 @@ +--- +title: Publishing +slug: Mozilla/Marketplace/Publishing +tags: + - NeedsTranslation + - TopicStub +translation_of: Archive/Mozilla/Marketplace/Publishing/Introduction +--- +<p>Marketplace publishing</p> diff --git a/files/pt-br/mozilla/marketplace/publishing/opcoes_de_publicacao/index.html b/files/pt-br/mozilla/marketplace/publishing/opcoes_de_publicacao/index.html new file mode 100644 index 0000000000..84bf1dbfc3 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/publishing/opcoes_de_publicacao/index.html @@ -0,0 +1,69 @@ +--- +title: Opções de publicação de aplicativos +slug: Mozilla/Marketplace/Publishing/Opcoes_de_publicacao +translation_of: Archive/Mozilla/Marketplace/Options/Self_publishing +--- +<div class="summary"> + <p>Depois de ter terminado o seu aplicativo, você precisa implementá-lo e publicá-lo. Trata-se de torná-lo disponível para os usuários consomem (se eles estão indo para apenas navegar para ele em um browser e usá-lo como uma página web normal, ou baixá-lo e instalá-lo em um dispositivo (como um telefone Firefox OS), permitindo que as pessoas sei que está disponível, e fornecer informações de apoio, tais como instruções de uso e recursos de ajuda. Este artigo analisa brevemente as opções disponíveis para você.</p> +</div> +<h2 id="Publishing_on_the_Firefox_Marketplace">Publishing on the Firefox Marketplace</h2> +<p>O <a href="https://marketplace.firefox.com/" title="/en-US/docs/Web/Apps/Publishing/Submitting_an_app">Firefox Marketplace</a> é a nossa própria loja de aplicativos dedicados para a distribuição de aplicativos gratuitos e pagos. Apresentação de um aplicativo para o Firefox <a href="/en-US/docs/Web/Apps/Publishing/Submitting_an_app">Aplicativo para o Firefox Marketplace</a> é um processo simples, que envolve carregar o aplicativo em si, mais em torno da informação, e esperando por ele para passar por nosso processo de revisão completa para ter certeza que é de alta qualidade e não malicioso. Apresentar ao Firefox mercado também confere outras vantagens, como aumento da publicidade, não há necessidade de implementar APIs especiais em seu próprio Web site, bem como a possibilidade de publicação de aplicativos pagos mais facilmente. Você pode enviar os aplicativos hospedados e aplicativos empacotados para o Firefox Marketplace.</p> +<p> </p> +<h3 id="Hosted_apps">Hosted apps</h3> +<p>A hosted app is basically an app hosted on a web server just like a regular web page. If you want to let people install a hosted app straight from the site, you must <a href="/en-US/Apps/Developing/JavaScript_API">implement some JavaScript code</a> on your Web site to manage installing and updating your app into users' browsers, and make sure your app code includes a valid manifest file. Please see our writeups of <a href="/en-US/docs/Web/Apps/Introduction_to_open_web_apps#Manifest" title="/en-US/docs/Web/Apps/Introduction_to_open_web_apps#Manifest">manifest files</a> and <a href="/en-US/docs/Web/Apps/Introduction_to_open_web_apps#Install_API_functionality" title="/en-US/docs/Web/Apps/Introduction_to_open_web_apps#Install_API_functionality">Install API functionality</a> for how simple these steps are to implement.</p> +<p>Where you host the app is really up to you, but the two options listed below are probably the most common and easiest.</p> +<h4 id="GitHub">GitHub</h4> +<p>If the Web app is purely static (HTML/CSS/JavaScript, but no server-side processing), <a href="http://pages.github.com" rel="external">GitHub Pages</a> is a solid hosting option. It will serve your manifest with the <a href="/en-US/Apps/Developing/Manifest#Serving_from_GitHub">correct MIME type</a> if you give it a <code>.webapp</code> extension.</p> +<h4 id="Generic_hosting_solutions">Generic hosting solutions</h4> +<p>For dynamic websites, use a generic hosting option (like a Web server you may already own or have access to) with the right capabilities or a hosting provider specifically tailored to the needs of your app, like <a href="http://www.heroku.com" rel="external">Heroku</a> or <a href="http://code.google.com/appengine" rel="external">Google App Engine</a>.</p> +<div class="note"> + <p><strong>Note</strong>: Installable open web apps have a "single app per origin" security policy; basically, you can't host more than one installable app per origin. This makes testing a bit more tricky, but there are still ways around this, such as creating different sub-domains for apps, testing them using the Firefox OS Simulator, or testing the install functionality on Firefox Aurora/Nightly, which allow installable web apps to install on the desktop. See <a href="/en-US/docs/Web/Apps/FAQs/About_app_manifests">FAQs about apps manifests</a> for more information on origins.</p> +</div> +<h3 id="Packaged_apps">Packaged apps</h3> +<p>A packaged app is an Open Web App that has all of its resources (HTML, CSS, JavaScript, app manifest, and so on) contained in a zip file, instead of having its resources on a Web server. A packaged app is simply a zip file with the <a href="https://developer.mozilla.org/en-US/docs/Web/Apps/Manifest">app manifest</a> in its root directory. The manifest must be named <code>manifest.webapp</code>.</p> +<p>One difference from a hosted app is that a packaged app must specify a <code><a href="https://developer.mozilla.org/en-US/docs/Web/Apps/Manifest#launch_path">launch_path</a></code> in the manifest, whereas it's an optional manifest field for a hosted app. For more information, check out our <a href="/en-US/docs/Web/Apps/Publishing/Packaged_Apps" title="/en-US/docs/Web/Apps/Publishing/Packaged_Apps">Packaged Apps</a> article.</p> +<h2 id="Aplicações_de_auto-publicação">Aplicações de auto-publicação</h2> +<p>Você também pode optar por aplicações de auto-publicar. Para aplicativos hospedados, este envolve apenas colocá-los em hospedagem na web, como detalhado acima.<br> + <br> + Você pode auto-publicar um aplicativo em pacote por hospedá-lo em um servidor, juntamente com um mini-manifesto no mesmo diretório que identifica o aplicativo e é usado no processo de instalação. Vamos percorrer este processo:</p> +<ol> + <li>Tenha arquivo zip do seu aplicativo em pacote disponíveis e dar-lhe o nome <code>package.zip</code>. Este arquivo contém todos os arquivos de recursos do aplicativo, incluindo o manifesto.</li> + <li>Crie um arquivo chamado <code>package.manifest</code> com o conteúdo abaixo. Este é um mini-manifesto usado para fins de instalação aplicativo embalados. Não é o manifesto principal do seu aplicativo que está dentro do arquivo zip. + <pre class="brush: js">{ + "name": "My sample app", + "package_path" : "http://my-server.com/my-app-directory/my-app.zip", + "version": "1", + "developer": { + "name": "Chris Mills", + "url": "http://my-server.com" + } +}</pre> + </li> + <li>Create a file named <code>index.html</code> with the following contents. This contains sample JavaScript that calls the packaged app (<a href="/en-US/docs/Web/API/Apps.installPackage"><code>installPackage()</code></a>) and callbacks for success and failure notification. + <pre class="brush: html"><html> + <body> + <p>Packaged app installation page</p> + <script> + // This URL must be a full url. + var manifestUrl = 'http://my-server.com/my-app-directory/package.manifest'; + var req = navigator.mozApps.installPackage(manifestUrl); + req.onsuccess = function() { + alert(this.result.origin); + }; + req.onerror = function() { + alert(this.error.name); + }; + </script> + </body> +</html></pre> + </li> + <li>Copy <code>package.zip</code>, <code>package.manifest</code>, and <code>index.html</code> into your app root directory (<code>my-app-directory</code> in my examples).</li> + <li>Usando um dispositivo compatível (como um telefone Firefox OS), navegue até o local em seu servidor onde você colocou os arquivos de exemplo e confirmar a solicitação para instalar o aplicativo. O script vai lhe dar uma indicação de sucesso ou falha de instalação.</li> +</ol> +<div class="note"> + <p><strong>Note:</strong> Você não pode instalar aplicativos privilegiados ou certificados a partir de pacotes de auto-hospedado, como eles precisam ser assinado usando o processo de submissão Firefox Marketplace.</p> +</div> +<div class="note"> + <p><strong>Note</strong>: You can even <a href="/en-US/docs/Web/Apps/Creating_a_store" title="/en-US/docs/Web/Apps/Creating_a_store">create your own apps store</a>, which has a number of options available to it.</p> +</div> +<p> </p> diff --git a/files/pt-br/mozilla/marketplace/publishing/policies_and_guidelines/index.html b/files/pt-br/mozilla/marketplace/publishing/policies_and_guidelines/index.html new file mode 100644 index 0000000000..eb579fe3a0 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/publishing/policies_and_guidelines/index.html @@ -0,0 +1,10 @@ +--- +title: Policies and Guidelines +slug: Mozilla/Marketplace/Publishing/Policies_and_Guidelines +tags: + - NeedsTranslation + - Structure + - TopicStub +translation_of: Archive/Mozilla/Marketplace/Publishing/Policies_and_Guidelines +--- +<p>This section contains Firefox Marketplace policies and guidelines</p> diff --git a/files/pt-br/mozilla/marketplace/publishing/policies_and_guidelines/politica_privacidade/index.html b/files/pt-br/mozilla/marketplace/publishing/policies_and_guidelines/politica_privacidade/index.html new file mode 100644 index 0000000000..e0ddb7d403 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/publishing/policies_and_guidelines/politica_privacidade/index.html @@ -0,0 +1,74 @@ +--- +title: Diretrizes da Política de Privacidade +slug: Mozilla/Marketplace/Publishing/Policies_and_Guidelines/politica_privacidade +tags: + - Apps + - Começando + - Firefox OS + - Guía + - Marketplace + - politica + - privacidade +translation_of: >- + Archive/Mozilla/Marketplace/Publishing/Policies_and_Guidelines/Privacy_policies +--- +<div class="summary"> +<p><span id="result_box" lang="pt"><span class="alt-edited">Privacidade é difícil de acertar. É um conceito complicado que envolve leis, normas sociais e expectativas dos utilizadores. O desenvolvedor de um aplicativo, site, página ou add-on que leva a privacidade a sério inspira a confiança do usuário. Reunimos estas diretrizes para ajudá-lo a fazer um app com consiência de privacidade, e escrever uma boa política de privacidade para isso. Por favor, lembre-se que este não é um substituto para um advogado de verdade e não fornece aconselhamento jurídico.</span></span></p> +</div> + +<h2 id="sect1"> </h2> + +<h2 id="Política_de_privacidade">Política de privacidade</h2> + +<p> </p> + +<p><span id="result_box" lang="pt"><span class="alt-edited">A política de privacidade é uma descrição do que você faz com os dados sobre as pessoas. Um deve ser fornecida quando o aplicativo faz nada com os dados sobre seus usuários. As coisas críticas para descrever na política são como você e seu aplicativo coleta, usa, armazena e compartilha ou divulga informações sobre as pessoas. Fornecendo uma política de privacidade também ajuda seus usuários a entender o que acontece com informações sobre eles.Diferentes lugares ao redor do mundo têm requisitos específicos para a forma como os dados do usuário são coletadas, usadas, armazenadas e divulgados. Em alguns territórios, pode ser uma exigência legal para fornecer uma política de privacidade. Você definitivamente precisa falar com um advogado para ajudá-lo a navegar no mundo da privacidade e fazer uma política de privacidade que diz a seus usuários o que eles precisam saber.</span></span></p> + +<h2 id="Requerimentos_do_Mozilla_Marketplace">Requerimentos do Mozilla Marketplace</h2> + +<p><span id="result_box" lang="pt"><span>Se</span> <span>seu aplicativo</span> <span>faz nada</span> <span>com os dados</span> <span>sobre seus usuários</span><span>,</span> <span>você é obrigado a</span> <span>fornecer uma</span> <span>política de privacidade para</span> <span>a sua aplicação</span> <span>no Firefox</span> <span>Marketplace.</span></span></p> + +<div class="note"> +<p><span id="result_box" lang="pt"><span class="alt-edited">Se o seu aplicativo não coletar, usar, armazenar e compartilhar ou divulgar qualquer informação sobre as pessoas, basta digitar "Este aplicativo não coleta, usa, armazena e compartilha ou divulga qualquer informação sobre o usuário ou qualquer outra pessoa." no campo da Política de Privacidade de mercado.</span></span></p> +</div> + +<h2 id="Sugestões_de_privacidade_para_a_concepção_de_aplicações"><span id="result_box" lang="pt"><span>Sugestões de privacidade</span> <span>para a concepção de</span> <span>aplicações</span></span></h2> + +<p> </p> + +<ul> + <li><span id="result_box" lang="pt"><span>Projetar</span> <span>seu aplicativo</span> <span>ou add-on</span> <span>para que</span> <span>o que você realmente</span> <span>fazer com os dados</span> <span>do usuário</span> <span>é</span> <span>o que os usuários</span> <span>pensam que estão fazendo</span> <span>com ele.</span></span></li> + <li><span id="result_box" lang="pt"><span class="alt-edited">Tente dar ao usuário o máximo de controle sobre seus dados, como você pode, como dando-lhes a opção de mostrar ou ocultar da recolha de dados sempre que possível.</span></span></li> + <li><span id="result_box" lang="pt"><span>Tente limitar</span> <span>a sua</span> <span>recolha de dados e</span> <span>usar</span> <span>apenas</span> <span>os dados que</span> <span>você precisa.</span></span></li> + <li><span id="result_box" lang="pt"><span>Projetar</span> <span>seu aplicativo</span> <span>e serviço</span> <span>para proteger a</span> <span>segurança dos seus dados</span> <span>de usuários</span> <span>em sua coleção</span><span>, armazenamento e</span> <span>utilização</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span>Responder</span> <span>às perguntas dos utilizadores</span> <span>e preocupações sobre</span> <span>suas</span> <span>práticas de privacidade.</span></span></li> + <li><span class="short_text" id="result_box" lang="pt"><span>Evite</span> <span>atualizações</span> <span>"secretas"</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span>Faça o seu</span> <span>uso de</span> <span>recursos sociais</span> <span>transparentes</span><span>, de modo que</span> <span>os usuários estão</span> <span>cientes de quando</span> <span>eles estão compartilhando</span> <span>dados</span> <span>socialmente</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span>Dar às pessoas</span> <span>uma maneira de</span> <span>desativar o compartilhamento</span> <span>automático ou</span> <span>fazer escolhas</span> <span>mais granulares</span> <span>sobre o compartilhamento de</span> <span>dados.</span></span></li> + <li>Obtenha consentimento dos usuários quando necessário, especialmente para localização e outras informações sensíveis.</li> + <li>Coloque um link para sua política de privacidade e, se você tiver, seus "termos de uso" em algum lugar no seu aplicativo.</li> +</ul> + +<h2 id="Recursos_Adicionais">Recursos Adicionais</h2> + +<p><span id="result_box" lang="pt"><span>Estes recursos</span> <span>podem ser úteis</span> <span>em ajudar com</span> <span>a criação de</span> <span>sua política de privacidade</span><span>.</span> <span>Estas ligações não</span> <span>são filiados a</span> <span>Mozilla</span> <span>-</span> <span>eles são fornecidos</span> <span>para sua informação.</span></span></p> + +<h3 id="Geradores_de_politicas_de_privacidade">Geradores de politicas de privacidade</h3> + +<ul> + <li><a href="http://generator.cooley.com/sites/privacy/Privacy/PQ2/Pre-PRIVACY-Start.aspx">Cooley LLP</a></li> + <li><a href="https://privacychoice.org/policymaker">Privacy Choice</a></li> + <li><a href="http://www.iubenda.com">iubenda</a></li> +</ul> + +<h3 id="Templates_de_politicas_de_privacidade">Templates de politicas de privacidade</h3> + +<ul> + <li><a href="https://github.com/flamsmark/privacy-policy-template">HTML privacy policy template</a> — GitHub hosted template, check out the <a class="link-https" href="https://github.com/flamsmark/privacy-policy-template#readme" title="https://github.com/flamsmark/privacy-policy-template#readme">README</a> to get started.</li> +</ul> + +<h3 id="Politica_de_privacidade_recurso_adicional">Politica de privacidade recurso adicional</h3> + +<ul> + <li><a href="http://www.privacybydesign.ca">Privacy by Design</a></li> +</ul> diff --git a/files/pt-br/mozilla/marketplace/submission/index.html b/files/pt-br/mozilla/marketplace/submission/index.html new file mode 100644 index 0000000000..1c01f1e00d --- /dev/null +++ b/files/pt-br/mozilla/marketplace/submission/index.html @@ -0,0 +1,9 @@ +--- +title: Submission +slug: Mozilla/Marketplace/Submission +tags: + - NeedsTranslation + - TopicStub +translation_of: Archive/Mozilla/Marketplace/Submission +--- +<p>Marketplace submission</p> diff --git a/files/pt-br/mozilla/marketplace/submission/testando_e_solucionando/index.html b/files/pt-br/mozilla/marketplace/submission/testando_e_solucionando/index.html new file mode 100644 index 0000000000..9d89c193c2 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/submission/testando_e_solucionando/index.html @@ -0,0 +1,41 @@ +--- +title: Testando e solucionando seu aplicativo +slug: Mozilla/Marketplace/Submission/Testando_E_Solucionando +tags: + - Aplicativos + - Celular + - Firefox + - Marketplace +translation_of: >- + Archive/Mozilla/Marketplace/Publishing/Policies_and_Guidelines/Testing_and_troubleshooting +--- +<div class="summary"> + <p><span style="line-height: 1.5;">Este artigo lhe apresenta tudo que você necessitará para testar e acabar com qualquer problema possível em seus aplicativos.</span></p> +</div> +<h2 id="Inciando_a_configuração_de_seu_ambiente_de_teste">Inciando a configuração de seu ambiente de teste</h2> +<h2 id="Existe_um_número_variado_de_ferramentas_ao_qual_você_pode_instalar_os_tais_possuem_sua_total_performance_e_funções_úteis_para_o_desenvolvimento_voltado_ao_Firefox_OSopen_web_apps._Nós_recomendamos_a_instalação_das_seguintes_listadas."><span style="line-height: 1.5; font-size: 14px; font-weight: normal;">Existe um número variado de ferramentas ao qual você pode instalar, os tais possuem sua total performance e funções úteis para o desenvolvimento voltado ao Firefox OS/open web apps. Nós, recomendamos a instalação das seguintes listadas.</span></h2> +<ul> + <li>Firefox para desktop. Nós recomendamos a utilização de uma versão ainda em pré-lançamento, como <a href="http://aurora.mozilla.org/">Aurora</a> ou <a href="http://nightly.mozilla.org/">Nightly</a>. </li> + <li>Firefox para Android. Nós recomendamos a utilização de uma versão em pré-lançamento, como <a href="http://aurora.mozilla.org/">Aurora</a> ou <a href="http://nightly.mozilla.org/">Nightly</a>. Se você não possui um dispositivo Android físico, utilize um <a href="http://developer.android.com/sdk/">Android emulator</a> (Emulador do sistema Operacional Android). </li> + <li>O <a href="/en-US/Firefox_OS/Using_the_App_Manager">Firefox OS App Manager</a>. O mesmo foi criado e inserido no Firefox para desktop, acima da versão 26, além de prover várias ferramentas totalmente úteis, como um depurador de aplicativos e a permissão de instala-los nos emuladores ou dispositivos reais.</li> + <li><a href="/en-US/docs/Tools/Firefox_OS_Simulator">Firefox OS simulator</a>; isto deve ser usado se for do seu desejo testar seus aplicativos especificamente em versões antigas do Firefox OS. Para versões 1.2 ou mais recentes, utilize o App Manager. Você pode se apropriar do painel de controle do simulador, para instala-los.</li> +</ul> +<p><span style="line-height: 1.5;">De forma primordial, é recomendável e ideal que você tenha um dispositivo físico em suas mãos para propósito de testes. Para mais detalhes, veja nosso </span><a href="/en-US/docs/Mozilla/Firefox_OS/Developer_phone_guide" style="line-height: 1.5;">Developer phone guide</a><span style="line-height: 1.5;"> (Guia de desenvolvimento para telefones)</span><span style="line-height: 1.5;">.</span></p> +<h2 id="Testando">Testando</h2> +<p><span style="line-height: 1.5;">Desde de que as propriedades dos aplicativos Web se utilizam da mesma tecnologia e métodos de comunicação que as páginas Web, a experiência como usuário na utilização de aplicativos é um pouco diferente desde que os ambientes, não possuem ferramentas dos navegadores, como uma barra URL ou botões de Ir e Voltar, além, dos dispositivos Firefox OS, que não terão um botão de hardware "voltar", como um Android faz. Estes passos irão ajuda-lo com precisão e garantia que seus aplicativos renderão uma boa experiência para o usuário.</span></p> +<ol> + <li>Instale o aplicativo. Tenha certeza que os ícones são mostrados na tela inicial, e o título de seu aplicativo não seja cortado.</li> + <li>Inicie o aplicativo. Tenha certeza que o tamanho e a orientação da tela, foi devidamente ajustado.</li> + <li>Tenha garantia que o usuário irá visualizar seu aplicativo, e não sua homepage. Lembre-se, os usuários que instalarem seu aplicativo pelo Firefox Marketplace, estarão automaticamente submetidos as condições monetárias exigidas e oferecidas. Não é necessário criar vinculações que levem o usuário novamente para uma página cujo objetivo é demonstrar as funcionalidades do aplicativo. As primeiras experiências do usuário são disposta de melhor forma em Getting Started (Inciando) ou Login page (página de login).</li> + <li>Certifique-se das maiores e principais características do aplicativo. Especialmente, garantia para não interfaces de navegação sem utilidade ou inúteis, além de conteúdo lógico ou não, que possa ser mal disposto e provoque erros.</li> + <li>Tenha certeza que os links que levam a experiência de seu aplicativo para fora do mesmo, contenham o conteúdo real e desejado a ser exibido, como links para outras páginas web, ou a exemplo, o Twitter, onde as mesmas rodem em sua própria página pelo navegador, ou mesmo, você desenvolvedor, crie acessos ou estruturas que o exibam direto do aplicativo, permitindo a qualquer instante, o usuário voltar.</li> + <li>Centralizando no navegador para desktop, se utilize do <a href="/en-US/docs/Tools/Responsive_Design_View">Responsive Design View</a> (Design atrativo/compreensivo) para manter a qualidade de seus aplicativos em diferentes resoluções de tela. Nós recomendamos a escolha de resoluções de 320X480 até 1260X800.</li> +</ol> +<h2 id="Resolução_de_problemas">Resolução de problemas</h2> +<ul> + <li>Se você necessita de ajuda para o desenvolvimento dos aplicativos, o <a href="/en-US/Apps">App Center</a> (Central dos aplicativos) possui uma larga quantidade de informação sobre design e técnicas de desenvolvimento, instalação, APIs suportadas, e muito mais.</li> + <li>O <a href="/en-US/Firefox_OS">Firefox OS zone</a> possui uma larga quantidade de informação sobre a plataforma Firefox OS, como exemplos de construção do S.O (sistema operacional), até como hackear aplicativos padrão do sistema.</li> + <li>Para todos e mais detalhes de como submeter um aplicativo ao Firefox Marketplace, e o que vai ser necessário, veja nosso guia <a href="/en-US/Marketplace/Submission/Submitting_an_app">Submitting an app to the Firefox Marketplace</a> (Submetendo um aplicativo ao Firefox Marketplace).</li> + <li>O <a href="/en-US/docs/Mozilla/Marketplace/FAQ">Marketplace FAQ</a> responde uma série de perguntas comuns relacionadas a publicação de aplicativos no Firefox Marketplace.</li> + <li>Para questionar algo mais específico, existe um extenso número de <a href="http://www.mozilla.org/about/forums/">Forums</a> voltados para ajuda avaliáveis, incluindo newsgroups, mailing lists e o IRC. Veja mais detalhes na parte inferior das páginas <a href="/en-US/Apps">App Center</a>, <a href="/en-US/Firefox_OS">Firefox OS zone</a>, e <a href="/en-US/Marketplace">Marketplace zone</a> demonstrando e dando destinos que melhor se encaixam nos contextos que você procura.</li> +</ul> diff --git a/files/pt-br/mozilla/marketplace/submissão_de_complemento/index.html b/files/pt-br/mozilla/marketplace/submissão_de_complemento/index.html new file mode 100644 index 0000000000..b22a5f60db --- /dev/null +++ b/files/pt-br/mozilla/marketplace/submissão_de_complemento/index.html @@ -0,0 +1,62 @@ +--- +title: Submissão de complemento +slug: Mozilla/Marketplace/Submissão_de_complemento +tags: + - Avaliação + - B2G + - Complementos + - Firefox OS + - Marketplace + - Revisão + - submissão +translation_of: Archive/Mozilla/Marketplace/Add-on_submission +--- +<p class="summary">Firefox OS 2.5+ suporta complementos, uma característica já familiar aos usuários do Firefox Desktop, que permite a personalização de apps específicos ou todo o SO — se comportar como você desejar. A Firefox Marketplace age como um hospedeiro para complementos e apps; esse artigo fornece uma visão geral de como enviar seus complementos para publicação.</p> + +<h2 id="Submissão_passo-a-passo">Submissão passo-a-passo</h2> + +<ol> + <li>Navegue até as <a href="https://marketplace.firefox.com/content/">Ferramentas de Conteúdo da Firefox Marketplace</a> e faça log in no site.</li> + <li>Após você ter entrado, selecione o botão <em>Enviar complemento Firefox OS</em> para ir para <a href="https://marketplace.firefox.com/content/addon/submit/">A página Enviar um complemento Firefox OS</a>; aqui é onde o processo inicia.</li> + <li>Clique em <em>Selecionar um arquivo</em> e selecione o zip do complemento que você quer enviar. Veja a seção {{anch("Add-on package structure")}} abaixo para mais detalhes nos pacotes requeridos/formato do manifesto.</li> + <li>Opcionalmente você pode adicionar notas de submissão. Essas são apenas para propósitos de avaliação e não estão publicamente disponíveis — instruções de teste, teste de detalhes de login, etc.</li> + <li>Clique Enviar. Seu complemento agora será validado. + <ol> + <li>Se houver qualquer erro você será enviado de volta para o passo 3 para reenviar um arquivo zip atualizado.</li> + <li>Se não, você será redirecionado para o seu <a href="https://marketplace.firefox.com/content/addon/dashboard/">dashboard</a>, onde todos os seus envios estarão listados.</li> + </ol> + </li> + <li>Após um avaliador ter visto o seu complemento, um email será enviao para notificar você do resultado.</li> +</ol> + +<h2 id="Editando_e_atualizando_seu_complemento">Editando e atualizando seu complemento</h2> + +<p>Após um envio com sucesso do seu complemento, você pode editar/atualizar ele indo para o seu <a href="/en-US/docs/">dashboard</a> e selecionando <em>Editar esse complemento</em>.</p> + +<p>Novas versões do complemento podem ser adicionadas nessa página. Subir uma nova versão enquanto uma versão anterior está pendente irá marcar a versão anterior como obsoleta e a nova versão será marcada como pendente (no máximo 1 versão pode estar pendente por vez).</p> + +<p>Uma vez que a versão está aprovada então ela estará disponível para instalação; ela permanecerá disponível até que uma nova versão seja aprovada.</p> + +<h2 id="Estrutura_do_pacote_de_complemento">Estrutura do pacote de complemento</h2> + +<p>O complemento é submetido como um arquivo zip. Essa seção detalha o que o zip deve conter.</p> + +<p>O manifest.json (arquivo de Manifesto) deve estar na raíz do arquivo zip. Detalhes chave são como segue:</p> + +<ul> + <li><code>name</code> é obrigatório.</li> + <li><code>version</code> é obrigatório.</li> + <li><code>description</code> é opcional, mas será usado pela Marketplace na {{anch("Add-on detail page")}}.</li> + <li><code>icons</code> é usado para encontrar ícones para mostrar namarketplace, e no dispositivo quando o complemento está instalado.</li> + <li><code>author</code> atualmente não é usado pela Marketplace, mas será mostrado no dispositivo quando o complemento estiver instalado.</li> +</ul> + +<p>O resto do seu complemento será uma coleção típica de CSS, JavaScript, ícones, etc. Novamente, isso tudo deveria estar na raíz do arquivo zip, não dentro de uma subpasta — não compacte sua pasta do projeto; compacte o conteúdo da pasta do projeto.) Para mais informações no desenvolvimento de coplementos, veja <a href="/en-US/docs/Mozilla/Firefox_OS/Add-ons">Complementos Firefox OS</a>.</p> + +<div class="note"> +<p><strong>Nota</strong>: A <a href="https://wiki.mozilla.org/Marketplace/Add-ons/Validation">Validação</a> descreve o estado atual do validador de manifesto.</p> +</div> + +<h2 id="Critério_de_avaliação">Critério de avaliação</h2> + +<p>Você pode avaliar o <a href="/en-US/docs/Mozilla/Marketplace/Add-on_submission/Review_criteria">Critério de revisão de complementos do Firefox OS add-ons</a> para ter certeza que seu complemento segue ele.</p> diff --git a/files/pt-br/mozilla/marketplace/submissão_de_complemento/review_criteria/index.html b/files/pt-br/mozilla/marketplace/submissão_de_complemento/review_criteria/index.html new file mode 100644 index 0000000000..3cfe5355d9 --- /dev/null +++ b/files/pt-br/mozilla/marketplace/submissão_de_complemento/review_criteria/index.html @@ -0,0 +1,113 @@ +--- +title: Add-on review criteria +slug: Mozilla/Marketplace/Submissão_de_complemento/Review_criteria +tags: + - Add-ons + - Firefox Marketplace + - Revisores de apps + - Revisão +translation_of: Archive/Mozilla/Marketplace/Add-on_submission/Review_criteria +--- +<div class="warning"> +<p>This document is a working draft - it is not final. Do not rely on this document to be correct, consistent or stable.</p> +</div> + +<div class="note"> +<p>This page relates to Add-ons for <strong>FirefoxOS</strong>. See <a href="/docs/Mozilla/Add-ons/AMO/Policy/Reviews">AMO Review Policy</a> for Add-ons for desktop Firefox and Firefox for Android.</p> +</div> + +<div class="summary"> +<p>Este artigo descrve o conjunto de requisitos que um add-on precisa reunir para ser distribuído através do Firefox Marketplace. Estes requisitos são desenhados para balancear as necessidades de ambos desenvolvedores e usuários de add-ons do Firefox Marketplace. Desenvolvedores desejam justo, consistente, não draconiano requisitos que eles podem confiar para construir um negócio. Por outro lado, usuários desejam que que seja garantido a segurança dos add-ons. Trabalharão no dispositivo, e que o add-on fará o que diz que faz. Os requisitos do add-on do alvo abaixo cotado para o delicado balanceamento entre estas necessidades.</p> + +<p>Por causa do grande potencial dos add-ons seja comparado a outros mercados como webapps, a segurança e a confiabilidade está em alta - Nós escolheremos proteger o usuário e a experiência além de facilidades para o desenvolvedor de desenvolver ou monetizar.</p> + +<p>Aqui está a expectativa de o quê a revisão do add-on é ou não é:</p> +</div> + +<ul> + <li>Os critérios serão aplicados de forma justa, compassivo, e de maneira consistente. A revisão do processo de add-on não pretende ser um porteiro, mas de preferência um ponto de toque confiável queprovê feedback para ajudar os desenvolvedores a ser um sucesso.</li> + <li>Revisores não são um equipe QA! Durante o processo de revisão, alguém inspecionará o código fonte do add-on e gastará algum tempo usando os componentes que o add-on providencia como um usuário normal usaria.</li> + <li>Se um add-on falha na revisão, o desenvolvedor aodesenvolvedor será dado uma clara explicação do problema encontrado, passos para reproduzir, e onde onde for possível, o revisor deve pontuar o desenvolvedor na direção certa para providenciar links relevantes para suportar a documentação ou fazer recomendações no que é necessário mudar para ser feito.</li> + <li>Nós sempre daremos aos desenvolvedores o benefício do dúvida. Se inseguro se um add-on deve ser rejeitado. Add-ons não serão (conscientemente) rejeitado por problemas de plataforma que são fora do controle dos desenvolvedores; no entanto nós podemos reter a aprovação se nós não pudermos alcançar o add-on para trabalhar.</li> +</ul> + +<h2 id="Segurança">Segurança</h2> + +<p>Add-ons no FirefoxOS pode rodar junto ao nível do sistema e modificar built-in e precarregar apps dos sistemas. Como tal eles tem significantemente mais escopo para abris a segurança e vulnerabilidades do que webapps, webpages e add-ons em alguma outra plataforma. Nós esperamos que todos os add-ons para ser seguros, não somente em manipularos próprios dados deles, e de usar dados, mas também in todo interacão com a web e sistema operacional. Especilamente, add-ons não necessitam:</p> + +<ul> + <li>Criar ou expôr vulnerabilidades na segurança</li> + <li>Sabotagem com o sistema operacional/add-on código atualizado, ou funções bloqueadas em blocos</li> + <li>Executa código remoto</li> + <li>Degrada a segurança de sites HTTPS</li> + <li>Instalar add-ons adicionais ou apps sem o consentimento do usuário</li> + <li>Bloqueia, interfere ou faz chamadas telefônicasou sms sem o consentimento do usuário</li> + <li>Faz alguma conexão remota no sistema do app</li> +</ul> + +<h2 id="Privacidade_e_Consentimento_do_usuário">Privacidade e Consentimento do usuário</h2> + +<ul> + <li>Se o add-on processar ou transmitir dados do usuário uma política de privacidade deve ser ligada na descrição; Não há requisitos para o formato e conteúdo dessa política de privacidade. Sinta-se livre para usar nosso <a href="https://github.com/flamsmark/privacy-policy-template">exemplo de política de privacidade</a>. Também olhe nossas <a href="https://developer.mozilla.org/en-US/Marketplace/Publishing/Privacy_policies">diretrizes da política de privacidade.</a></li> + <li>A respeito da política estabelecida, nós esperamos que todos os add-ons respeitem as escolhas dos usuários e razoável expectativa de privacidade.</li> + <li>Add-ons não precisam mandar dados sensíveis para servidores remotos desprotegidos.</li> + <li>O add-on não precisa prevenir o acesso para o gerenciador do add-on (configurações|Add-ons) ou por outro lado prevenir o usuário de desabilitar ou desinstalar o add-on.</li> + <li>O usuário não precisa ser prevenido de reversão de mudanças feitas pelo add-on.</li> + <li>O add-on não pode fazer inexperadas ou não reveladas mudanças no sistema. apps ou webpages.</li> + <li>O sistema de preferência não pode ser mudado sem o consentimento do usuário</li> +</ul> + +<h2 id="Consentimento">Consentimento</h2> + +<ul> + <li>Alguns add-ons que violam nossas diretrizes de conteúdo abaixo não são permitidos. Se você acha que tem um problema para resolver deste tipo, por favor peça a equipe de revisão para clarificação, até mesmo se o add-on não estiver ainda pronto para ser submetido. Nós desejamos ajudar você na trilha certa, em vez de investir tempo de desenvolvimento em um conteúdo que será rejeitado.</li> + <li>Telas printadas e descrições submetidas para a loja Firefox Marktplace tem que precisamente representar o add-on. Nós recomendamos que a última tela printada do add-on em ação, assim os usuários terão um prévia daquilo que realmente eles estão pegando. Como alguns add-on podem ter mudanças não visuais onde uma tela printada não é relevante nós não requeremos uma.</li> + <li>Nós recomendamos você um ícone para ficar fora do Marketplace e no gerenciador add-on. Mas isto não é requisito. No entanto, se você providenciar um deverá ser relevante para o add-on e não enganoso.</li> +</ul> + +<h3 id="Diretrizes_de_conteúdo"><strong>Diretrizes de conteúdo</strong></h3> + +<p>Essa lista descreve tipos de conteúdo que são inapropriados para o Firefox Marktplace. Essa lista é ilustrativa, não definitiva, e pode ser atualizada. Se um add-on for encontrado violando estas diretrizes, Mozilla tem o direito de imediatamente remover o add-on do Firefox Marketblace.</p> + +<ul> + <li>Material pornográfico ou obsceno é probido, ou representação gráficade sexualidade ou violência.</li> + <li>Nenhum conteúdo que infringe direitos autorais, incluindo propriedade intelectual ou direitos proprietário ou direitos de privacidade ou pubicidade.</li> + <li>Nenhum conteúdo que é desenhado para prejudicar Mozilla ou usuários (tais como código malicioso, vírus, spyware ou malware).</li> + <li>Nenhum conteúdo que é ilegal ou promove as atividades ilegais.</li> + <li>Nenhum conteúdo enganador, fraudulento ou feito para hackear ou realizar roubo de identidades.</li> + <li>Nenhum conteúdo que promova jogos de azar.</li> + <li>Nenhum conteúdo que engage na propaganda de ilegais ou controlados produtos e serviços.</li> + <li>Nenhum conteúdo que explora crianças.</li> + <li>Nenhum conteúdo que degrade, intimide, incite a violência contra, ou encorage ações prejudiciais contraalguém ou um grupo baseado na idade, gênero, raça, etnia, nacionalidade,religiâo, localização geográfica ou outras categorias ou discursos baseados no ódio.</li> + <li>Nenhum conteúdo que engana um usuário a fazer uma decisão de compra.</li> +</ul> + +<h2 id="Funcionalidade">Funcionalidade</h2> + +<ul> + <li>O revisor deve ser capaz de realizar recursos adicionais anunciandos no add-on. Falhas estéticas e menores incoveniências serão reportadas para o desenvolvedor, mas não prevenirá um add-on de ser aprovado.</li> + <li> O add-on não pode comprometer a performance do sistema ou estabilidade.</li> + <li>Add-ons não podem baixar uma grande quantidade de dados sem o usuário estar ciente.</li> + <li>Mudanças feitas por add-ons não precisam persistir depois que o add-on foi desabilitado ou desinstalado.</li> +</ul> + +<h2 id="Política_da_lista_de_bloqueio">Política da lista de bloqueio</h2> + +<p>Nós esperamos que nunca use isso mas nós nos reservamos ao direito de remover ("Lista de bloqueio") qualquer add-on publicado que posteriormente for encontrado violandoqualquer segurança, privacidade, ou requisito de conteúdo, ou add-ons que seriamente degrada a performance de sistema ou da rede. Desenvolvedores serão informados da situação antes de um add-on ser bloquado, assumiremos ser um bom cidadão à menos que nós tenhamos achado evidências ao contrário, e receberá total assistência do time de revisão para comunicar o que está havendo e em como resolver este problema. Examplos espcíficos da situação onde a lista de bloqueio é garantido, inclusive:</p> + +<ul> + <li>Phishing</li> + <li>Spamming</li> + <li>Severo mau comportamento do add-on por grande percentual de usuários - degradação da performance do celular, causando reboots, causando useretc. Perda de dados, onde usuários não podem dizer se por causa do add-on e onde não é resolvido pelo reboot do aparelho.</li> + <li>Um add-on usado para attacks na rede, tais como um negação distribuída de serviço (DDOS).</li> + <li>An add-on being used for attacks on the network, such as a distributed denial of service (DDOS).</li> +</ul> + +<h2 id="Mais_Informações">Mais Informações</h2> + +<p>O seguinte recurso providencia mais informações no processo de revisão e revisão de add-ons.</p> + +<ul> + <li><a href="https://wiki.mozilla.org/Marketplace/Reviewers/FxOSAdd-ons/Testing">Revisores de teste por critério</a> - Esta página descreve os testes que os revisores de add-ons realizarão em seus add-ons.</li> + <li><a href="https://wiki.mozilla.org/Marketplace/Reviewers/Apps">Revisores de FxOS Add-on</a> - Como contatar a equipe de revisão de mercado (mesmo que revisores de apps).</li> +</ul> diff --git a/files/pt-br/mozilla/mobile/index.html b/files/pt-br/mozilla/mobile/index.html new file mode 100644 index 0000000000..3197b37970 --- /dev/null +++ b/files/pt-br/mozilla/mobile/index.html @@ -0,0 +1,26 @@ +--- +title: Dispositivos móveis +slug: Mozilla/Mobile +tags: + - Android + - Firefox OS + - Mobile +translation_of: Mozilla/Mobile +--- +<h2 id="Firefox_OS"><a href="/en-US/docs/Archive/B2G_OS" title="Mozilla/Boot to Gecko">Firefox OS</a></h2> + +<p>Firefox OS é um sistema operacional de código aberto (open-source) que utiliza Linux e o motor Gecko da Mozilla para rodar a interface de usuário e aceitar aplicações escritas inteiramente em HTML, CSS e JavaScript.</p> + +<p>Leia mais como instalar o Firefox OS e como desenvolver aplicativos para o mesmo.</p> + +<h2 id="Firefox_para_Android"><a href="/en-US/docs/Mozilla/Firefox_for_Android" title="Mozilla/Firefox_for_Android">Firefox para Android</a></h2> + +<p>Firefox para Android é um navegador web da Mozilla para dispositivos Android. Este foi reescrito recentimento para usar as aplicações nativas do Android, tornando-o mais rápido, enxuto e mais responsivo em relação ao seu user interface. Proporcionando suporte para APIS poderosas para acessar capacidades do dispositivo como câmera e bateria do telefone.</p> + +<p>Leia mais sobre como ajudar a criar Firefox para Android, como usar APIS do dispositivo e como criar add-ons (extensões) para mobile.</p> + +<h2 id="Desenvolvimento_web_para_dispositivos_móveis"><a href="/en-US/docs/Mobile/Mobile_Web_Development" title="Mobile/Mobile_Web_Development">Desenvolvimento web para dispositivos móveis</a></h2> + +<p>Dispositivos móveis tem muitas diferentes caracteristicas de hardware de um desktop ou notebooks, e muitas das APIs usadas para trabalhar com eles estão ainda em processo de padronização</p> + +<p>Leia mais sobre como desenvolver web sites com boa aparência em dispositivos móveis e tirar proveito das novas possibilidades que elas oferecem. Aprenda como fazer para que seu site funcione bem em diferentes navegadores.</p> diff --git a/files/pt-br/mozilla/mobile/viewport_meta_tag/index.html b/files/pt-br/mozilla/mobile/viewport_meta_tag/index.html new file mode 100644 index 0000000000..78e5293405 --- /dev/null +++ b/files/pt-br/mozilla/mobile/viewport_meta_tag/index.html @@ -0,0 +1,85 @@ +--- +title: >- + Usando a meta tag viewport para controlar o layout em navegadores de + dispositivos móveis +slug: Mozilla/Mobile/Viewport_meta_tag +translation_of: Mozilla/Mobile/Viewport_meta_tag +--- +<h2 id="Background">Background</h2> + +<p>Browsers para dispositivos móveis, tal como o Fennec, renderizam as páginas em uma "janela" virtual (o viewport), que costuma ser maior que a tela, fazendo com que não seja necessário "espremer" todo o layout da página para caber em uma janela pequena (o que faria "quebrar" muitos sites não otimizados para visualização em dispositivos móveis). Os usuários podem deslocar e aumentar diferentes áreas da página para visualização.</p> + +<p>O Safari Mobile introduziu a "viewport meta tag" para permitir aos desenvolvedores web controlar o tamanho e a escala da viewport. Atualmente, muitos outros navegadores para dispositivos móveis suportam esta tag, embora ela não faça parte de nenhum padrão web. A Apple possui uma <a class="external" href="http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html#//apple_ref/doc/uid/TP40006509-SW29">documentação</a> que explica bem como os desenvolvedores web podem utilizar esta tag, contudo, tivemos que realizar um trabalho investigativo para encontrar a maneira exata de como implementá-la no Fennec. Por exemplo, a documentação do Safari informa que o conteúdo da tag é composto por uma "lista separada por vírgula", no entanto, os navegadores e páginas web existentes utilizam uma combinação de vírgulas, ponto e vírgulas e espaços como separadores.</p> + +<p>Aprenda mais sobre os diferentes tipos de viewports em navegadores para dispositivos móveis em <a class="external" href="http://www.quirksmode.org/mobile/viewports2.html" title="http://www.quirksmode.org/mobile/viewports2.html">Um Conto sobre Dois Viewports</a> no site quirksmode.org.</p> + +<h2 id="O_Básico_sobre_a_viewport">O Básico sobre a viewport</h2> + +<p>Um site tipicamente otimizado para dispositivos móveis, contém algo como o que segue:</p> + +<pre class="notranslate"><code><meta name="viewport" content="width=device-width, initial-scale=1"></code></pre> + +<p>A propriedade <code>width</code> controla o tamanho da viewport. O valor desta propriedade pode ser definido com um número específico de píxels como por exemplo <code>width=600</code> ou com um valor especial chamado <code>device-width</code> que representa a largura da onde o conteúdo está sendo apresentado em pixels de CSS considerando uma escala de 100%. (Ainda há as propriedades <code>height</code> e <code>device-height</code>, as quais podem ser úteis para páginas com elementos que mudam de posição baseado na altura da viewport.)</p> + +<p>A propriedade <code>initial-scale</code> controla o nível de amplificação quando a página é carregada pela primeira vez. As propriedades <code>maximum-scale</code>, <code>minimum-scale</code>, e <code>user-scalable</code> controlam a permissão para o usuário efetuar aumento ou diminuição da página.</p> + +<div class="blockIndicator warning"> +<p>o uso de <code>user-scalable=no</code> pode causar problemas de acessibildade para usuários com impecílios visuais como baixa visão.</p> +</div> + +<h2 id="Um_pixel_não_é_um_pixel"><a name="A_pixel_is_not_a_pixel"></a>Um pixel não é um pixel</h2> + +<p><span style="line-height: 1.5;">O Iphone e muitos dos telefones populares que rodam Android possuem telas entre 3 e 4-polegadas (7–10 cm) com resolução de 320—480 pixels (~160 dpi). O Firefox para Maemo roda no Nokia N900, o qual tem o mesmo tamanho físico porém possui uma resolução de 480—800 pixels (~240 dpi). Por causa disto, a última versão do Fennec exibia muitas páginas um terço menor (em tamanho físico real) do que o Iphone ou Android. Isto causou problemas de usabilidade e de leitura em muitos sites otimizados para leitura em dispositivos móveis. Peter-Paul Koch escreveu sobre este problema em </span><a class="external" href="http://www.quirksmode.org/blog/archives/2010/04/a_pixel_is_not.html" style="line-height: 1.5;">Um pixel não é um pixel</a><span style="line-height: 1.5;">.</span></p> + +<p>O Fennec 1.1 para Maemo utilizará 1.5 pixels de hardware para cada "pixel" de CSS, seguindo o que hoje é feito por navegadores baseados no WebKit para dispositivos Android. Isto significa que uma página com a largura definida como <code>initial-scale=1, </code>irá ser renderizada o mais próximo do tamanho físico possível no Fennec para Maemo, Safari Mobile para iPhone, e nos navegadores Android nos aparelhos com <a class="external" href="http://developer.android.com/guide/practices/screens_support.html#range">HDPI and MDPI</a>. Isto está em concordância com a <a class="external" href="http://www.w3.org/TR/CSS2/syndata.html#length-units">Especificação CSS 2.1</a>, que diz:</p> + +<blockquote> +<p>Se a densidade do pixel do dispositivo de saída é muito diferente da de um monitor de computador típico, o navegador deverá redimensionar os valores do pixel. Recomenda-se que a unidade do pixel refira-se ao número integral de pixels do dispositivo que mais se aproxima do pixel de referência. Recomenda-se que o pixel de referência seja o ângulo visual formado entre um dispositivo com com uma densidade de pixel de 96dpi e a distância de um braço em relação ao leitor.</p> +</blockquote> + +<p>Para os desenvolvedores web, isto significa que uma resolução de 320px será apresentada na largura total no modo retrato em escala 1, em todos os dispositivos móveis mencionados acima, e eles poderão dimensionar seus layouts e imagens com corformidade. Entretanto, lembre-se de que nem todos os dispositivos móveis possuem a mesma largura; você deve certificar que suas páginas irão funcionar bem em modo paisagem ou em dispositivos com largura maior, como o iPad e outros tablets Android.</p> + +<p>Em telas com 240-dpi, páginas definidas com <code>initial-scale=1</code> serão efetivamente aumentadas para 150% tanto pelo Fennec quanto pelo Android WebKit. O texto das páginas ficará mais suave e nítido, porém as imagens em bitmap provavelmente não terão nenhuma vantagem na visualização em tela cheia. Para obter imagens mais nítidas nestas telas, os desenvolvedores web podem querer projetar as imagens - ou todo o layout – em uma escala de 150% em relação ao seu tamanho final (ou 200%, para suportar dispositivos com 320-dpi tais como as telas de retina do iPhone) e então dimensioná-las com uma menor escala usando CSS ou as propriedaes da viewport.</p> + +<p>A razão padrão depende da densidade da tela. Em uma tela com densidade menor que 200dpi, a razão é de 1.0. Em telas com densidades entre 200 e 300dpi, a razão é de 1.5. Para telas com densidade superior a 300dpi, a razão será dada pelo maior inteiro menor ou igual à <em>densidade</em>/150dpi. Note que a razão padrão é real somente quando a escala da viewport está configurada como 1. Do contrário, a relação entre um pixel de hardware e um pixel CSS dependerá também do nível corrente de aumento (zoom) aplicado.</p> + +<h2 id="Largura_da_viewport_e_largura_da_tela">Largura da viewport e largura da tela</h2> + +<p>Muitos sites definem sua viewport como <code>"width=320, initial-scale=1"</code> para encaixar-se precisamente na tela do iPhone no modo retrato. Como mencionado acima, isto causou <a class="external" href="http://starkravingfinkle.org/blog/2010/01/perils-of-the-viewport-meta-tag/">problemas</a> quando o Fennec 1.0 renderizou estes sites, especialente no modo paisagem. Para corrigir esta situação, o Fennec 1.1 irá expandir a largura da viewport se necessário para preencher a tela na escala requisitada. Isto atende ao comportamento do Android e Safari Mobile, e é especialmente útil em dispositivos com telas grandes como o iPad. (Allen Pike's <a class="external" href="http://www.antipode.ca/2010/choosing-a-viewport-for-ipad-sites/">Escolhendo uma viewport para sites para iPad</a> tem uma boa explanação para desenvolvedores web.)</p> + +<p>Para as páginas que indicam uma escala máxima ou inicial, isto significa que a propriedade <code>width</code> será traduzida para uma largura <em>minima da </em>viewport. Por exemplo, se o layout necessita ao menos 500 pixels de largura, então você pode fazer uso de tal marcação. Quando a tela tem largura maior que 500 pixels, o navegador irá expandir a viewport (ao invés de somente aumentar o zoom) para que ela se encaixe adequadamente na tela:</p> + +<pre class="notranslate"><meta name="viewport" content="width=500, initial-scale=1"></pre> + +<p>O Fennec 1.1 também adicionou suporte para as propriedades <code>minimum-scale</code>, <code>maximum-scale</code>, e <code>user-scalable</code>, com valores padrão e limitis, similar aos feitos pelo <a class="external" href="http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html">Safari</a>. Estas propriedades afetam a escala inicial e largura, bem como limitam modificação no nível de aumento (zoom).</p> + +<p>Os navegadores para dispositivos móveis tratam as mudanças de orientação de forma difente um do outro. Por exemplo, o Safari Mobile, frequentemente apenas aumenta a página quando muda da orientação retrato para a orientação paisagem ao invés de modificar o layout original da página como ela deveria ser se fosse carregada inicialmente já no modo de paisagem. Caso os desenvolvedores web desejem manter consistentes as suas configurações de escala durante modificações de orientação no iPhone, eles precisam definir o valor <code>maximum-scale</code> para prevenir este aumento automático, o qual possui o efeito colateral de não permitir também a utilização do aumento (zoom) por parte do usuário:</p> + +<pre class="notranslate"><meta name="viewport" content="initial-scale=1, maximum-scale=1"></pre> + +<p>Isso não é necessário no Fennec pois, quando o dispositivo muda a orientação, o Fennec atualiza automaticamente o tamanho da viewport, o layout da página e as propriedades JavaScript/CSS, como o <code>device-width</code>, baseado nas novas dimensões para a janela.</p> + +<h2 id="Tamanhos_comuns_da_viewport_para_dispositivos_móveis_e_tablets">Tamanhos comuns da viewport para dispositivos móveis e tablets</h2> + +<p>Se o que você está querendo saber é quais dispositivos móveis e tablets têm quais larguras de viewport, existe uma lista abrangente de <a href="http://viewportsizes.com/" title="http://i-skool.co.uk/mobile-development/web-design-for-mobiles-and-tablets-viewport-sizes/">tamanhos de viewport para dispositivos móveis e tablets aqui</a>. Há informações como a largura da viewport quando o dispositivo está na orientação retratou ou paisagem bem como o tamanho físico das telas, sistema operacional e a densidade de pixels de cada dispositivo.</p> + +<h2 id="Padrões">Padrões</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('CSS3 Device', '#viewport-meta', '<meta name="viewport">')}}</td> + <td>{{Spec2('CSS3 Device')}}</td> + <td>Non-normatively describes the Viewport META element</td> + </tr> + </tbody> +</table> + +<p>Existe uma demanda de utilização clara pela tag viewport, levando em conta que ela é suportada pelos mais populares navegadores para dispositivos móveis e é utilizada por milhares de web sites. Seria bom ter um padrão oficial para a utilização das propriedades da viewport para as páginas web. De acordo com a especificação HTML5, extensões da tag <code>meta</code> devem primeiramente ser registradas em <a class="external" href="http://wiki.whatwg.org/wiki/MetaExtensions">WHATWG wiki</a> para então passar pelo processo de padronização W3C. Se isso ocorrer, então nós da Mozilla, trabalharemos para garantir que implementaremos qualquer modificação realizada durante o processo de padronização.</p> diff --git a/files/pt-br/mozilla/performance/about_colon_memory/index.html b/files/pt-br/mozilla/performance/about_colon_memory/index.html new file mode 100644 index 0000000000..072274aa40 --- /dev/null +++ b/files/pt-br/mozilla/performance/about_colon_memory/index.html @@ -0,0 +1,330 @@ +--- +title: 'about:memory' +slug: 'Mozilla/Performance/about:memory' +translation_of: 'Mozilla/Performance/about:memory' +--- +<p>"about:memory" é uma página especial do Firefox que permite você ver, salvar, carregar, e comparar medidas detalhadas do uso de memória do Firefox. Também permite que você faça outras operações relacionadas com memória, tais como: disparar GC e CC, remover registros GC & CC, e remover relatórios DMD. Está presente em todas as versões e não necessita nenhuma preparação para ser usada.</p> + +<h2 id="Como_gerar_relatórios_de_memória">Como gerar relatórios de memória</h2> + +<pre class="tw-data-text vk_txt tw-ta tw-text-small" dir="ltr" id="tw-target-text" style="text-align: left; height: 240px;"><span>Vamos supor que você quer medir o uso de memória do Firefox. Talvez você queira investigá-lo você mesmo, ou talvez alguém lhe pediu para usar about: memory para gerar relatórios " de memória" para que eles possam investigar um problema que está ocorrendo . Siga esses passos.</span></pre> + +<ul> + <li><span id="result_box" lang="pt"><span title="At the moment of interest (eg once Firefox's memory usage has gotten high) open a new tab and type "about:memory" into the address bar and hit "Enter". + ">No momento de interesse (por exemplo, uma vez que o uso de memória do Firefox ficou alto) abrir uma nova aba e digite "about:memory" na barra de endereços e aperte "Enter".<br> + </span><span title='If you are using a communication channel where files can be sent, such as Bugzilla or email, click on the "Measure and save..." button.'>Se você estiver usando um canal de comunicação onde os arquivos podem ser enviados, como o Bugzilla ou e-mail, clique em "Medir e salvar ..." botão. </span><span title="This will open a file dialog that lets you save the memory reports to a file of your choosing.">Isto irá abrir uma janela de ficheiros que lhe permite guardar os relatórios de memória para um arquivo de sua escolha. </span><span title="(The filename will have a .json.gz suffix.) You can then attach or upload the file appropriately.">(O nome do arquivo terá um sufixo .json.gz.) Você pode então anexar ou fazer o upload do arquivo de forma apropriada. </span><span title="The recipients will be able to view the contents of this file within about:memory in their own Firefox instance. + ">Os destinatários será capaz de visualizar o conteúdo deste arquivo dentro de cerca de memória: em sua própria instância Firefox.<br> + </span><span title='If you are using a communication channel where only text can be sent, such as a comment thread on a website, click on the "Measure..." button.'>Se você estiver usando um canal de comunicação em que apenas o texto pode ser enviada, como um comentário de discussão em um site, clique no botão "Medida ..." botão. </span><span title="This will cause a tree-like structure to be generated text within about:memory.">Isso fará com que uma estrutura de árvore a ser gerada texto dentro about:memory. </span><span title="This structure is just text, so you can copy and paste some or all of this text into any kind of text buffer.">Esta estrutura é apenas texto, de modo que você pode copiar e colar alguns ou todos este texto em qualquer tipo de buffer de texto. </span><span title="(You don't need to take a screenshot.) This text contains fewer measurements than a memory reports file, but is often good enough to diagnose problems. + +">(Você não precisa tirar um screenshot.) Este texto contém menos do que um arquivo de medições relatórios memória, mas muitas vezes é bom o suficiente para diagnosticar problemas.</span><br> + <br> + <span title="Note that in both cases the generated data contains privacy-sensitive details such as the full list of the web pages you have open in other tabs.">Note-se que em ambos os casos, os dados gerados contém detalhes sensíveis à privacidade, tal como a lista completa das páginas da web que você tem aberto em outras abas. </span><span title='If you do not wish to share this information, you can select the "anonymize" checkbox before clicking on "Measure and save..." or "Measure...".'>Se você não deseja compartilhar essa informação, você pode selecionar a opção "anônimos" antes de clicar em "Medir e salvar ..." ou "Medida ...". </span><span title="This will cause the privacy-sensitive data to be stripped out, but it may also make it harder for others to investigate the memory usage. +">Isto fará com que os dados sensíveis a privacidade para ser retirados, mas também pode tornar mais difícil para os outros a investigar o uso de memória.</span><br> + <span title="Loading memory reports from file + +">Carregando relatos de memória de arquivo</span><br> + <br> + <span title='The easiest way to load memory reports from file is to use the "Load..." button.'>A maneira mais fácil para carregar relatórios de memória de arquivo é usar o "Load ..." botão. </span><span title='You can also use the "Load and diff..." button to get the difference between two memory report files. + +'>Você também pode usar o botão "... Carregar e diff" para obter a diferença entre dois arquivos de relatório de memória.</span><br> + <br> + <span title="Single memory report files can also be loaded automatically when about:memory is loaded by appending a file query string, for example: + +">Arquivos de relatório de memória individuais também podem ser carregados automaticamente quando about: memory é carregado anexando uma cadeia de consulta de arquivos, por exemplo:</span></span><br> + <br> + <span class="st"><em>about:memory</em>?uri=<em>file</em>:///<em>home</em>/<em>username</em>/<em>reports</em>.<em>json</em>.<em>gz</em></span><br> + <br> + <span lang="pt"><span title="This is most useful when loading memory reports files obtained from a Firefox OS device. + +">Isso é mais útil ao carregar arquivos de memória relatórios obtidos a partir de um dispositivo Firefox OS.</span><br> + <br> + <span title="Memory reports are saved to file as gzipped JSON.">Relatórios de memória são salvos em um arquivo JSON como gzipped. </span><span title="These files can be loaded as is, but they can also be loaded after unzipping. +">Estes ficheiros podem ser carregados como seja, mas eles também podem ser carregados depois de descompactar.</span><br> + <span title="Interpreting memory reports + +">Interpretando relatórios de memória</span><br> + <br> + <span title="Almost everything you see in about:memory has an explanatory tool-tip.">Quase tudo o que você vê no about: memory tem uma dica de ferramenta explicativa. </span><span title="Hover over any button to see a description of what it does.">Passe o mouse sobre qualquer botão para ver uma descrição do que ele faz. </span><span title="Hover over any measurement to see a description of what it means. +">Passe o mouse sobre qualquer medição para ver uma descrição do que ela significa.</span><br> + <span title="Measurement basics + +">Noções básicas de medição</span><br> + <br> + <span title="Most measurements use bytes as their unit, but some are counts or percentages. + +">A maioria das medições usar bytes como unidade, mas algumas são contagens ou percentagens.</span><br> + <br> + <span title="Most measurements are presented within trees.">A maioria das medições são apresentados no prazo de árvores. </span><span title="For example: + + ">Por exemplo:<br> + <br> + </span><span title="585 (100.0%) -- preference-service + ">585 (100,0%) - preferências de serviço<br> + </span><span title="└──585 (100.0%) -- referent + ">└──585 (100,0%) - referente<br> + </span><span title="├──493 (84.27%) ── strong + ">├──493 (84,27%) ── forte<br> + </span><span title="└───92 (15.73%) -- weak + ">└───92 (15,73%) - fraco<br> + </span><span title="├──92 (15.73%) ── alive + ">├──92 (15,73%) ── vivo<br> + </span><span title="└───0 (00.00%) ── dead + +">└───0 (00,00%) ── mortos</span><br> + <br> + <span title="Leaf nodes represent actual measurements;">Nós folha representam medições reais; </span><span title="the value of each internal node is the sum of all its children. + +">o valor de cada nó interno é a soma de todos os seus filhos.</span><br> + <br> + <span title="The use of trees allows measurements to be broken down into further categories, sub-categories, sub-sub-categories, etc., to arbitrary depth, as needed.">O uso de árvores permite medições devem ser discriminados em outras categorias, sub-categorias, sub-sub-categorias, etc., a profundidade arbitrária, conforme necessário. </span><span title="All the measurements within a single tree are non-overlapping. + +">Todas as medidas dentro de uma única árvore são para não-sobreposição.</span><br> + <br> + <span title="Tree paths can be written using '/' as a separator.">Caminhos de árvore podem ser escritas usando '/' como separador. </span><span title="For example, preference/referent/weak/dead krepresents the path to the final leaf node in the example tree above. + +">Por exemplo, a preferência / referente / fracos krepresents / mortas o caminho para o nó final de folhas no exemplo acima árvore.</span><br> + <br> + <span title="Sub-trees can be collapsed or expanded by clicking on them.">Sub-árvores pode ser recolhido ou expandido, clicando sobre eles. </span><span title="If you find any particular tree overwhelming, it can be helpful to collapse all the sub-trees immediately below the root, and then gradually expand the sub-trees of interest. +">Se você encontrar qualquer árvore em particular esmagadora, ele pode ser útil para recolher todas as sub-árvores imediatamente abaixo da raiz, e então, gradualmente, expandir as sub-árvores de interesse.</span><br> + <span title="Sections + +">Seções</span><br> + <br> + <span title="Memory reports are displayed on a per-process basis, with one process per section.">Relatórios de memória são exibidos em uma base por processo, com um processo por seção. </span><span title="Within each process's measurements, there are the following subsections. +">Dentro de medições de cada processo, existem as seguintes subseções.</span><br> + <span title="Explicit Allocations + +">As alocações explícitas</span><br> + <br> + <span title='This section contains a single tree, called "explicit", that measures all the memory allocated via explicit calls to heap allocation functions (such as malloc and new) and to non-heap allocations functions (such as mmap and VirtualAlloc). + +'>Esta seção contém uma única árvore, chamado de "explícita", que mede toda a memória alocada via chamadas explícitas para amontoar funções de alocação (como malloc e nova) e às funções alocações não-heap (como mmap e VirtualAlloc).</span><br> + <br> + <span title="Here is an example for a browser session where tabs were open to cnn.com, techcrunch.com, and arstechnica.com.">Aqui está um exemplo de uma sessão do navegador, onde abas estavam abertas para cnn.com, techcrunch.com, e arstechnica.com. </span><span title="Various sub-trees have been expanded and others collapsed for the sake of presentation. + +">Vários sub-árvores foram ampliados e outros desmoronou por causa da apresentação.</span><br> + <br> + <span title="191.89 MB (100.0%) -- explicit +">191,89 MB (100,0%) - explícitas</span><br> + <span title="├───63.15 MB (32.91%) -- window-objects +">├───63.15 MB (32,91%) - window-objetos</span><br> + <span title="│ ├──24.57 MB (12.80%) -- top(http://edition.cnn.com/, id=8) +">│ ├──24.57 MB (12,80%) - superior (http://edition.cnn.com/, id = 8)</span><br> + <span title="│ │ ├──20.18 MB (10.52%) -- active +">│ │ ├──20.18 MB (10,52%) - ativa</span><br> + <span title="│ │ │ ├──10.57 MB (05.51%) -- window(http://edition.cnn.com/) +">│ │ │ ├──10.57 MB (05.51%) - janela (http://edition.cnn.com/)</span><br> + <span title="│ │ │ │ ├───4.55 MB (02.37%) ++ js-compartment(http://edition.cnn.com/) +">│ │ │ │ ├───4.55 MB (02.37%) ++ js-compartimento (http://edition.cnn.com/)</span><br> + <span title="│ │ │ │ ├───2.60 MB (01.36%) ++ layout +">│ │ │ │ ├───2.60 MB (01.36%) ++ disposição</span><br> + <span title="│ │ │ │ ├───1.94 MB (01.01%) ── style-sheets +">│ │ │ │ ├───1.94 MB (01.01%) ──-folhas de estilo</span><br> + <span title="│ │ │ │ └───1.48 MB (00.77%) -- (2 tiny) +">│ │ │ │ └───1.48 MB (00.77%) - (2 minúsculo)</span><br> + <span title="│ │ │ │ ├──1.43 MB (00.75%) ++ dom +">│ │ │ │ ├──1.43 MB (00.75%) ++ dom</span><br> + <span title="│ │ │ │ └──0.05 MB (00.02%) ── property-tables +">│ │ │ │ └──0.05 MB (00.02%) ── propriedade mesas-</span><br> + <span title="│ │ │ └───9.61 MB (05.01%) ++ (18 tiny) +">│ │ │ └───9.61 MB (05.01%) ++ (18 minúsculo)</span><br> + <span title="│ │ └───4.39 MB (02.29%) -- js-zone(0x7f69425b5800) +">│ │ └───4.39 MB (02.29%) - js-zone (0x7f69425b5800)</span><br> + <span title="│ ├──15.75 MB (08.21%) ++ top(http://techcrunch.com/, id=20) +">│ ├──15.75 MB (08.21%) ++ superior (http://techcrunch.com/, id = 20)</span><br> + <span title="│ ├──12.85 MB (06.69%) ++ top(http://arstechnica.com/, id=14) +">│ ├──12.85 MB (06.69%) ++ superior (http://arstechnica.com/, id = 14)</span><br> + <span title="│ ├───6.40 MB (03.33%) ++ top(chrome://browser/content/browser.xul, id=3) +">│ ├───6.40 MB (03.33%) ++ superior (chrome: //browser/content/browser.xul, id = 3)</span><br> + <span title="│ └───3.59 MB (01.87%) ++ (4 tiny) +">│ └───3.59 MB (01.87%) ++ (4 minúsculo)</span><br> + <span title="├───45.74 MB (23.84%) ++ js-non-window +">├───45.74 MB (23,84%) ++ js-não-janela</span><br> + <span title="├───33.73 MB (17.58%) ── heap-unclassified +">├───33.73 MB (17,58%) ── heap-categorias</span><br> + <span title="├───22.51 MB (11.73%) ++ heap-overhead +">├───22.51 MB (11,73%) ++ heap-sobrecarga</span><br> + <span title="├────6.62 MB (03.45%) ++ images +">├────6.62 MB (03.45%) ++ imagens</span><br> + <span title="├────5.82 MB (03.03%) ++ workers/workers(chrome) +">├────5.82 MB (03.03%) ++ trabalhadores / trabalhadores (cromo)</span><br> + <span title="├────5.36 MB (02.80%) ++ (16 tiny) +">├────5.36 MB (02.80%) ++ (16 minúsculo)</span><br> + <span title="├────4.07 MB (02.12%) ++ storage +">├────4.07 MB (02.12%) ++ armazenamento</span><br> + <span title="├────2.74 MB (01.43%) ++ startup-cache +">├────2.74 MB (01.43%) ++ startup-cache</span><br> + <span title="└────2.16 MB (01.12%) ++ xpconnect + +">└────2.16 MB (01.12%) ++ xpconnect</span><br> + <br> + <span title="Some expertise is required to understand the full details here, but there are various things worth pointing out. + + ">Alguns perícia é necessária para entender os detalhes aqui, mas existem várias coisas vale a pena apontar.<br> + <br> + </span><span title='This "explicit" value at the root of the tree represents all the memory allocated via explicit calls to allocation functions. + '>Este valor "explícito" na raiz da árvore representa toda a memória alocada via chamadas explícitas para funções de alocação.<br> + </span><span title='The "window-objects" sub-tree represents all JavaScript window objects, which includes the browser tabs and UI windows.'>A "janela-objetos" sub-árvore representa todos os objetos da janela JavaScript, o que inclui as abas do navegador e janelas de interface do usuário. </span><span title='For example, the "top(http://edition.cnn.com/, id=8)" sub-tree represents the tab open to cnn.com, and "top(chrome://browser/content/browser.xul'>Por exemplo, o "top (http://edition.cnn.com/, id = 8)" sub-árvore representa a aba aberta para cnn.com, e "top (chrome: //browser/content/browser.xul </span><span title=', id=3)" represents the main browser UI window. + '>, id = 3) "representa a janela principal do navegador UI.<br> + </span><span title="Within each window's measurements are sub-trees for JavaScript ("js-compartment(...)" and "js-zone(...)"), layout, style-sheets, the DOM, and other things. + ">Dentro de medições de cada janela são sub-árvores para JavaScript ("js-compartimento (...)" e "js-zona (...)"), layout, folhas de estilo, o DOM, e outras coisas.<br> + </span><span title="It's clear that the cnn.com tab is using more memory than the techcrunch.com tab, which is using more than the arstechnica.com tab. + ">É claro que o guia cnn.com está usando mais memória do que a guia techcrunch.com, que está usando mais do que o guia arstechnica.com.<br> + </span><span title='Sub-trees with names like "(2 tiny)" are artificial nodes inserted to allow insignificant sub-trees to be collapsed by default.'>Sub-árvores com nomes como "(2 minúsculo)" são nós artificiais inseridos para permitir sub-árvores insignificantes para serem recolhidos por padrão. </span><span title='If you select the "verbose" checkbox before measuring, all trees will be shown fully expanded and no artificial nodes will be inserted. + '>Se você selecionar a opção "verbose" antes de medir, todas as árvores serão mostrados completamente expandida e nenhum nó artificiais será inserido.<br> + </span><span title="The "js-non-window" sub-tree represents JavaScript memory usage that doesn't come from windows, but from the browser core. + ">O sub-árvore "js-não-janela" representa o uso de memória JavaScript que não vem das janelas, mas a partir do núcleo do navegador.<br> + </span><span title='The "heap-unclassified" value represents heap-allocated memory that is not measured by any memory reporter.'>O valor "heap-categorias" representa memória alocada-pilha que não é medido por qualquer repórter memória. </span><span title='This is typically 10--20% of "explicit".'>Este é tipicamente de 10--20% "explícito". </span><span title="If it gets higher, it indicates that additional memory reporters should be added.">Se ele fica mais alto, isso indica que deve ser adicionado a jornalistas de memória adicionais. </span><span title="DMD can be used to determine where these memory reporters should be added. + ">DMD podem ser usadas para determinar onde deve ser adicionado estes repórteres de memória.<br> + </span><span title="There are measurements for other content such as images and workers, and for browser subsystems such as the startup cache and XPConnect. + +">Há medições para outros conteúdos, tais como imagens e trabalhadores, e para subsistemas do navegador, como o cache de inicialização e XPConnect.</span><br> + <br> + <span title="Some add-on memory usage is identified, as the following example shows. + +">Alguns add-on uso de memória é identificado, como mostra o seguinte exemplo.</span><br> + <br> + <span title="├───40,214,384 B (04.17%) -- add-ons +">├───40,214,384 B (04.17%) - add-ons</span><br> + <span title="│ ├──21,184,320 B (02.20%) ++ {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}/js-non-window/zones/zone(0x100496800)/compartment([System Principal], jar:file:///Users/njn/Library/Application%20Support/Firefox/Profiles/puna0zr8.new/extensions/%7Bd10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d%7D.xpi!/bootstrap.js">│ ├──21,184,320 B (02.20%) ++ {d10d0bf8-f5b5 c8b4-a8b2-2b9879e08c5d} / js-não-janela / zonas / zone (0x100496800) / compartimento ([principal Sistema], jar:file:///Users/njn/Library/Application%20Support/Firefox/Profiles/puna0zr8.new/extensions/%7Bd10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d%7D.xpi!/bootstrap.js </span><span title="(from: resource://gre/modules/addons/XPIProvider.jsm:4307)) +">(A partir de: recurso: //gre/modules/addons/XPIProvider.jsm: 4307))</span><br> + <span title="│ ├──11,583,312 B (01.20%) ++ jid1-xUfzOsOFlzSOXg@jetpack/js-non-window/zones/zone(0x100496800) +">│ ├──11,583,312 B (01.20%) ++ jid1-xUfzOsOFlzSOXg @ jetpack / js-não-janela / zonas / zone (0x100496800)</span><br> + <span title="│ ├───5,574,608 B (00.58%) -- {59c81df5-4b7a-477b-912d-4e0fdf64e5f2} +">│ ├───5,574,608 B (00.58%) - {59c81df5-4b7a-477b-912D-4e0fdf64e5f2}</span><br> + <span title="│ │ ├──5,529,280 B (00.57%) -- window-objects +">│ │ ├──5,529,280 B (00.57%) - window-objetos</span><br> + <span title="│ │ │ ├──4,175,584 B (00.43%) ++ top(chrome://chatzilla/content/chatzilla.xul, id=4293) +">│ │ │ ├──4,175,584 B (00.43%) ++ superior (chrome: //chatzilla/content/chatzilla.xul, id = 4293)</span><br> + <span title="│ │ │ └──1,353,696 B (00.14%) ++ top(chrome://chatzilla/content/output-window.html, id=4298) +">│ │ │ └──1,353,696 B (00.14%) ++ superior (chrome: //chatzilla/content/output-window.html, id = 4298)</span><br> + <span title="│ │ └─────45,328 B (00.00%) ++ js-non-window/zones/zone(0x100496800)/compartment([System Principal], file:///Users/njn/Library/Application%20Support/Firefox/Profiles/puna0zr8.new/extensions/%7B59c81df5-4b7a-477b-912d-4e0fdf64e5f2%7D/components/chatzilla-service.js) +">│ │ └─────45,328 B (00,00%) ++ js-não-janela / zonas / zone (0x100496800) / compartimento ([principal Sistema], file:///Users/njn/Library/Application%20Support/Firefox/Profiles/puna0zr8.new/extensions/%7B59c81df5-4b7a-477b-912d-4e0fdf64e5f2%7D/components/chatzilla-service.js)</span><br> + <span title="│ └───1,872,144 B (00.19%) ++ treestyletab@piro.sakura.ne.jp/js-non-window/zones/zone(0x100496800) + +">│ └───1,872,144 B (00.19%) ++ treestyletab@piro.sakura.ne.jp/js-non-window/zones/zone (0x100496800)</span><br> + <br> + <span title="More things worth pointing out are as follows. + + ">Mais coisas vale a pena ressaltar é como segue.<br> + <br> + </span><span title="Some add-ons are identified by a name, such as Tree Style Tab.">Alguns complementos são identificados por um nome, como Tree Style Tab. </span><span title="Others are identified only by a hexadecimal identifier.">Outros são identificados apenas por um identificador hexadecimal. </span><span title="You can look in about:support to see which add-on a particular identifier belongs to.">Você pode olhar em cerca de: apoio para ver qual add-on de um identificador específico pertence. </span><span title="For example, 59c81df5-4b7a-477b-912d-4e0fdf64e5f2 is Chatzilla. + ">Por exemplo, 59c81df5-4b7a-477b-912D-4e0fdf64e5f2 é Chatzilla.<br> + </span><span title="All JavaScript memory usage for an add-on is measured separately and shown in this sub-tree. + ">Tudo uso de memória JavaScript para um add-on é medido separadamente e mostrado neste sub-árvore.<br> + </span><span title="For add-ons that use separate windows, such as Chatzilla, the memory usage of those windows will show up in this sub-tree. + ">Para add-ons que usar janelas separadas, como Chatzilla, o uso de memória daquelas janelas vai aparecer nesta sub-árvore.<br> + </span><span title="For add-ons that use XUL overlays, such as AdBlock Plus, the memory usage of those overlays will not show up in this sub-tree;">Para add-ons que usar sobreposições XUL, como Adblock Plus, o uso de memória dessas sobreposições não vai aparecer nesta sub-árvore; </span><span title="it will instead be in the non-add-on sub-trees and won't be identifiable as being caused by the add-on. + +">em vez disso ele vai estar no não-add-on sub-árvores e não serão identificáveis como sendo causado pelo add-on.</span><br> + <br> + <span title="Other Measurements + +">Outras Medidas</span><br> + <br> + <span title='This section contains multiple trees, includes many that cross-cut the measurements in the "explicit" tree.'>Esta seção contém várias árvores, inclui muitos que cross-cortar as medições na árvore "explícito". </span><span title='For example, in the "explicit" tree all DOM and layout measurements are broken down by window by window, but in "Other Measurements" those measurements are aggregated into totals for the whole browser, as the following example shows. + +'>Por exemplo, na árvore "explícito" todas as medições DOM e layout são discriminadas por janela pela janela, mas em "outras medidas" essas medidas são agregadas em totais para todo o navegador, como mostra o seguinte exemplo.</span><br> + <br> + <span title="26.77 MB (100.0%) -- window-objects +">26,77 MB (100,0%) - window-objetos</span><br> + <span title="├──14.59 MB (54.52%) -- layout +">├──14.59 MB (54,52%) - de layout</span><br> + <span title="│ ├───6.22 MB (23.24%) ── style-sets +">│ ├───6.22 MB (23,24%) ── conjuntos de estilo</span><br> + <span title="│ ├───4.00 MB (14.95%) ── pres-shell +">│ ├───4.00 MB (14,95%) ── pres-shell</span><br> + <span title="│ ├───1.79 MB (06.68%) ── frames +">│ ├───1.79 MB (06.68%) ── quadros</span><br> + <span title="│ ├───0.89 MB (03.33%) ── style-contexts +">│ ├───0.89 MB (03.33%) ──-contextos estilo</span><br> + <span title="│ ├───0.62 MB (02.33%) ── rule-nodes +">│ ├───0.62 MB (02.33%) ──-nodes de regras</span><br> + <span title="│ ├───0.56 MB (02.10%) ── pres-contexts +">│ ├───0.56 MB (02.10%) ── pres-contextos</span><br> + <span title="│ ├───0.47 MB (01.75%) ── line-boxes +">│ ├───0.47 MB (01.75%) ── caixas de linha</span><br> + <span title="│ └───0.04 MB (00.14%) ── text-runs +">│ └───0.04 MB (00.14%) ── texto-runs</span><br> + <span title="├───6.53 MB (24.39%) ── style-sheets +">├───6.53 MB (24,39%) ──-folhas de estilo</span><br> + <span title="├───5.59 MB (20.89%) -- dom +">├───5.59 MB (20,89%) - dom</span><br> + <span title="│ ├──3.39 MB (12.66%) ── element-nodes +">│ ├──3.39 MB (12,66%) ── elemento-nodes</span><br> + <span title="│ ├──1.56 MB (05.84%) ── text-nodes +">│ ├──1.56 MB (05.84%) ──-nós de texto</span><br> + <span title="│ ├──0.54 MB (02.03%) ── other +">│ ├──0.54 MB (02.03%) ── outro</span><br> + <span title="│ └──0.10 MB (00.36%) ++ (4 tiny) +">│ └──0.10 MB (00.36%) ++ (4 minúsculo)</span><br> + <span title="└───0.06 MB (00.21%) ── property-tables + +">└───0.06 MB (00.21%) ── propriedade mesas-</span><br> + <br> + <span title='Some of the trees in this section measure things that do not cross-cut the measurements in the "explicit" tree, such as those in the "preference-service" example above. + +'>Algumas das árvores nesta seção medida coisas que não cross-cortar as medições na árvore "explícito", tais como os da "preferência para os serviços" exemplo acima.</span><br> + <br> + <span title="Finally, at the end of this section are individual measurements, as the following example shows. + + ">Finalmente, no final desta secção são medições individuais, como mostra o seguinte exemplo.<br> + <br> + </span><span title="0.00 MB ── canvas-2d-pixels + ">0.00 MB ── canvas-2d-pixels<br> + </span><span title="5.38 MB ── gfx-surface-xlib + ">5.38 MB ── gfx-superfície-xlib<br> + </span><span title="0.00 MB ── gfx-textures + ">0.00 MB ── GFX-texturas<br> + </span><span title="0.00 MB ── gfx-tiles-waste + ">0.00 MB ── GFX-telhas-resíduos<br> + </span><span title="0 ── ghost-windows + ">0 ── fantasmas janelas<br> + </span><span title="109.22 MB ── heap-allocated + ">109,22 MB ── alocado-heap<br> + </span><span title="164 ── heap-chunks + ">164 ── heap-pedaços<br> + </span><span title="1.00 MB ── heap-chunksize + ">1.00 MB ── heap-chunksize<br> + </span><span title="114.51 MB ── heap-committed + ">114.51 MB ── cometido-heap<br> + </span><span title="164.00 MB ── heap-mapped + ">164.00 MB ── mapeado-heap<br> + </span><span title="4.84% ── heap-overhead-ratio + ">4,84% ── heap-sobrecarga-ratio<br> + </span><span title="1 ── host-object-urls + ">1 ── hospedeiras-objeto-urls<br> + </span><span title="0.00 MB ── imagelib-surface-cache + ">0.00 MB ── imagelib-superfície-cache<br> + </span><span title="5.27 MB ── js-main-runtime-temporary-peak + ">-Pico js-main-runtime-temporária 5,27 MB ──<br> + </span><span title="0 ── page-faults-hard + ">0 ── página falhas-rígidos<br> + </span><span title="203,349 ── page-faults-soft + ">203.349 ──-falhas de página-soft<br> + </span><span title="274.99 MB ── resident + ">274,99 MB ── residente<br> + </span><span title="251.47 MB ── resident-unique +">251,47 MB ── residente Exclusivos</span><br> + <span title="1,103.64 MB ── vsize + +">1,103.64 MB ── vsize</span><br> + <br> + <span title="Some measurements of note are as follows. + + ">Algumas medidas de nota são as seguintes.<br> + <br> + </span><span title='"resident".'>"Residente". </span><span title="Physical memory usage.">Uso de memória física. </span><span title="If you want a single measurement to summarize memory usage, this is probably the best one. + ">Se você quiser uma única medida para resumir o uso de memória, esta é provavelmente a melhor.<br> + </span><span title='"vsize".'>"Vsize". </span><span title="Virtual memory usage.">Uso de memória virtual. </span><span title="This is often much higher than any other measurement (particularly on Mac).">Este é frequentemente muito mais elevada do que qualquer outra medida (particularmente no Mac). </span><span title="It only really matters on 32-bit platforms such as Win32.">Isso só realmente importa em plataformas de 32 bits, como o Win32. </span><span title='There is also "vsize-max-contiguous" (not measured on all platforms, and not shown in this example), which indicates the largest single chunk of available virtual address space.'>Há também "vsize-max contígua" (não medido em todas as plataformas, e não é mostrado neste exemplo), o que indica o maior pedaço único de disponível espaço de endereço virtual. </span><span title="If this number is low, it's likely that memory allocations will fail due to lack of virtual address space quite soon. + ">Se esse número é baixo, é provável que as alocações de memória irá falhar devido à falta de espaço de endereço virtual muito em breve.<br> + </span><span title='Various graphics-related measurements ("gfx-*").'>Medições relacionados com gráficos diferentes ("gfx- *"). </span><span title="The measurements taken vary between platforms.">As medidas tomadas variam entre plataformas. </span><span title="Graphics is often a source of high memory usage, and so these measurements can be helpful for detecting such cases. + +">Graphics é frequentemente uma fonte de alto uso da memória, e assim por estas medidas pode ser útil para detectar tais casos.</span><br> + <br> + <span title="System + +">Sistema</span><br> + <br> + <span title="This section is show only on Firefox OS.">Esta seção é mostrar apenas no Firefox OS. </span><span title="It contains whole-device measurements obtained from the operating system.">Ele contém as medições do dispositivo inteiro obtido a partir do sistema operativo. </span><span title="Among other things, this section is useful for understanding exactly how the whole device's memory is being used.">Entre outras coisas, esta seção é útil para entender exatamente como a memória de todo o dispositivo está sendo usado.</span></span></li> +</ul> diff --git a/files/pt-br/mozilla/performance/index.html b/files/pt-br/mozilla/performance/index.html new file mode 100644 index 0000000000..0a73bc0aa8 --- /dev/null +++ b/files/pt-br/mozilla/performance/index.html @@ -0,0 +1,96 @@ +--- +title: Performance +slug: Mozilla/Performance +tags: + - NeedsTranslation + - Performance + - TopicStub +translation_of: Mozilla/Performance +--- +<p>Os links dos artigos aqui o ajudarão a melhorar a performance, se você estiver desenvolvendo um código de núcleo da Mozilla ou uma extensão.</p> + +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h3 id="Documentação">Documentação</h3> + + <dl> + <dt><a href="/en/Performance/Reporting_a_Performance_Problem" title="en/Performance/Reporting_a_Performance_Problem">Reportiando um problema de performance</a></dt> + <dd>Um amigável guia do usuário para reportar um problema de performance. Um ambiente de desenvolvimento não é necessário.</dd> + <dt><a href="/en/Extensions/Performance_best_practices_in_extensions" title="en/Extensions/Performance best practices in extensions">Melhores práticas de performance em extensões</a> </dt> + <dd>Um guia de "melhores práticas" para desenvolvedores de extensões.</dd> + <dt><a href="/en/Performance/Measuring_add-on_startup_performance" title="en/Measuring Add-on Startup Performance">Medição da performance de inicialização da extensão</a></dt> + <dd>Um guia para desenvolvedores de extensões de como configurar um ambiente de teste de performance.</dd> + <dt><a href="/en/XUL_School/Appendix_A:_Add-on_Performance" title="en/XUL School/Appendix A: Add-on Performance">Escola XUL: Performance em Extensões</a></dt> + <dd>Dicas para desenvolvedores de extensões para ajudá-los a evitar prejudicar a performance do aplicativo.</dd> + <dt><a href="/en/Performance/GPU_performance" title="en/GPU performance">Performance do GPU</a></dt> + <dd>Dicas de criação de perfil e melhorias de performance com o uso de uma GPU.</dd> + </dl> + + <p><span class="alllinks"><a class="internal" href="/Special:Tags?tag=Performance" title="Special:Tags?tag=Performance">Veja todas as páginas com a marca "Performance"...</a></span></p> + + <h3 id="Ferramentas_de_criação_de_perfil_e_detecção_de_perdas_de_memória">Ferramentas de criação de perfil e detecção de perdas de memória</h3> + + <dl> + <dt><a href="/en-US/docs/Mozilla/Performance/about:memory">about:memory</a></dt> + <dd>about:memory é a ferramenta mais fácil para medir o uso em código Mozilla, e o melhor lugar para começar. Também deixa você fazer outras operações relacionadas à memória como chamar GC e CC, esvaziar os logs de GC e CC, e esvaziar os relatórios de DMD. about:memory é feito no topo da infraestrutura de relatório de memória do Firefox.</dd> + <dt><a href="/en-US/docs/Mozilla/Performance/DMD">DMD</a></dt> + <dd>DMD é uma ferramenta que identifica deficiências nas medidas do about:memory, e também pode fazer múltiplos tipos de criação de perfis de pilha.</dd> + <dt><a href="https://areweslimyet.com/">areweslimyet.com</a></dt> + <dd>areweslimyet.com (a.k.a. AWSY) is a memory usage and regression tracker.</dd> + <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Performance/BloatView">BloatView</a></dt> + <dd>BloatView prints per-class statistics on allocations and refcounts, and provides gross numbers on the amount of memory being leaked broken down by class. It is used as part of Mozilla's continuous integration testing.</dd> + <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Refcount_tracing_and_balancing">Refcount tracing and balancing</a></dt> + <dd>Refcount tracing and balancing are ways to track down leaks caused by incorrect uses of reference counting. They are slow and not particular easy to use, and thus most suitable for use by expert developers.</dd> + <dt><a href="/en-US/docs/Mozilla/Performance/GC_and_CC_logs">GC and CC logs</a></dt> + <dd>GC and CC logs can be generated and analyzed to in various ways. In particular, they can help you understand why a particular object is being kept alive.</dd> + <dt><a href="/en-US/docs/Mozilla/Testing/Valgrind">Valgrind</a></dt> + <dd><a class="external text" href="http://valgrind.org/" rel="nofollow">Valgrind</a> is a tool that detects various memory-related problems at runtime, including leaks. Valgrind is used as <a class="external text" href="/en-US/docs/Valgrind_test_job" rel="nofollow">part</a> of Mozilla's continuous integration testing, though the coverage is limited because Valgrind is slow.</dd> + <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Testing/Firefox_and_Address_Sanitizer#LeakSanitizer">LeakSanitizer</a></dt> + <dd><span class="external text">LeakSanitizer</span> (a.k.a. LSAN) is similar to Valgrind, but it runs faster because it uses static source code instrumentation. LSAN is part of Mozilla's continuous integration testing, with most tests running through it as part of the AddressSanitizer (a.k.a. ASAN) test jobs.</dd> + <dt><a href="http://developer.apple.com/documentation/Performance/Conceptual/ManagingMemory/Articles/FindingLeaks.html">Apple tools</a></dt> + <dd>Apple provides <span class="external text">some tools</span> for Mac OS X that report similar problems to those reported by LSAN and Valgrind. The "leaks" tool is not recommended for use with SpiderMonkey or Firefox, because it gets confused by tagged pointers and thinks objects have leaked when they have not (see <a class="external text" href="https://bugzilla.mozilla.org/show_bug.cgi?id=390944" rel="nofollow">bug 390944</a>).</dd> + <dt><a href="/en-US/docs/Mozilla/Performance/Leak_Gauge">Leak Gauge</a></dt> + <dd>Leak Gauge is a tool that can be used to detect certain kinds of leaks in Gecko, including those involving documents, window objects, and docshells.</dd> + <dt><a href="http://dxr.mozilla.org/mozilla-central/source/memory/replace/logalloc/README">LogAlloc</a></dt> + <dd>LogAlloc is a tool that dumps a log of memory allocations in Gecko. That log can then be replayed against Firefox's default memory allocator independently or through another replace-malloc library, allowing the testing of other allocators under the exact same workload.</dd> + </dl> + + <p>See also the documentation on <a href="/en-US/docs/Mozilla/Performance/Leak-hunting_strategies_and_tips">Leak-hunting strategies and tips.</a></p> + </td> + <td> + <h3 id="Profiling_and_performance_tools">Profiling and performance tools</h3> + + <dl> + <dt><a href="/en/Performance/Profiling_with_the_Built-in_Profiler" title="en/Performance/Profiling with the Built-in Profiler">Profiling with the Built-in Profiler</a> {{ gecko_minversion_inline("16.0") }}</dt> + <dd>The built-in profiler is a good tool to start with.</dd> + <dt><a href="/en/Performance/Profiling_with_Instruments" title="en/Performance/Profiling with Instruments">Profiling with Instruments</a></dt> + <dd>How to use Apple's Instruments tool to profile Mozilla code.</dd> + <dt><a href="/en/Performance/Profiling_with_Xperf" title="en/Performance/Profiling with Xperf">Profiling with Xperf</a></dt> + <dd>How to use Microsoft's Xperf tool to profile Mozilla code.</dd> + <dt><a href="/en/Performance/Profiling_with_Zoom" title="en/Performance/Profiling with Zoom">Profiling with Zoom</a></dt> + <dd>Zoom is a profiler for Linux done by the people who made Shark</dd> + <dt><a href="/en/Performance/Measuring_performance_using_the_PerfMeasurement.jsm_code_module" title="en/Performance/Measuring performance using the PerfMeasurement.jsm code module">Measuring performance using the PerfMeasurement.jsm code module</a> {{ gecko_minversion_inline("2.0") }}</dt> + <dd>Using <a href="/en/JavaScript_code_modules/PerfMeasurement.jsm" title="en/JavaScript code modules/PerfMeasurement.jsm"><code>PerfMeasurement.jsm</code></a> to measure performance data in your JavaScript code.</dd> + <dt><a href="/en-US/docs/Performance/Adding_a_new_Telemetry_probe" title="https://developer.mozilla.org/en-US/docs/Performance/Adding_a_new_Telemetry_probe">Adding a new Telemetry probe</a></dt> + <dd>Information on how to add a new measurement to the Telemetry performance-reporting system</dd> + <dt><a href="/en/Performance/Profiling_JavaScript_with_Shark" title="en/Performance/Profiling JavaScript with Shark">Profiling JavaScript with Shark</a> {{ gecko_minversion_inline("1.9") }}</dt> + <dd>How to use the Mac OS X Shark profiler to profile JavaScript code in Firefox 3.5 or later.</dd> + <dt><a href="/en/Performance/Profiling_with_Shark" title="en/Performance/Profiling with Shark">Profiling with Shark</a></dt> + <dd>How to use Apple's Shark tool to profile Mozilla code.</dd> + <dt><a href="/en-US/docs/Mozilla/Performance/Investigating_CSS_Performance">Investigating CSS Performance</a></dt> + <dd>How to figure out why restyle is taking so long</dd> + </dl> + + <h3 id="Related_Topics">Related Topics</h3> + + <dl> + <dd><a href="/en/JavaScript" title="en/JavaScript">JavaScript</a>, <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a>, <a href="/En/Developer_Guide" title="en/Developing_Mozilla">Developing Mozilla</a>, <a href="/en/Extensions" title="en/Extensions">Extensions</a>, <a href="/en/Addons" title="en/Addons">Addons</a></dd> + </dl> + </td> + </tr> + </tbody> +</table> + +<p> </p> diff --git a/files/pt-br/mozilla/persona/.well-known-browserid/index.html b/files/pt-br/mozilla/persona/.well-known-browserid/index.html new file mode 100644 index 0000000000..9cbda7ae2b --- /dev/null +++ b/files/pt-br/mozilla/persona/.well-known-browserid/index.html @@ -0,0 +1,61 @@ +--- +title: .well-known-browserid +slug: Mozilla/Persona/.well-known-browserid +translation_of: Archive/Mozilla/Persona/.well-known-browserid +--- +<p><span id="result_box" lang="pt"><span class="hps">Domínios</span> <span class="hps">anunciam sua</span> <span class="hps">capacidade de atuar como</span> <span class="hps">Provedores</span> <span class="hps atn">de Identidade </span><span class="hps">Persona </span></span><span lang="pt"><span class="hps atn">(</span><span>IDPs)</span> <span class="hps">através da publicação de</span> <span class="hps">um documento de</span> <span class="hps">apoio em</span> <code><span class="hps">/.well-known/browserid</span></code><span>.</span> <span class="hps">Este documento</span> <span class="hps">formatado em</span> <span class="hps">JSON</span> <span class="hps">deve</span> <span class="hps">ser servido</span> <span class="hps">por HTTPS</span> <span class="hps">com</span> <span class="hps">o tipo de conteúdo</span> </span><code>application/json</code><span lang="pt"><span>.</span></span></p> + +<p><span id="result_box" lang="pt"><span class="hps">Este documento pode</span> <span class="hps">especificar</span> <span class="hps">a forma de</span> <span class="hps">prestação</span> <span class="hps">e</span> <span class="hps">autenticar usuários</span><span>,</span> <span class="hps">ou</span> <span class="hps">pode delegar</span> <span class="hps">sua autoridade</span> <span class="hps">para outro</span> <span class="hps">provedor de identidade</span><span>.</span></span></p> + +<p><span id="result_box" lang="pt"><span class="hps"><strong>Nota</strong>:</span> <span class="hps">você também deve</span> <span class="hps">consultar o </span></span><span lang="pt"><span class="hps">EspecificaçProtocolo</span> <span class="hps">BrowserID</span><span class="hps"> </span> <span class="hps">como</span> <span class="hps">a referência técnica</span> <span class="hps">autorizada.</span></span></p> + +<h2 id="Supórte_Basico">Supórte Basico</h2> + +<p><span id="result_box" lang="pt"><span class="hps">Um domínio</span> <span class="hps">que atua diretamente</span> <span class="hps">um</span> <span class="hps">um IDP</span> <span class="hps">deve fornecer</span> <span class="hps">três valores</span> <span class="hps">em</span> <span class="hps">seu documento de</span> <span class="hps">apoio</span><span>:</span></span></p> + +<ul> + <li><span id="result_box" lang="pt"><code><span class="hps">chave pública</span></code><span>:</span> <span class="hps">A</span> <span class="hps">parte pública da</span> <span class="hps">chave criptográfica</span> <span class="hps">do domínio.</span></span></li> + <li><span id="result_box" lang="pt"><code><span class="hps">autenticação</span></code><span>:</span> A <span class="hps">página</span> <span class="hps">do</span> <span class="hps">domínio para</span> <span class="hps">pedir aos usuários</span> <span class="hps">fazer login.</span></span></li> + <li><span id="result_box" lang="pt"><code><span class="hps">provisionamento</span></code><span>:</span> A <span class="hps">página</span> <span class="hps">do</span> <span class="hps">domínio</span> <span class="hps alt-edited">para certificar</span> <span class="hps alt-edited">as identidades</span> <span class="hps">de seus usuários</span><span>.</span></span></li> +</ul> + +<p id="Example_.2F.well-known.2Fbrowserid_file.3A"><strong><span class="short_text" id="result_box" lang="pt"><span class="hps">Arquivo</span><span class="hps"> exemplo</span> <span class="hps">/.well-known/browserid</span><span>:</span></span></strong></p> + +<pre class="brush:js;">{ + "public-key": { + "algorithm": "RS", + "n": "82818905405105134410187227495885391609221288015566078542117409373192106382993306537273677557482085204736975067567111831005921322991127165013340443563713385983456311886801211241492470711576322130577278575529202840052753612576061450560588102139907846854501252327551303482213505265853706269864950437458242988327", + "e": "65537" + }, + "authentication": "/browserid/sign_in.html", + "provisioning": "/browserid/provision.html" +}</pre> + +<h2 id="Delegated_Support">Delegated Support</h2> + +<p>HTTP redirects and other means of "moving" a /.well-known/browserid file are not permitted. If an IdP would like to delegate to another domain for authentication and provisioning, it may publish a support document which only contains an <code>authority</code> entry.</p> + +<p id="Example_.2F.well-known.2Fbrowserid.3A"><strong>Example /.well-known/browserid:</strong></p> + +<pre class="brush:js;">{ + "authority": "subdomain.example.com" +} +</pre> + +<p>Then <code>subdomain.example.com</code> would host its own support document, as per the example above.</p> + +<p>The <code>authority</code> field is specified as a hostname plus, optionally, a port. It may not contain a path. So <code>"example.com</code>", "<code>subdomain.example.com"</code>, and "<code>subdomain.example.com:8080</code>" are all valid, but "<code>subdomain.example.com/login</code>" is not.</p> + +<p>A domain may delegate to any other domain, so long as the other domain publishes a <code>/.well-known/browserid</code> document.</p> + +<h2 id="Checklist">Checklist</h2> + +<ul> + <li>The document is formatted as valid JSON</li> + <li>The document is served over SSL</li> + <li>The document is served with a content type of "<code>application/json</code>"</li> + <li>The document is hosted on the domain exactly matching that in the email addresses assigned to users. For example: <code>example.com</code>, not <code>www.example.com</code>.</li> + <li>If delegating to another Identity Provider, the <code>authority</code> value is specified only as a hostname and, optionally, a port.</li> +</ul> + +<p>Many of these can be tested automatically with the <a class="link-https" href="https://github.com/mozilla/browserid/blob/dev/scripts/check_primary_support" title="https://github.com/mozilla/browserid/blob/dev/scripts/check_primary_support">check_primary_support script from the Persona</a> codebase<strong>.</strong></p> diff --git a/files/pt-br/mozilla/persona/browser_compatibility/index.html b/files/pt-br/mozilla/persona/browser_compatibility/index.html new file mode 100644 index 0000000000..9b5f292371 --- /dev/null +++ b/files/pt-br/mozilla/persona/browser_compatibility/index.html @@ -0,0 +1,73 @@ +--- +title: Browser compatibility +slug: Mozilla/Persona/Browser_compatibility +translation_of: Archive/Mozilla/Persona/Browser_compatibility +--- +<h2 id="Supported_Browsers">Supported Browsers</h2> +<p>Persona is developed, tested, and supported with the following browsers. Thanks to Persona's cross-platform JavaScript library, users do not need add-ons in order to use Persona.</p> +<table> + <tbody> + <tr> + <th colspan="3" scope="row" style="text-align: center; background-color: #d3d7cf;"><strong>Desktop Browsers</strong></th> + </tr> + <tr> + <th scope="row"><strong>Internet Explorer</strong></th> + <td colspan="2" rowspan="1" style="background-color: #8ae234;">8.0<sup>*</sup>, 9.0<sup>†</sup></td> + </tr> + <tr> + <th scope="row"><strong>Firefox</strong></th> + <td colspan="2" style="background-color: #8ae234;">Current Stable, Beta, Aurora, Nightly, and Extended Support Releases<br> + Previous Stable Release</td> + </tr> + <tr> + <th scope="row"><strong>Chrome</strong></th> + <td colspan="2" style="background-color: #8ae234;">Latest Stable Release</td> + </tr> + <tr> + <th scope="row"><strong>Safari</strong></th> + <td colspan="2" style="background-color: #8ae234;">Latest Stable Release</td> + </tr> + <tr> + <th scope="row"><strong>Opera</strong></th> + <td colspan="2" style="background-color: #8ae234;">Latest Stable Release<sup>‡</sup></td> + </tr> + <tr> + <th colspan="3" scope="row" style="text-align: center; background-color: #d3d7cf;"><strong>iOS Browsers</strong></th> + </tr> + <tr> + <th scope="row"><strong>Mobile Safari</strong></th> + <td colspan="2" rowspan="1" style="background-color: #8ae234;">iOS 5.x</td> + </tr> + <tr> + <th colspan="3" scope="row" style="text-align: center; background-color: #d3d7cf;"><strong>Android Browsers</strong></th> + </tr> + <tr> + <th scope="row"><strong>Default Browser</strong></th> + <td colspan="2" rowspan="1" style="background-color: #8ae234;">2.x — 4.x</td> + </tr> + <tr> + <th scope="row"><strong>Firefox</strong></th> + <td colspan="2" style="background-color: #8ae234;">Current Stable, Beta, Aurora, and Nightly Releases<br> + Previous Stable Release</td> + </tr> + <tr> + <th scope="row"><strong>Chrome</strong></th> + <td colspan="2" style="background-color: #8ae234;">Latest Stable Release</td> + </tr> + </tbody> +</table> +<p><sup>*</sup>: For Windows XP. <sup>†</sup>: For Windows Vista and Windows 7. <sup>‡</sup>: As time allows.</p> +<h2 id="Unsupported_Browsers">Unsupported Browsers</h2> +<ul> + <li>Internet Explorer versions 6.0 and 7.0 are not supported. Users will be prompted to upgrade their browser.</li> + <li>Google Chrome Frame is not supported and will not function. Support may be added later (<a href="https://github.com/mozilla/browserid/issues/796" title="https://github.com/mozilla/browserid/issues/796">Issue #796</a>).</li> + <li>Third party browsers on iOS are not supported and will not function. Support may be added later (<a href="https://github.com/mozilla/browserid/issues/1870" title="https://github.com/mozilla/browserid/issues/1870">Issue #1870</a>, <a href="https://github.com/mozilla/browserid/issues/2034" title="https://github.com/mozilla/browserid/issues/2034">Issue #2034</a>).</li> +</ul> +<h2 id="Other_Browsers">Other Browsers</h2> +<p>Despite not being explicitly supported, any browser that includes both {{ domxref("window.postMessage()") }} and {{ domxref("Storage", "localStorage") }} should work. These APIs have been available in all major browsers since March 2010.</p> +<h2 id="Known_Issues">Known Issues</h2> +<ul> + <li>Browsers must accept third party cookies for full functionality (<a href="https://github.com/mozilla/browserid/issues/1352" title="https://github.com/mozilla/browserid/issues/1352">Issue #1352</a>).</li> + <li>Android 2.x users without a default browser selected may be unable to log in (<a href="https://github.com/mozilla/browserid/issues/1854" title="https://github.com/mozilla/browserid/issues/1854">Issue #1854</a>).</li> + <li>When forced to emulate IE8, Internet Explorer 9 may fail to log in to sites.</li> +</ul> diff --git a/files/pt-br/mozilla/persona/index.html b/files/pt-br/mozilla/persona/index.html new file mode 100644 index 0000000000..b4ce66c636 --- /dev/null +++ b/files/pt-br/mozilla/persona/index.html @@ -0,0 +1,177 @@ +--- +title: Persona +slug: Mozilla/Persona +tags: + - Persona +translation_of: Archive/Mozilla/Persona +--- +<div class="summary">Simples, sensível à privacidade, login único: permita que seus usuários assinem em seu site com o seu endereço de e-mail, e liberte-se do gerenciamento de senhas.</div> + +<div class="column-container"> +<p><span class="seoSummary">O <a href="https://login.persona.org/">Mozilla Persona</a> é um sistema de login para Web compatível com vários navegadores que é fácil de usar e fácil de implantar. Ele funciona em <a href="/en-US/docs/persona/Browser_compatibility">todos os principais navegadores</a>, e você pode <a href="/en-US/docs/Persona/Quick_Setup">começar hoje mesmo</a>.</span></p> + +<p>Porque você deveria usar o Persona no seu website?</p> + +<ol> + <li><strong>O Persona elimina totalmente as senhas específicas para cada website</strong>, liberando os usuários e sites do fardo da criação, gerenciamento e armazenamento de senhas com segurança.</li> + <li><strong>O Persona é fácil de usar.</strong> Com somente dois cliques, um usuário do Persona pode entrar em um site como o <a href="http://voo.st">Voost</a>, ignorando o atrito associado com a criação da conta.</li> + <li><strong>O Persona é fácil de implementar</strong><strong>. </strong>Os desenvolvedores podem adicionar o Persona em um website numa única tarde.</li> + <li><strong>Não há aprisionamento</strong>. Os desenvolvedores obtêm um endereço de e-mail verificado para todos os seus usuários, e os usuários podem usar qualquer endereço de e-mail com o Persona.</li> +</ol> + +<p>E Mais, o Persona só vai melhorar: ele é construido em um <strong>protocolo descentralizado, aberto,</strong> que é projetado para permitir <strong>integração direta em navegadores</strong> e <strong>suporte nativo por provedores e email</strong><strong>. </strong>Sites que implementam o Persona hoje vão experimentar automaticamente essas melhorias, sem ter de alterar qualquer código.</p> +</div> + +<hr> +<div class="column-container"> +<h2 id="Usando_o_Persona_no_seu_próprio_site">Usando o Persona no seu próprio site</h2> + + +<div class="column-third"> +<h3 id="Começando">Começando</h3> + +<dl> + <dt><a href="/en-US/docs/Persona/Why_Persona">Porque o Persona?</a></dt> + <dd>O que há de especial sobre o Persona em comparação com outros sistemas de identidade e autenticação.</dd> + <dt><a href="/en-US/docs/Persona/Quick_Setup">Instalação rápida</a></dt> + <dd>Um passo a passo mostrando como adicionar o Persona ao seu website.</dd> +</dl> + +<h3 id="API_de_referência">API de referência</h3> + +<dl> + <dt><a href="/en-US/Persona/The_navigator.id_API">A API navigator.id</a></dt> + <dd>A API do navegador.</dd> + <dt><a href="/en-US/docs/Persona/Remote_Verification_API">Verificação de referência da API</a></dt> + <dd>A API de verificação remota.</dd> +</dl> +</div> + +<div class="column-third"> +<h3 id="Guias">Guias</h3> + +<dl> + <dt><a href="/en-US/docs/Persona/Security_Considerations">Considerações de segurança</a></dt> + <dd>Práticas e técnicas para se certificar de sua implantação do Persona é segura.</dd> + <dt><a href="/en-US/docs/Persona/Browser_compatibility">Compatiblidade com navegadores</a></dt> + <dd>Saiba exatamente quais navegadores suportam o Persona.</dd> + <dt><a href="/en-US/docs/Persona/Internationalization">Internationalização</a></dt> + <dd>Saiba como Persona lida com diferentes idiomas.</dd> + <dt><a href="/en-US/docs/Persona/The_implementor_s_guide">O guia do implementador</a></dt> + <dd>Dicas de sites que adicionaram suporte para o Persona.</dd> +</dl> +</div> + +<div class="column-third"> +<h3 id="Recursos">Recursos</h3> + +<dl> + <dt><a href="/en-US/docs/Persona/Libraries_and_plugins">Bibliotecas e plugins</a></dt> + <dd>Encontre uma biblioteca drop-in para sua linguagem programação favorita, framework web, blog, ou sistema de gerenciamento de conteúdo.</dd> + <dt><a class="link-https" href="https://github.com/mozilla/browserid-cookbook">O Livro de Receitas do Persona</a></dt> + <dd>EExemplos de código fonte para websites com Persona. Inclui fragmentos em C# (MVC3), PHP, Node.JS, e mais.</dd> + <dt><a href="/en-US/Persona/User_interface_guidelines">Diretrizes da interface do usuário</a></dt> + <dd>Como apresentar o login do Persona para seus usuários.</dd> +</dl> +</div> +</div> + +<hr> +<h2 id="Tornando-se_um_Provedor_de_Identidade">Tornando-se um Provedor de Identidade</h2> + +<p>Se você é um provedor de e-mail ou outro serviço prestador de identidade, confira os links abaixo para saber mais sobre como se tornar um Provedor de Identidade do Persona.</p> + +<div class="column-container"> +<div class="column-third"> +<dl> + <dt><a href="/en-US/docs/Persona/Identity_Provider_Overview">Visão geral dos PId</a></dt> + <dd>Uma visão de alto nível sobre Provedores de Identidade do Persona.</dd> +</dl> +</div> + +<div class="column-third"> +<dl> + <dt><a href="/en-US/docs/Persona/Implementing_a_Persona_IdP">Implementando um PId</a></dt> + <dd>Um guia detalhado para os detalhes técnicos sobre ser um PId.</dd> +</dl> +</div> + +<div class="column-third"> +<dl> + <dt><a href="/en-US/docs/Persona/.well-known-browserid">.well-known/browserid</a></dt> + <dd>Uma visão geral dos arquivos <code>.well-known/browserid</code>, que os PIds usam para anunciar suporte para o protocolo.</dd> +</dl> +</div> +</div> + +<hr> +<h2 id="O_Projeto_Persona">O Projeto Persona</h2> + +<div class="column-container"> +<div class="column-third"> +<dl> + <dt><a href="/en-US/docs/Persona/Glossary">Glossário</a></dt> + <dd>Terminologia BrowserID e Persona definida.</dd> + <dt><a href="/en-US/docs/Persona/FAQ">Perguntas Frequentes</a></dt> + <dd>Respostas a perguntas comuns.</dd> + <dt><a href="/en-US/docs/Persona/Protocol_Overview">Visão geral do protocolo</a></dt> + <dd>Uma visão geral técnica de nível médio do protocolo BrowserID de base.</dd> +</dl> +</div> + +<div class="column-third"> +<dl> + <dt><a href="/en-US/docs/persona/Crypto">Cripto</a></dt> + <dd>Um olhar sobre os conceitos por trás de criptografia do Persona e BrowserID.</dd> + <dt><a class="link-https" href="https://github.com/mozilla/id-specs/blob/prod/browserid/index.md">As Especificações</a></dt> + <dd>Detalhes técnicos profundos vivem aqui.</dd> +</dl> +</div> + +<div class="column-third"> +<dl> + <dt><a href="/en-US/docs/Persona/Bootstrapping_Persona">O website do Persona</a></dt> + <dd>Para o Persona funcionar, estamos hospedando três serviços em <a class="link-https" href="https://login.persona.org" rel="freelink">https://login.persona.org</a>: um retorno do Provedor de Identidade, uma implementação das APIs {{domxref("navigator.id")}}, e um serviço de verificação.</dd> + <dt><a href="https://github.com/mozilla/browserid">O código fonte do Persona</a></dt> + <dd>O código do Persona está no GitHub. Pull requests são bem-vindas!</dd> +</dl> +</div> +</div> + + + +<h2 id="Subnav">Subnav</h2> + +<ol> + <li><a href="#">Usando o Persona num website</a> + + <ol> + <li><a href="/pt-BR/docs/Mozilla/Persona/Porque_Persona" title="Porque Persona?">Porque você deveria usar o Persona?</a></li> + <li><a href="/pt-BR/docs/Mozilla/Persona/Quick_Setup" title="Início Pápido">Inicio Rápido</a></li> + <li><a href="/en-US/Persona/The_implementor_s_guide" title="Guia do Implementador">Dicas para implementar o Persona</a></li> + <li><a href="/en-US/Persona/Security_Considerations" title="Considerações de Segurança">Considerações de segurança</a></li> + <li><a href="/en-US/Persona/Browser_compatibility" title="Compatibilidade com Navegadores">Compatibilidade com navegadores</a></li> + <li><a href="/en-US/Persona/Internationalization" title="Internationalização">Internationalização</a></li> + <li><a href="/en-US/Persona/The_navigator.id_API" title="A API navigator.id">A API navigator.id</a></li> + <li><a href="/en-US/Persona/Remote_Verification_API" title="A API de Verificação Remota">A API de verificação remota</a></li> + <li><a href="/en-US/Persona/Libraries_and_plugins" title="Bibliotecas e plugins">Bibliotecas e plugins</a></li> + <li><a href="/en-US/Persona/User_interface_guidelines" title="Diretrizes de interface do usuário">Diretrizes de interface do usuário</a></li> + </ol> + </li> + <li><a href="#">Se tornando um Provedor de Identidade</a> + <ol> + <li><a href="/en-US/Persona/Identity_Provider_Overview" title="Visão geral dos IdPs">Visão geral dos IdPs</a></li> + <li><a href="/en-US/Persona/Implementing_a_Persona_IdP" title="Implementando um IdP">Implementando um IdP</a></li> + <li><a href="/pt-BR/docs/Persona/.well-known-browserid" title="Formato .well-known-browserid">Formato .well-known-browserid</a></li> + </ol> + </li> + <li><a href="#">O projeto Persona</a> + <ol> + <li><a href="/en-US/Persona/Glossary" title="Glossário">Glossário</a></li> + <li><a href="/en-US/Persona/FAQ" title="FAQ">Perguntas Frequentes</a></li> + <li><a href="/en-US/Persona/Bootstrapping_Persona" title="Serviços hospedados do Persona">Serviços hospedados do Persona</a></li> + <li><a href="/en-US/Persona/Protocol_Overview" title="Visão geral do protocolo">Visão geral do protocolo</a></li> + <li><a href="/en-US/Persona/Crypto" title="Cripto">Criptografia</a></li> + </ol> + </li> +</ol> diff --git a/files/pt-br/mozilla/persona/porque_persona/index.html b/files/pt-br/mozilla/persona/porque_persona/index.html new file mode 100644 index 0000000000..eccf487479 --- /dev/null +++ b/files/pt-br/mozilla/persona/porque_persona/index.html @@ -0,0 +1,74 @@ +--- +title: Por que você deveria usar o Persona? +slug: Mozilla/Persona/Porque_Persona +tags: + - Destaque + - Introdução + - Persona +translation_of: Archive/Mozilla/Persona/Why_Persona +--- +<div dir="ltr" style="margin-left: 40px;"><span id="result_box" lang="pt"><span class="hps">Persona</span> <span class="hps">é um sistema de</span> <span class="hps">identidade</span> <span class="hps">cross-browser</span> <span class="hps">distribuído</span> <span class="hps">abertamente</span> <span class="hps">fornecendo uma solução para</span> <span class="hps">o modelo</span> <span class="hps">tradicional</span> <span class="hps">de senha</span><span>.</span> <span class="hps">Ele aborda</span> <span class="hps">as deficiências</span> <span class="hps">de usabilidade</span> <span class="hps">que afligem</span> <span class="hps">outros sistemas</span> <span class="hps">relacionados com a</span> <span class="hps">privacidade, como</span> <span class="hps">OpenID</span><span>,</span> <span class="hps">sem recorrer a</span> <span class="hps">uma infra-estrutura</span> <span class="hps">centralizada, como</span> <span class="hps">o Facebook Connect.</span><br> + <br> +<span class="hps">A abordagem</span> <span class="hps">atual para</span> <span class="hps">estabelecer e gerenciar</span> <span class="hps">nomes de usuário</span> <span class="hps">e senhas</span> <span class="hps">é tedioso</span><span>, ineficiente e</span> <span class="hps">não seguro.</span> <span class="hps">Os usuários devem</span> <span class="hps">criar e</span> <span class="hps">lembrar</span> <span class="hps">senhas complexas</span> <span class="hps">para cada site</span> <span class="hps">e serviço.</span> <span class="hps">Sites</span> <span class="hps">então</span> <span class="hps">deve</span> <span class="hps">de forma segura</span> <span class="hps">criptografar</span> <span class="hps">e armazenar</span> <span class="hps">senhas para impedir</span> <span class="hps">o vazamento de</span> <span class="hps">informações confidenciais.</span> <span class="hps">A prevenção ea</span> <span class="hps">negação</span> <span class="hps">de</span> <span class="hps">vazamentos de segurança</span> <span class="hps">é a principal razão</span> <span class="hps">para o uso de</span> <span class="hps">Persona</span><span>,</span> <span class="hps">mas a flexibilidade</span> <span class="hps">de seus sistemas</span> <span class="hps">outclasses</span> <span class="hps">sistemas de segurança</span> <span class="hps">de identidade</span> <span class="hps">mais padrão</span><span>.</span></span></div> + +<div dir="ltr" style="margin-left: 40px;"> </div> + +<div class="summary"> +<div dir="ltr" style="margin-left: 40px;"><span id="result_box" lang="pt"><span class="hps">Nota: Para informações</span> <span class="hps">mais detalhadas sobre</span> <span class="hps">Persona</span> <span class="hps">e suas funções</span> <span class="hps">ver</span> <a href="https://support.mozilla.org/en-US/kb/what-is-persona-and-how-does-it-work">O que é Persona e como ele funciona?</a></span></div> +</div> + +<h2 id="Persona_elimina_a_necessidade_de_senhas_por_site"><span class="short_text" id="result_box" lang="pt"><span class="hps">Persona</span> <span class="hps">elimina a necessidade de</span> <span class="hps">senhas</span> <span class="hps">por site</span></span></h2> + +<p style="margin-left: 40px;"><span id="result_box" lang="pt"><span class="hps">Persona</span> <span class="hps">utiliza</span> <span class="hps">um sistema</span> <span class="hps">de dois cliques</span> <span class="hps">segura</span> <span class="hps">construída em cima de</span> <span class="hps">criptografia de chave pública</span> <span class="hps">para</span> <span class="hps">fazer login em</span> <span class="hps">sites.</span> <span class="hps">O navegador do usuário</span> <span class="hps">gera uma</span> <span class="hps">afirmação</span> <span class="hps">de criptografia</span> <span class="hps">de</span> <span class="hps">identidade que</span> <span class="hps">expira</span> <span class="hps">depois de alguns minutos</span> <span class="hps">e</span> <span class="hps">é válido apenas</span> <span class="hps">em um local.</span> <span class="hps">Ao evitar</span> <span class="hps">senhas</span><span>,</span> <span class="hps">os usuários não precisam</span> <span class="hps">se preocupar em lembrar</span> <span class="hps">várias</span> <span class="hps">senhas</span> <span class="hps">distintas e</span> <span class="hps">não precisam mais</span> <span class="hps">se preocupar com</span> <span class="hps">o acesso</span> <span class="hps">não segura</span> <span class="hps">a</span> <span class="hps">sua</span> <span class="hps">senha.</span> <span class="hps">Este processo</span> <span class="hps">sign-in</span> <span class="hps">rápido e fácil</span> <span class="hps">elimina</span> <span class="hps">as ineficiências</span> <span class="hps">atuais de</span> <span class="hps">registro de conta</span> <span class="hps">tradicional e</span> <span class="hps">permite que os usuários</span> <span class="hps">rapidamente estabelecer</span> <span class="hps">contas</span> <span class="hps">em sites.</span></span></p> + +<h2 id="Persona_usa_endereços_de_e-mail_como_identidades"><span class="short_text" id="result_box" lang="pt"><span class="hps">Persona</span> <span class="hps">usa endereços</span> <span class="hps">de e-mail</span> <span class="hps">como</span> <span class="hps">identidades</span></span></h2> + +<div id="gt-src-tools"> +<div id="gt-src-tools-l"> +<div id="gt-input-tool" style="display: inline-block;"> +<div id="itamenu" style="margin-left: 40px;"><span id="result_box" lang="pt"><span class="hps">Sistema</span> <span class="hps">de</span> <span class="hps">Persona</span> <span class="hps">depende de</span> <span class="hps">endereços</span> <span class="hps">de e-mail</span> <span class="hps">como seu</span> <span class="hps">componente chave</span> <span class="hps">por causa de</span> <span class="hps">e-mails</span> <span class="hps">inerente</span> <span class="hps">natureza versátil</span> <span class="hps">e privado.</span> <span class="hps">A infra-estrutura</span> <span class="hps">pré-existente</span> <span class="hps">funciona muito bem</span><span>, não apenas de</span> <span class="hps">uma perspectiva de design</span><span>, mas</span> <span class="hps">uma perspectiva</span> <span class="hps">ideal</span> <span class="hps">de</span> <span class="hps">abertamente</span> <span class="hps">mantido</span> <span class="hps">e segura</span> <span class="hps">transferência de</span> <span class="hps">identidade</span> <span class="hps">em toda a</span> <span class="hps">Internet.</span></span></div> +</div> +</div> +</div> + +<h3 id="sect1"> </h3> + +<h3 id="Benefícios_para_o_usuário"><span class="short_text" id="result_box" lang="pt"><span class="hps">Benefícios para</span> <span class="hps">o usuário</span></span></h3> + +<ul style="margin-left: 40px;"> + <li><span id="result_box" lang="pt"><span class="hps">Os usuários já</span> <span class="hps">conhecem os seus</span> <span class="hps">endereços de email.</span> <span class="hps">Eles</span> <span class="hps">não têm que</span> <span class="hps">aprender um sistema</span> <span class="hps">novo e potencialmente</span> <span class="hps">confuso</span><span>, como</span> <span class="hps">OpenID</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span class="hps">Os endereços</span> <span class="hps">de e-mail</span> <span class="hps">cuidadosamente</span> <span class="hps">capturar</span> <span class="hps">a idéia de alguém</span> <span class="hps">@</span> <span class="hps">algum</span> <span class="hps">contexto.</span> <span class="hps">Isso torna mais fácil</span> <span class="hps">para os usuários a</span> <span class="hps">manter</span> <span class="hps">suas identidades @trabalho</span><span>, @casa</span><span>,</span> <span class="hps">ou @escola</span> <span class="hps">separado.</span> <span class="hps">Isso difere da</span> <span class="hps">tendência</span> <span class="hps">de</span> <span class="hps">que reúna</span> <span class="hps">muitas</span> <span class="hps">contas através</span> <span class="hps">identidade real</span><span>,</span> <span class="hps">políticas de</span> <span class="hps">conta</span> <span class="hps">única</span> <span class="hps">em redes sociais como</span> <span class="hps">Facebook</span> <span class="hps">e</span> <span class="hps">Google+</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span class="hps">Email</span> <span class="atn hps">pode ser auto-</span><span>organizado ou</span> <span class="hps">delegadas a outros</span> <span class="hps">prestadores de serviços,</span> <span class="hps">dando aos usuários</span> <span class="hps">o controle de sua</span> <span class="hps">identidade.</span> <span class="hps">Essa habilidade</span> <span class="hps">é muito reduzido</span> <span class="hps">quando</span> <span class="hps">é preciso</span> <span class="hps">consolidar</span> <span class="hps">várias contas</span> <span class="hps">em uma</span> <span class="hps">identidade.</span></span> </li> +</ul> + +<div class="almost_half_cell" id="gt-res-content"> +<h3 dir="ltr" id="Vantagens_para_Desenvolvedores" style="zoom: 1;"><span class="short_text" id="result_box" lang="en"><span class="hps">Vantagen</span><span class="hps">s para Desenvolvedores</span></span></h3> +</div> + +<ul style="margin-left: 40px;"> + <li> + <div id="gt-input-tool" style="display: inline-block;"> + <div id="tts_button"><span id="result_box" lang="pt"><span class="hps">Os endereços de email</span> <span class="hps">permitem que os desenvolvedores</span> <span class="hps">se comunicar diretamente com</span> <span class="hps">os usuários</span></span></div> + </div> + <span lang="en"><span class="hps">.</span> </span></li> + <li> + <div class="almost_half_cell" id="gt-res-content"> + <div dir="ltr" style="zoom: 1;"><span id="result_box" lang="pt"><span class="hps">Persona</span> <span class="hps">fornece endereços</span> <span class="hps">de e-mail</span> <span class="hps">para sites</span> <span class="hps">automaticamente quando um usuário</span> <span class="hps">faz logon,</span> <span class="hps">eliminando a necessidade de</span> <span class="hps">formas pós</span><span class="atn">-</span><span>inscrição</span> <span class="hps">adicionais.</span></span><span lang="es"><span lang="en"><span class="hps">.</span> </span></span></div> + </div> + </li> + <li> + <div class="almost_half_cell" id="gt-res-content"> + <div dir="ltr" style="zoom: 1;"><span id="result_box" lang="pt"><span class="hps">Muitos</span> <span class="hps">sistemas de login</span> <span class="hps">tratar</span> <span class="hps">endereços</span> <span class="hps">de e-mail</span> <span class="hps">como chaves</span> <span class="hps">únicas,</span> <span class="hps">por isso não há</span> <span class="alt-edited hps">travas</span> <span class="hps">para</span> <span class="hps">Persona</span> <span class="hps">e pode</span> <span class="hps">ser integrado com</span> <span class="hps">sistemas de acesso</span> <span class="hps">existentes.</span> <span class="hps">Qualquer usuário que tenha</span> <span class="hps">um endereço de</span> <span class="hps">e-mail</span> <span class="hps">pode acessar o conteúdo</span> <span class="hps">quase imediatamente</span></span><span id="result_box" lang="es"><span id="result_box" lang="en">.</span></span></div> + </div> + </li> +</ul> + +<div class="almost_half_cell" id="gt-res-content"> +<h2 dir="ltr" id="Como_Persona_é_diferente_de_outros_prestadores_de_login_único" style="zoom: 1;"><span id="result_box" lang="pt"><span class="alt-edited">Como Persona é diferente de outros prestadores de login único</span></span></h2> +</div> + +<p style="margin-left: 40px;"><span id="result_box" lang="pt"><span class="alt-edited">Persona protege a privacidade, fornece ao usuário o controle, e embeleza escolha de uma maneira que outros provedores de segurança não pode. Muitas redes sociais como Facebook e Google+ exige que os usuários usem os nomes reais, aceitar as suas políticas, e os usuários se limitam a apenas uma conta. Persona permite que os usuários mantenham seus trabalhos, na escola e identidades sociais separado usando endereços de e-mail como um identificador único ao invés de nomes reais. Devido a isso o anonimato é garantido uma camada extra de proteção de identidade e de rede que as redes sociais mais não têm.</span></span></p> + +<p style="margin-left: 40px;"><span id="result_box" lang="pt"><span class="alt-edited">Persona também tem uma nova abordagem para proteger a privacidade do usuário, colocando o navegador do usuário no centro do processo de autenticação. O navegador obtém credenciais fornecidas por e-mail do usuário, em seguida, apresenta essas credenciais para um site. O provedor de e-mail não pode rastrear o usuário, mas os locais ainda podem ter confiança na identidade do usuário por criptografia para verificar as credenciais. A maioria dos outros sistemas, até mesmo sistemas distribuídos como o OpenID, requerem sites para se conectar a redes centrais antes de permitir que um usuário para efetuar login.</span></span></p> + +<p style="margin-left: 40px;"><span id="result_box" lang="pt"><span class="alt-edited">A eficiência da Persona permite uma relação avançada entre desenvolvedores e usuários. Mozilla está liderando o caminho no desenvolvimento de web aberta e livre, e Persona suporta filosofia de design da Mozilla através de sua interface de usuário e de proteção características easy-to-use (Fácil de Usar).</span></span></p> diff --git a/files/pt-br/mozilla/persona/quick_setup/index.html b/files/pt-br/mozilla/persona/quick_setup/index.html new file mode 100644 index 0000000000..5a28805de7 --- /dev/null +++ b/files/pt-br/mozilla/persona/quick_setup/index.html @@ -0,0 +1,148 @@ +--- +title: Quick Setup +slug: Mozilla/Persona/Quick_Setup +translation_of: Archive/Mozilla/Persona/Quick_Setup +--- +<p>Adicionando o sistema de login Persona para seu site leva apenas cinco passos:</p> +<ol> + <li>Incluir a Persona biblioteca JavaScript em suas páginas.</li> + <li>Adicionar "login" e "logout" botões.</li> + <li>Preste atenção para ações login e logout.</li> + <li>Verificar as credenciais do usuário.</li> + <li>Reveja as melhores práticas.</li> +</ol> +<p>Você deve ser capaz de se levantar e correr em uma única tarde, mas as primeiras coisas primeiro: Se você estiver indo para usar Persona em seu site, por favor, tome um momento e se inscrever na lista de discussão Persona avisos. É o tráfego extremamente baixo, sendo usado apenas para anunciar mudanças ou problemas de segurança que podem afetar negativamente o seu site.<br> + Passo 1: Incluir a biblioteca Persona<br> + <br> + Persona é projetado para ser navegador neutro e funciona bem em todos os desktops principal e navegadores móveis. Isto é possível graças à plataforma cruzada biblioteca JavaScript Persona. Uma vez que esta biblioteca é carregada na sua página, as funções que você precisa Persona ({{domxref ("navigator.id.watch ()", "assistir ()");}}, {{domxref ("navigator.id.request () "," request () ")}}, e {{domxref (" navigator.id.logout () "," logout () ");}}) estará disponível no objeto global navigator.id.<br> + <br> + Para incluir o Persona biblioteca JavaScript, você pode colocar essa tag script na cabeça da sua página:<br> + <br> + <script src="https://login.persona.org/include.js"> </ script><br> + <br> + Você deve incluir isso em cada página que usa {{domxref ("navigator.id")}} funções. Porque Persona ainda está em desenvolvimento, não se deve auto-hospedar o arquivo include.js.<br> + Passo 2: Adicione login e logout botões<br> + <br> + Porque Persona é concebido como uma API DOM, você deve chamar funções quando um usuário clica em um botão de entrar e sair em seu site. Para abrir o diálogo Persona e solicitar ao usuário fazer o login, você deve invocar {{domxref ("navigator.id.request ()")}}. Para sair, chamar {{domxref ("navigator.id.logout ()")}}.<br> + <br> + Por exemplo:<br> + <br> + var signinLink = document.getElementById ('signin');<br> + if (signinLink) {<br> + signinLink.onclick = function () {navigator.id.request ();};<br> + };<br> + <br> + var signoutLink = document.getElementById ('signout');<br> + if (signoutLink) {<br> + signoutLink.onclick = function () {navigator.id.logout ();};<br> + };<br> + <br> + O que deve aqueles botões parecem? Vá para a página de Recursos de Branding para imagens premade e baseados em CSS botões!<br> + Passo 3: Preste atenção para ações login e logout<br> + <br> + Para Persona para funcionar, você precisa dizer a ele o que fazer quando um usuário faz dentro ou fora. <span title='This is done by calling the {{ domxref("navigator.id.watch()") }} function and supplying three parameters:'>Isso é feito chamando a função {{domxref ("navigator.id.watch ()")}} e fornecer três parâmetros:<br> + <br> + </span>O loggedInEmail do usuário atual do seu site, ou nulo se nenhum. <span title="You should generate this dynamically when you render a page.">Você deve gerar este dinamicamente quando você renderizar uma página.<br> + <br> + </span>A função para chamar quando uma ação OnLogin é acionado. <span title="This function is passed a single parameter, an “identity assertion,” which must be verified.">Esta função é passado um único parâmetro, uma "declaração de identidade", a qual deve ser verificada.<br> + <br> + </span>A função para chamar quando uma ação OnLogout é acionado. Esta função não é passado nenhum parâmetro.<br> + <br> + Nota: Você deve sempre incluir tanto OnLogin e OnLogout quando você chamar {{domxref ("navigator.id.watch ()")}}.<br> + <br> + Por exemplo, se você atualmente acho que Bob é registrada em seu site, você pode fazer isso:<br> + <br> + var currentUser = 'bob@example.com';<br> + <br> + navigator.id.watch ({<br> + loggedInEmail: currentUser,<br> + OnLogin: function (afirmação) {<br> + // Um usuário conectado!<br> + // 1. Enviar a afirmação de sua infra-estrutura para verificação e para criar uma sessão.<br> + // 2. Atualize seu UI.<br> + $.ajax({<br> + Tipo: 'POST',<br> + url: '/ auth / login', // Esta é uma URL em seu site.<br> + data: {'status': true},<br> + success: function (res, status, xhr) {window.location.reload ();},<br> + error: function(res, status, xhr) {alert ("falha de login" + res);}<br> + });<br> + }<br> + OnLogout: function () {<br> + // Um usuário logado para fora! Aqui você precisa:<br> + // Derrubem a sessão do usuário, redirecionando o usuário ou fazer uma chamada para o backend.<br> + $.ajax({<br> + type: 'POST',<br> + url: 'auth / / logout', / / Esta é uma URL em seu site.<br> + success: function(res, status, xhr) {window.location.reload ();},<br> + erro: function(res, status, xhr) {alert ("logout fracasso" + res);}<br> + });<br> + }<br> + });<br> + <br> + Neste exemplo, tanto OnLogin e OnLogout são implementadas, fazendo uma solicitação POST assíncrona para backend do seu site. O back-end em seguida, registra o usuário dentro ou fora, geralmente através da criação ou exclusão de informações em um cookie de sessão. Então, se tudo controlos fora, recarrega a página para ter em conta o estado novo login.<br> + <br> + Você pode, é claro, usar AJAX para implementar esta sem recarregar ou redirecionar, mas isso está além do escopo deste tutorial.<br> + <br> + Você deve chamar esta função em cada página com um botão de entrar e sair. Para apoiar melhorias Persona como login automático e sair mundial para seus usuários, você deve chamar esta função em cada página do seu site.<br> + Passo 4: Verifique as credenciais do usuário<br> + <br> + Em vez de senhas, Persona usa "asserções de identidade", que são tipo como de uso único de um único site senhas combinado com o endereço de e-mail do usuário. Quando um usuário deseja fazer o login, o retorno de chamada OnLogin será invocado com uma afirmação do que o usuário. Antes que você possa acessá-los, você deve verificar se a afirmação é válida.<br> + <br> + É extremamente importante que você verifique a afirmação em seu servidor, e não em JavaScript executado no navegador do usuário, uma vez que seria fácil de falsificar. O exemplo acima entregue a afirmação de backend do site usando jQuery $. Ajax () auxiliar para postá-lo para api / / login.<br> + <br> + Uma vez que o servidor tem uma afirmação, como você verificar isso? A maneira mais fácil é usar um serviço de ajuda fornecida pela Mozilla. <span title="Simply POST the assertion to https://verifier.login.persona.org/verify with two parameters:">Simplesmente postar a afirmação de https://verifier.login.persona.org/verify com dois parâmetros:<br> + <br> + </span><span title="assertion: The identity assertion provided by the user.">afirmação: A afirmação de identidade fornecida pelo usuário.<br> + </span>platéia: O nome do host ea porta do seu site. Você deve codificar este valor em seu backend, não derivá-lo de todos os dados fornecidos pelo usuário.<br> + <br> + Por exemplo, se você é example.com, você pode utilizar a linha de comando para testar uma afirmação com:<br> + <br> + $ Curl-d "afirmação = <ASSERTION> público = & https://example.com:443" "https://verifier.login.persona.org/verify"<br> + <br> + Se for válido, você vai ter uma resposta JSON assim:<br> + <br> + {<br> + "status": "okay",<br> + "email": "bob@eyedee.me",<br> + "audience": "https://example.com:443",<br> + "expires": 1308859352261,<br> + "issuer": "eyedee.me"<br> + }<br> + <br> + Você pode saber mais sobre o serviço de verificação lendo a API do serviço de verificação. Um exemplo de implementação api / / login, usando o Python, o framework web Flask, e os pedidos HTTP biblioteca pode ter este aspecto:<br> + <br> + @ App.route ('/ api / login ", métodos = [' Post '])<br> + <span title="def login():">def login ():<br> + </span><span title="# The request has to have an assertion for us to verify"># O pedido tem que ter uma afirmação para nós verificar<br> + </span><span title="if 'assertion' not in request.form:">se "afirmação" não request.form:<br> + </span><span title="abort(400)">abort (400)<br> + <br> + </span><span title="# Send the assertion to Mozilla's verifier service."># Enviar a afirmação ao serviço da Mozilla verificador.<br> + </span><span title="data = {'assertion': request.form['assertion'], 'audience': 'https://example.com:443'}">dados = {'afirmação': request.form ['afirmação'], 'audiência': 'https://example.com:443'}<br> + </span><span title="resp = requests.post('https://verifier.login.persona.org/verify', data=data)">resp = requests.post ('https://verifier.login.persona.org/verify', data = dados)<br> + <br> + </span><span title="# Did the verifier respond?"># Será que o verificador responder?<br> + </span><span title="if resp.ok:">se resp.ok:<br> + </span><span title="# Parse the response"># Analise a resposta<br> + </span><span title="verification_data = json.loads(resp.content)">verification_data = json.loads (resp.content)<br> + <br> + </span><span title="# Check if the assertion was valid"># Verifique se a afirmação era válida<br> + </span><span title="if verification_data['status'] == 'okay':">se verification_data ['status'] == 'ok':<br> + </span><span title="# Log the user in by setting a secure session cookie"># Registra o usuário em definindo um cookie de sessão seguro<br> + </span><span title="session.update({'email': verification_data['email']})">Session.update ({'email': verification_data ['email']})<br> + </span><span title="return resp.content">voltar resp.content<br> + <br> + </span># Ops, algo falhou. <span title="Abort.">Abortar.<br> + </span>abort (500)<br> + <br> + O gerenciamento de sessão é provavelmente muito semelhante ao seu sistema de login existente. A primeira grande mudança é em verificar a identidade do usuário, verificando uma afirmação em vez de verificar uma senha. A outra grande mudança é garantir que o endereço de e-mail do usuário está disponível para uso como parâmetro loggedInEmail para {{domxref ("navigator.id.watch ()")}}.<br> + <br> + Sair é simples: você só precisa remover cookies de sessão do usuário.<br> + Passo 5: Examinar as melhores práticas<br> + <br> + Uma vez que tudo funciona e você conseguiu logado para dentro e fora do seu site, você deve tomar um momento para rever as melhores práticas para a utilização de Persona de forma segura.<br> + <br> + Se você está fazendo um site pronto para produção, você pode querer escrever testes de integração que simulam registro de um usuário dentro e fora do seu site usando BrowserID. Para facilitar esta ação em selênio, considere usar a biblioteca bidpom. Os sites mockmyid.com e personatestuser.org também pode ser útil.<br> + <br> + Por último, não se esqueça de se inscrever para a lista de discussão Persona avisos assim que você está notificado de quaisquer questões de segurança ou mudanças para trás incompatíveis para o API Persona. A lista é de tráfego extremamente baixo: é só usado para anunciar mudanças que podem afetar negativamente o seu site.</p> diff --git a/files/pt-br/mozilla/persona/user_interface_guidelines/index.html b/files/pt-br/mozilla/persona/user_interface_guidelines/index.html new file mode 100644 index 0000000000..61008a4a66 --- /dev/null +++ b/files/pt-br/mozilla/persona/user_interface_guidelines/index.html @@ -0,0 +1,64 @@ +--- +title: User Interface guidelines +slug: Mozilla/Persona/User_interface_guidelines +translation_of: Archive/Mozilla/Persona/User_interface_guidelines +--- +<p>Presenting sign-in options to users without confusing them can be difficult, especially if your site offers multiple sign-in options. This article aims to provide guidance about the best way to present Persona sign-in to your users. It covers four different possible approaches, depending on the different sign-in options the website supports:</p> +<ul> + <li><a href="#persona-only">only Persona</a></li> + <li><a href="#persona_plus_traditional">Persona + "traditional sign-in"</a> (that is, sign in with a username and password stored on the site)</li> + <li><a href="#persona_plus_federated">Persona + one or more other federated sign-in options</a> such as Facebook Connect</li> + <li><a href="#persona_plus_traditional_plus_federated">Persona + "traditional sign-in" + one or more other federated sign-in options</a></li> +</ul> +<p>In each approach there are three user interface elements to consider:</p> +<ul> + <li>the Sign in/Sign up link, displayed on pages when the user is not signed in</li> + <li>the Sign up view: the interface that appears when the user clicks "Sign up"</li> + <li>the Sign in view: the interface that appears when the user clicks "Sign in"</li> +</ul> +<p>None of the recommendations here are mandatory.</p> +<h2 id="Persona_only"><a name="persona-only">Persona only</a></h2> +<p>If Persona is the only sign-in option presented to users, this offers the least confusing user experience, because the user has fewer choices to make.</p> +<h3 id="Sign_upSign_in_link">Sign up/Sign in link</h3> +<p>You can show just show a single link labeled "Sign up/Sign in". It's recommended that you also include the Persona icon, as this helps users know what to expect when they click the link:<br> + <br> + <img alt="" src="https://mdn.mozillademos.org/files/6773/persona-only-signin-link.png" style="width: 323px; height: 132px; display: block; margin-left: auto; margin-right: auto;"></p> +<h3 id="Sign_up_view">Sign up view</h3> +<p>You don't need to implement the sign up view at all, as Persona takes care of it for you.</p> +<h3 id="Sign_in_view">Sign in view</h3> +<p>Similarly, you don't need to implement the Sign in view, as Persona takes care of it.</p> +<h2 id="Persona_traditional_sign-in"><a name="persona_plus_traditional">Persona + traditional sign-in</a></h2> +<p>In this case you support Persona alongside traditional sign-in, where you ask users for a username and password which you then store yourself.</p> +<h3 id="Sign_upSign_in_link_2">Sign up/Sign in link</h3> +<p>You can show the text "Sign up/Sign in", with separate links for each choice:<img alt="" src="https://mdn.mozillademos.org/files/6775/persona-plus-signin-link.png" style="width: 296px; height: 142px; display: block; margin-left: auto; margin-right: auto;"></p> +<h3 id="Sign_up_view_2">Sign up view</h3> +<p>When a user clicks "Sign up" you'll need to offer them the choice to sign up using Persona or to create a new username and password on your site.</p> +<p>In this case it's recommended that the button for the Persona option includes the Persona icon and is labeled "Email" rather than "Persona". Users don't know what "Persona" means and won't see it as a valid sign-up option:</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/6777/persona-plus-trad-signup.png" style="width: 274px; height: 387px; display: block; margin-left: auto; margin-right: auto;"></p> +<h3 id="Sign_in_view_2">Sign in view</h3> +<p>When the user clicks "Sign in" you'll offer them the choice to sign in with Persona or the account they created on your site. This can be just like the "Sign up view", except you won't include the password confirmation field:</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/6779/persona-plus-trad-signin.png" style="width: 273px; height: 349px; display: block; margin-left: auto; margin-right: auto;"></p> +<h2 id="Persona_federated_sign-in"><a name="persona_plus_federated">Persona + federated sign-in</a></h2> +<p>In this case you support Persona alongside one or more other federated sign-in options such as Facebook Connect or Google+.</p> +<h3 id="Sign_upSign_in_link_3">Sign up/Sign in link</h3> +<p>You can show the text "Sign up/Sign in", with separate links for each choice:<img alt="" src="https://mdn.mozillademos.org/files/6775/persona-plus-signin-link.png" style="width: 296px; height: 142px; display: block; margin-left: auto; margin-right: auto;"></p> +<h3 id="Sign_up_view_3">Sign up view</h3> +<p>When a user clicks "Sign up" you'll need to offer them the choice to sign up using Persona or to sign up using one of the other federated identity options.</p> +<p>In this case it's recommended that the button for the Persona option includes the Persona icon and is labeled "Email" rather than "Persona". Users don't know what "Persona" means and won't see it as a valid sign-up option:</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/6783/persona-plus-fed-signup.png" style="width: 275px; height: 185px; display: block; margin-left: auto; margin-right: auto;"></p> +<h3 id="Sign_in_view_3">Sign in view</h3> +<p>When the user clicks "Sign in" you'll offer them the choice to sign in with Persona or one of the other federated sign-in options. This can be just like the "Sign up view":</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/6785/persona-plus-fed-signin.png" style="width: 275px; height: 187px; display: block; margin-left: auto; margin-right: auto;"></p> +<h2 id="Persona_traditional_sign-in_federated_sign-in"><a name="persona_plus_traditional_plus_federated">Persona + traditional sign-in + federated sign-in</a></h2> +<p>In this case you support everything: Persona, traditional sign-in, and one or more additional federated sign-in options.</p> +<h3 id="Sign_upSign_in_link_4">Sign up/Sign in link</h3> +<p>You can show the text "Sign up/Sign in", with separate links for each choice:<img alt="" src="https://mdn.mozillademos.org/files/6775/persona-plus-signin-link.png" style="width: 296px; height: 142px; display: block; margin-left: auto; margin-right: auto;"></p> +<h3 id="Sign_up_view_4">Sign up view</h3> +<p>When a user clicks "Sign up" you'll need to offer them the choice to sign up using Persona, to create a new username and password on your site, or to sign up using one of the other federated identity options.</p> +<p>In this case it's recommended that the button for the Persona option includes the Persona icon and is labeled "Email" rather than "Persona". Users don't know what "Persona" means and won't see it as a valid sign-up option:</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/6787/persona-plus-everything-signup.png" style="width: 275px; height: 411px; display: block; margin-left: auto; margin-right: auto;"></p> +<h3 id="Sign_in_view_4">Sign in view</h3> +<p>When the user clicks "Sign in" you'll offer them the choice to sign in with Persona, one of the other federated options, or the account they created on your site. This can be just like the "Sign up view", except you won't include the password confirmation field:</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/6789/persona-plus-everything-signin.png" style="width: 275px; height: 375px; display: block; margin-left: auto; margin-right: auto;"></p> +<h2 id="More_Info">More Info</h2> +<p>You can find more information about Persona's visual design in <a href="http://people.mozilla.org/~smartell/persona/" title="http://people.mozilla.org/~smartell/persona/">Sean Martell's style primer</a>.</p> diff --git a/files/pt-br/mozilla/preferences/index.html b/files/pt-br/mozilla/preferences/index.html new file mode 100644 index 0000000000..733f16bfdb --- /dev/null +++ b/files/pt-br/mozilla/preferences/index.html @@ -0,0 +1,55 @@ +--- +title: Preferências +slug: Mozilla/Preferences +translation_of: Mozilla/Preferences +--- +<p>O sistema de preferências possibilita guardar dados para aplicações Mozilla usando um sistema de emparelhamento chave/valor. Esses artigos fornecem informação sobre como usar os sistema de preferências.</p> + +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 class="Documentation" id="Documentation" name="Documentation">Documentação</h2> + + <dl> + <dt><a href="/en-US/docs/Preferences/Preferences_system" title="Preferences/Preferences system">Sistema de Preferências</a></dt> + <dd>Uma introdução ao uso do sistema de preferências na Mozilla.</dd> + <dt><a href="/en-US/docs/XUL_School/Handling_Preferences" title="XUL School/Handling Preferences">XUL School: Lidando com preferências</a></dt> + <dd>Capítulo tutorial XUL School nas preferências.</dd> + <dt><a href="/en-US/docs/Preferences/Preference_reference" title="Preferences/Preference_reference">Referência para preferências Mozilla</a></dt> + <dd>Um guia de referência para todas as preferências Mozilla.</dd> + <dt><a href="/en-US/docs/Preferences/A_brief_guide_to_Mozilla_preferences" title="Preferences/A brief guide to Mozilla preferences">Um guia rápido para as preferências Mozilla</a></dt> + <dd>Um guia introdutório para onde as preferências são armazenadas e outras informações úteis sobre o núcleo do sistema de preferências.</dd> + <dt><a href="/en-US/docs/Preferences/Using_preferences_from_application_code" title="Preferences/Using preferences from application code">Usando preferências a partir do código da aplicação</a> {{gecko_minversion_inline("6.0")}}</dt> + <dd>O Firefox 6 introduziu funções estáticas para acessar as preferências eficientemente a partir do código da aplicação.</dd> + <dt><a href="/en-US/docs/Preferences/Mozilla_networking_preferences" title="Preferences/Mozilla networking preferences">Preferências de rede Mozilla</a></dt> + <dd>Um guia para as preferências chave relacionado à redes.</dd> + <dt><a href="/en-US/docs/Preferences/Mozilla_preferences_for_uber-geeks" title="Preferences/Mozilla preferences for uber-geeks">Preferências da Mozilla para uber-geeks</a></dt> + <dd>Um guia para preferências que somente verdadeiros geeks de elite deveriam brincar.</dd> + </dl> + + <p><span class="alllinks"><a href="/en-US/docs/tag/Preferences" title="tag/Preferences">Ver todas as páginas com a tag "Preferências"...</a></span></p> + </td> + <td> + <h2 class="Community" id="Examples" name="Examples">Exemplos</h2> + + <dl> + <dt><a href="/en-US/docs/Code_snippets/Preferences" title="Code snippets/Preferences">Trechos de código</a></dt> + <dd>Trechos de código relacionados à preferência.</dd> + <dt><a href="/en-US/docs/Adding_preferences_to_an_extension" title="Adding preferences to an extension">Adicionando preferências à uma extensão</a></dt> + <dd>Como adicionar preferências à uma extensão já existente.</dd> + </dl> + + <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Tópicos Relacionados</h2> + + <ul> + <li><a href="/en-US/docs/XUL" title="XUL">XUL</a>, <a href="/en-US/docs/JavaScript" title="JavaScript">JavaScript</a>, <a href="/en-US/docs/XPCOM" title="XPCOM">XPCOM</a>, <a href="/en-US/docs/Extensions" title="Extensions">Extensões</a>, <a href="/en-US/docs/Developer_Guide" title="Developing_Mozilla">Guia do desenvolvedor Mozilla</a></li> + </ul> + </td> + </tr> + <tr> + <td> </td> + <td> </td> + </tr> + </tbody> +</table> diff --git a/files/pt-br/mozilla/projects/emscripten/index.html b/files/pt-br/mozilla/projects/emscripten/index.html new file mode 100644 index 0000000000..85dab946b3 --- /dev/null +++ b/files/pt-br/mozilla/projects/emscripten/index.html @@ -0,0 +1,42 @@ +--- +title: Emscripten +slug: Mozilla/Projects/Emscripten +tags: + - C++ + - Emscripten + - JavaScript + - LLVM +translation_of: Mozilla/Projects/Emscripten +--- +<p><span class="seoSummary">Emscripten é um compilador de LLVM para JavaScript. Ele recebe bytecode LLVM (gerado por exemplo de código C/C++ utilizando Clang, ou de outra linguagem) e compila para JavaScript, que pode ser executado na Web.</span></p> + +<div class="warning"> +<p><strong>Importante</strong>: Esta página fornece uma breve introdução sobre o que é o Emscripten. Para aprender mais Emscripten, <a href="http://kripken.github.io/emscripten-site/index.html">vá para o Wiki oficial do Emscripten</a>.</p> +</div> + +<p>Ao utilizar o Emscripten, é possível</p> + +<ul> + <li>Compilar código C e C++ para JavaScript</li> + <li>Compilar qualquer outro código que pode ser traduzido em bytecode de LLVM para JavaScript.</li> + <li>Compilar runtimes C/C++ de outras linguagens para JavaScript, e então executar o código nessas outras linguagens de forma indireta (isto já foi feito para Python e Lua)!</li> +</ul> + +<p>O Emscripten torna o código nativo imediatamente disponível na Web: uma plataforma que é baseada em padrões, tem inúmeras implementações compatíveis independentes, e executa em todos os lugares desde PCs até iPads.</p> + +<p>Com Emscripten, desenvolvedores C/C++ não tem o alto custo de portar código manualmente para JavaScript — ou de precisar aprender JavaScript. Desenvolvedores Web também se beneficiam, pois podem utilizar em seus sites as milhares de utilizadades e bibliotecas nativas pré-existentes.</p> + +<p>Praticamente qualquer base de código de C or C++ pode ser compilada para JavaScript utilizando Emscripten, variando de jogos de alta performance que precisam renderizar gráficos, tocar sons, carregar e processar arquivos, até frameworks de aplicativos como Qt.</p> + +<p>O Emscripten gera código veloz — seu formato de saída padrão é <a href="/en-US/docs/Games/Tools/asm.js">asm.js</a> , um subset de JavaScript altamente otimizado que pode ser executado em velocidade quase nativa em muitos casos.</p> + +<div class="note"> +<p><strong>Nota</strong>: Parece interessante? <a href="http://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html">Leia mais sobre Emscripten e experimente alguns demos</a>, e depois <a href="http://kripken.github.io/emscripten-site/docs/getting_started/index.html">comece a utilizá-lo</a>.</p> +</div> + +<h2 id="Outros_artigos_interessantes_no_MDN">Outros artigos interessantes no MDN</h2> + +<ul> + <li>Nossa área de <a href="/en-US/docs/Games">Desenvolvimento de jogos</a> contém algum conteúdo útil relacionado a jogos, que é uma área de uso comum do Emscripten.</li> + <li>Nossa página <a href="/en-US/docs/Mozilla/Projects/Emscripten/Techniques">Emscripten techniques</a> é um lugar para guardar ideias úteis relacionadas ao Emscripten que não tenham chegado ao Emscripten Wiki.</li> +</ul> diff --git a/files/pt-br/mozilla/projects/index.html b/files/pt-br/mozilla/projects/index.html new file mode 100644 index 0000000000..4cc2b6f23c --- /dev/null +++ b/files/pt-br/mozilla/projects/index.html @@ -0,0 +1,15 @@ +--- +title: Projetos +slug: Mozilla/Projects +tags: + - Mozilla + - Necessidades de Conteúdo + - Projetos + - Tópico Raiz +translation_of: Mozilla/Projects +--- +<p>{{ draft() }}</p> + +<p>Está página precisa tornar-se um índice para os projetos Mozilla por causa da documentação está localizada sobre ela.</p> + +<p>{{ LandingPageListSubpages() }}</p> diff --git a/files/pt-br/mozilla/projects/nss/compilando/index.html b/files/pt-br/mozilla/projects/nss/compilando/index.html new file mode 100644 index 0000000000..92e3619f2c --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/compilando/index.html @@ -0,0 +1,98 @@ +--- +title: Compilando o NSS +slug: Mozilla/Projects/NSS/Compilando +tags: + - Guía + - NSS + - Segurança +translation_of: Mozilla/Projects/NSS/Building +--- +<h2 id="Introdução">Introdução</h2> + +<p>Essa página possui informações detalhadas sobre como compilar o NSS. Porque o NSS é uma biblioteca multiplataforma que compila em muitas plataformas diferentes e possui muitas opções, pode ser complexo compilá-lo. Por favor, leia essas instruções com cuidado antes de tentar compilar.</p> + +<h2 id="Ambiente_de_compilação">Ambiente de compilação</h2> + +<h3 id="Windows">Windows</h3> + +<ol> + <li>Obtenha os pré-requisitos + <ul> + <li>Compilação do NSS no Windows usa o mesmo sistema de compilação compartilhado que o Mozilla Firefox. Você deve primeiro instalar os <a href="/en-US/docs/Developer_Guide/Build_Instructions/Windows_Prerequisites">Pré-requisitos do Windows</a>, incluindo <strong>MozillaBuild</strong>.</li> + </ul> + </li> +</ol> + +<h2 id="Obtenha_o_fonte">Obtenha o fonte</h2> + +<p>NSS e NSPR usam Mercurial para controle de fonte, como outros projetos da Mozilla. Para obter os últimos fontes para NSS e NSPR - o que pode não ser parte de um lançamento estável - use os seguintes comandos:</p> + +<pre>hg clone https://hg.mozilla.org/projects/nspr +hg clone https://hg.mozilla.org/projects/nss +</pre> + +<p>Para obter o fonte de um lançamento específico, veja <a href="/en-US/docs/Mozilla/Projects/NSS/NSS_Releases">Lançamentos do NSS</a>.</p> + +<h3 id="Configure_o_ambiente">Configure o ambiente</h3> + +<p>O sistema de ompilação do NSS usa uma variedade de variáveis de ambiente para controlar a compilação. Segue abaixo uma lista de variáveis, junto com valores possívels que elas pode receber. Por exemplo, no Windows, você pode querer definir <strong>OS_TARGET=WIN95.</strong></p> + +<dl> + <dt>OS_TARGET</dt> + <dd> + <dl> + <dt>WIN95</dt> + <dd>Compila para todas as versões suportadas do Windows. Esse é o padrão (desde NSS 3.15.4) e é a configuração recomendada.</dd> + <dt>WINNT (obsoleto)</dt> + <dd>Uma configuração alternativa, à qual não há mais suporte. (Ela usa recursos especificais como a API de fibras do Windows.)</dd> + </dl> + </dd> + <dt>BUILD_OPT</dt> + <dd> + <dl> + <dt>0</dt> + <dd>Compila uma versão de depuração (não otimizada) do NSS. <em>Essa é a padrão.</em></dd> + <dt>1</dt> + <dd>Compila uma versão otimizada (não depuração) do NSS.</dd> + </dl> + </dd> + <dt>USE_64</dt> + <dd> + <dl> + <dt>0</dt> + <dd>Compila para uma ABI/um ambiente 32 bits. <em>Esse é o padrão.</em></dd> + <dt>1</dt> + <dd>Compila para um ABI/um ambiente 64 bits.</dd> + </dl> + </dd> + <dt>USE_ASAN</dt> + <dd> + <dl> + <dt>0</dt> + <dd>Não cria uma compilação de <a href="http://clang.llvm.org/docs/AddressSanitizer.html">AddressSanitizer</a>. <em>Esse é o padrão.</em></dd> + <dt>1</dt> + <dd>Cria uma compilação de AddressSanitizer.</dd> + </dl> + </dd> +</dl> + +<h2 id="Compilação">Compilação</h2> + +<p>Para criar o NSS, é tão simples quanto navegar para o check-out do NSS e fazer o alvo "nss_build_all".</p> + +<pre>cd nss +make nss_build_all +</pre> + +<h2 id="Teste_de_unidade">Teste de unidade</h2> + +<p>NSS contendo testes de unidade extensivos. Scripts para executá-los são executados no diretório <code>tests</code>. Execute a suíte padrão por:</p> + +<pre>cd nss/tests +HOST=localhost DOMSUF=localdomain ./all.sh</pre> + +<p>Substitua <code>localhost</code> e <code>localdomain</code> com o nome do host e sufixo de domínio para o seu host (os testes apenas transformam estes em "$HOST.$DOMSUF"). Se você não possui um sufixo de domínio e estiver no Windows, adicione esta linha a c:\Windows\System32\drivers\etc\hosts : <code>127.0.0.1 localhost.localdomain</code> . Valide abrindo um shell de comando e digitando: <code>ping localhost.localdomain </code>. </p> + +<p>A saída do teste é armazenada em <code>tests_results/security/$HOST.$NUMBER/</code>. O arquivo <code>results.html</code> resumo os resultados, <code>output.log</code> captura toda a saída de teste.</p> + +<p>Outros subdiretórios do <code>nss/tests</code> contêm scripts para executar um subconjunto da suíte completa.</p> diff --git a/files/pt-br/mozilla/projects/nss/geral/index.html b/files/pt-br/mozilla/projects/nss/geral/index.html new file mode 100644 index 0000000000..a51a109715 --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/geral/index.html @@ -0,0 +1,73 @@ +--- +title: Visão geral do NSS +slug: Mozilla/Projects/NSS/Geral +tags: + - NSS +translation_of: Mozilla/Projects/NSS/Overview +--- +<h1 id="Bibliotecas_de_Criptografia_de_Código_Aberto"><span class="tlid-translation translation" lang="pt"><span title="">Bibliotecas de Criptografia de Código Aberto</span></span></h1> + +<h3 id="Proven_Application_Security_Architecture" name="Proven_Application_Security_Architecture"><span class="tlid-translation translation" lang="pt"><span title="">Arquitetura de Segurança de Aplicativos Comprovada</span></span></h3> + +<p>Se você quer adicionar suporte para SSL, S/MIME, ou outros padrões de segurança de Internet na sua aplicação, você pode usar Network Security Services (NSS) para implementar todos os seus recursos de segurança. NSS provê uma implementação completa de código aberto das bibliotecas de criptogragia usadas pela AOL, Red Hat, Google e outras empresas em uma variedade de produtos, incluindo os seguintes:</p> + +<ul> + <li><a class="external" href="https://www.mozilla.org/products/">Produtos Mozilla</a>, incluindo <a class="external" href="https://www.mozilla.com/firefox/">Firefox</a>, <a class="external" href="https://www.mozilla.com/thunderbird/">Thunderbird</a>, <a href="https://seamonkey-project.org/">SeaMonkey</a>, e <a href="https://www.mozilla.org/en-US/firefox/os/">Firefox OS</a>.</li> + <li><a class="external" href="https://www.aim.com/">AOL Instant Messenger</a> (AIM)</li> + <li>Aplicativos clientes de código aberto como <a class="external" href="https://wiki.gnome.org/Apps/Evolution">Evolution</a>, <a href="https://pidgin.im/">Pidgin</a>, <a href="https://www.openoffice.org/">Apache OpenOffice</a>, e <a href="https://www.libreoffice.org">LibreOffice</a>.</li> + <li>Produtos para servidores da <a class="external" href="https://www.redhat.com/en/technologies">Red Hat</a>: <a class="external" href="https://www.redhat.com/en/technologies/cloud-computing/directory-server">Red Hat Directory Server</a>, <a class="external" href="https://www.redhat.com/en/technologies/cloud-computing/certificate-system">Red Hat Certificate System</a>, e o módulo SSL <a class="external" href="https://directory.fedoraproject.org/wiki/Mod_nss">mod_nss</a> para o servidor web Apache.</li> + <li>Produtos para servidores da Oracle (antiga Sun Java Enterprise System), incluindo <a href="https://www.oracle.com/industries/communications/enterprise/products/messaging-server/index.html">Oracle Communications Messaging Server</a> e <a href="http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index-085178.html">Oracle Directory Server Enterprise Edition</a>.</li> + <li><a href="https://www.suse.com/products/server/">SUSE Linux Enterprise Server</a> suporta NSS e o módulo SSL <a class="external" href="https://directory.fedoraproject.org/wiki/Mod_nss">mod_nss</a> para o servidor web Apache.</li> +</ul> + +<p>NSS inclui um framework no qual desenvolvedores e <span class="ILfuVd">OEMs (Fabricante Original do Equipamento) podem contribuir com correções, </span><span class="tlid-translation translation" lang="pt"><span title="">como código assembler, para otimizar o desempenho em suas plataformas. NSS 3.x foi certificado em 18 plataformas.</span></span></p> + +<p>Para informações mais detalhadas sobre NSS, veja <a class="external" href="https://wiki.mozilla.org/NSS">wiki.mozilla.org</a> e <a href="NSS_FAQ">NSS FAQ</a>.</p> + +<p>Código-fonte de uma interface Java para NSS está disponível na árvore CVS da Mozilla. Para detalhes, veja <a class="external" href="JSS">Network Security Services for Java</a>.</p> + +<p>NSS faz uso do Netscape Portable Runtime (<a href="/en-US/docs/Mozilla/Projects/NSPR">NSPR</a>), <span class="tlid-translation translation" lang="pt"><span title="">uma API de código aberto de plataforma neutra para funções do sistema projetada para facilitar o desenvolvimento entre plataformas</span></span>. Assim como NSS, NSPR foi testado em vários produtos. Para maiores informações, veja a <a class="external" href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSPR">Página do Projeto NSPR</a>.</p> + +<h3 id="Interoperability_and_Open_Standards" name="Interoperability_and_Open_Standards"><span class="tlid-translation translation" lang="pt"><span title="">Interoperabilidade e Padrões Abertos</span></span></h3> + +<p>Você pode usar NSS para suportar uma variedade de padrões de segurança na sua aplicação, incluindo os seguintes:</p> + +<ul> + <li><a href="en/Glossary#SSL">SSL v3</a>. O protocolo Secure Sockets Layer (SSL) permite uma autenticação mútua entre cliente e servidor e o estabelecimento de uma conexão autenticada e criptografada.</li> + <li>TLS v1.3 (<a href="https://tools.ietf.org/html/rfc8446">RFC 8446</a>), <a href="https://tools.ietf.org/html/rfc5246">TLS v1.2 (RFC 5246</a>), <a href="https://tools.ietf.org/html/rfc4346">TLS v1.1 (RFC 4346</a>), <a class="external" href="https://www.ietf.org/rfc/rfc2246.txt">TLS v1 (</a><a class="external" href="https://tools.ietf.org/html/rfc2246" title="https://tools.ietf.org/html/rfc2246">RFC 2246</a>). O protocolo Transport Layer Security (TLS) do IETF que substitui SSL.</li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-1/index.html">PKCS #1</a>. Padrão RSA <span class="tlid-translation translation" lang="pt"><span title="">que rege a implementação de criptografia de chave pública com base no algoritmo RSA.</span></span></li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-3/index.html">PKCS #3</a>. <span class="tlid-translation translation" lang="pt"><span title="">Padrão RSA que rege a implementação do acordo de chave Diffie-Hellman.</span></span></li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-5/index.html">PKCS #5</a>. <span class="tlid-translation translation" lang="pt"><span title="">Padrão RSA que rege a criptografia baseada em senha, por exemplo, para criptografar chaves privadas para armazenamento.</span></span></li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-7/index.html">PKCS #7</a>. <span class="tlid-translation translation" lang="pt"><span title="">Padrão RSA que rege a aplicação de criptografia a dados, por exemplo, assinaturas digitais e envelopes digitais.</span></span></li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-8/index.html">PKCS #8</a>. <span class="tlid-translation translation" lang="pt"><span title="">Padrão RSA que rege o armazenamento e a criptografia de chaves privadas.</span></span></li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-9/index.html">PKCS #9</a>. <span class="tlid-translation translation" lang="pt"><span title="">Padrão RSA que rege os tipos de atributos selecionados, incluindo aqueles usados com </span></span>PKCS #7, PKCS #8, e PKCS #10.</li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-10/index.html">PKCS #10</a>. <span class="tlid-translation translation" lang="pt"><span title="">Padrão RSA que rege a sintaxe para solicitações de certificado.</span></span></li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-11/index.html">PKCS #11</a>. <span class="tlid-translation translation" lang="pt"><span title="">Padrão RSA que controla a comunicação com tokens criptográficos (como aceleradores de hardware e cartões inteligentes) e permite a independência do aplicativo de algoritmos e implementações específicas.</span></span></li> + <li><a class="external" href="https://www.rsasecurity.com/rsalabs/pkcs/pkcs-12/index.html">PKCS #12</a>.<span class="tlid-translation translation" lang="pt"><span title=""> Padrão RSA que rege o formato usado para armazenar ou transportar chaves privadas, certificados e outros materiais secretos.</span></span></li> + <li><a href="en/Glossary#S.2FMIME">S/MIME (RFC 2311 and RFC 2633)</a>. <span class="tlid-translation translation" lang="pt"><span title="">Especificação de mensagem IETF (baseada no popular padrão Internet MIME) que fornece uma maneira consistente de enviar e receber dados MIME assinados e criptografados.</span></span></li> + <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Security/x509_Certificates">X.509 v3</a>. <span class="tlid-translation translation" lang="pt"><span title="">Padrão ITU que rege o formato de certificados usados para autenticação em criptografia de chave pública.</span></span></li> + <li><a href="en/Glossary#OCSP">OCSP (RFC 2560)</a>. O Online Certificate Status Protocol (OCSP) rege<span class="tlid-translation translation" lang="pt"><span title=""> a confirmação em tempo real da validade do certificado.</span></span></li> + <li><a class="external" href="https://www.ietf.org/rfc/rfc3280.txt">PKIX Certificate and CRL Profile (</a><a class="external" href="https://tools.ietf.org/html/rfc3280" title="https://tools.ietf.org/html/rfc3280">RFC 3280</a>). <span class="tlid-translation translation" lang="pt"><span title="">A primeira parte do padrão de quatro partes em desenvolvimento pelo grupo de trabalho Public-Key Infrastructure (X.509) da IETF (conhecido no PKIX) para uma infraestrutura de chave pública para a Internet.</span></span></li> + <li>RSA, DSA, ECDSA, Diffie-Hellman, EC Diffie-Hellman, <a class="external" href="https://csrc.nist.gov/encryption/aes/">AES</a>, Triple DES, DES, RC2, RC4, SHA-1, SHA-256, SHA-384, SHA-512, MD2, MD5, HMAC: <span class="tlid-translation translation" lang="pt"><span title="">Algoritmos criptográficos comuns usados em criptografia de chave pública e de chave simétrica.</span></span></li> + <li>FIPS 186-2 <span class="tlid-translation translation" lang="pt"><span title="">gerador de números pseudo-aleatórios.</span></span></li> +</ul> + +<p>Para detalhes completos, veja <a class="external" href="https://www.mozilla.org/projects/security/pki/nss/nss-3.11/nss-3.11-algorithms.html">Tecnologias de Criptografia</a>.</p> + +<h3 id="FIPS_140_Validation_and_NISCC_Testing" name="FIPS_140_Validation_and_NISCC_Testing">Validação FIPS 140 e Teste NISCC</h3> + +<p><span class="tlid-translation translation" lang="pt"><span title="">O módulo de criptografia do software NSS foi validado três vezes para conformidade com o FIPS 140 nos Níveis de Segurança 1 e</span></span> 2. Para mais informações, veja a página <a href="FIPS_Mode_-_an_explanation">NSS FIPS</a> (<a class="external" href="https://wiki.mozilla.org/FIPS_Validation">Ou essa página</a>).</p> + +<p>As bibliotecas NSS passaram nas suites de testes NISCC <a class="external" href="https://www.niscc.gov.uk/niscc/docs/re-20030930-00749.pdf?lang=en">TLS/SSL</a> e <a class="external" href="https://www.uniras.gov.uk/niscc/docs/re-20031104-00752.pdf?lang=en">S/MIME</a> (<span class="tlid-translation translation" lang="pt"><span title="">1,6 milhão de casos de teste com dados de entrada inválidos</span></span>).</p> + +<h3 id="Complete_Software_Development_Kit" name="Complete_Software_Development_Kit"><span class="tlid-translation translation" lang="pt"><span title="">Kit Completo de Desenvolvimento de Software</span></span></h3> + +<p><span class="tlid-translation translation" lang="pt"><span title="">Além de bibliotecas e APIs, o NSS fornece</span></span> <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/Tools">ferramentas de segurança</a> <span class="tlid-translation translation" lang="pt"><span title="">necessárias para depuração, diagnósticos, gerenciamento de certificados e chaves, gerenciamento de módulos de criptografia e outras tarefas de desenvolvimento.</span></span></p> + +<p><span class="tlid-translation translation" lang="pt"><span title="">NSS vem com um extenso e crescente conjunto de</span></span><a href="/docs/Mozilla/Projects/NSS#Documentation"> documentação</a>, incluindo material introdutório, referências de API, páginas man para ferramentas CLI, e <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/NSS_Sample_Code">códigos de exemplo</a>.</p> + +<p>NSS está disponível como código e bibliotecas (dinâmicas) compartilhadas. <span class="tlid-translation translation" lang="pt"><span title="">Cada versão do NSS é compatível com versões anteriores, permitindo que os usuários do NSS atualizem para as novas bibliotecas compartilhadas do NSS sem recompilar ou reconectar seus aplicativos.</span></span></p> + +<h3 id="Open-Source_Licensing_and_Distribution" name="Open-Source_Licensing_and_Distribution"><span class="tlid-translation translation" lang="pt"><span title="">Licenciamento e Distribuição de Código Aberto</span></span></h3> + +<p>NSS está disponível sob a <a href="https://www.mozilla.org/MPL/">Licença Pública Mozilla</a>, versão 2. <span class="tlid-translation translation" lang="pt"><span title="">O código-fonte mais recente está disponível gratuitamente em todo o mundo a partir de</span></span> <a class="external" href="https://www.mozilla.org" rel="freelink">https://www.mozilla.org</a> <span class="tlid-translation translation" lang="pt"><span title="">e seus sites espelhados (mirrors).</span></span></p> diff --git a/files/pt-br/mozilla/projects/nss/getting_started_with_nss/index.html b/files/pt-br/mozilla/projects/nss/getting_started_with_nss/index.html new file mode 100644 index 0000000000..9096118265 --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/getting_started_with_nss/index.html @@ -0,0 +1,42 @@ +--- +title: Getting Started With NSS +slug: Mozilla/Projects/NSS/Getting_started_with_NSS +translation_of: Mozilla/Projects/NSS/Getting_started_with_NSS +--- +<h2 id="Como_se_envolver_com_o_NSS">Como se envolver com o NSS</h2> + +<p>NSS (Serviços de segurança de rede) É uma biblioteca base para algoritmos criptográficos e protocolos de rede seguros usados pelo software Mozilla.<br> + <br> + Você gostaria de se envolver e nos ajudar a melhorar a segurança básica do Mozilla Firefox e de outras aplicações que utilizam o NSS? Estamos ansiosos por suas contribuições!<br> + <br> + Nós temos uma grande lista de tarefas à espera de atenção, e estamos felizes em ajudá-lo a identificar áreas que correspondam ao seu interesse ou habilidades. Você pode encontrar-nos em <a href="http://irc.mozilla.org" title="http://irc.mozilla.org">irc.mozilla.org</a> no canal <a href="irc://irc.mozilla.org/#nss" title="irc://irc.mozilla.org/nss">#nss</a> ou você poderia fazer suas perguntas no grupo de notícias <a href="https://lists.mozilla.org/listinfo/dev-tech-crypto/" title="https://lists.mozilla.org/listinfo/dev-tech-crypto/">mozilla.dev.tech.crypto</a>.</p> + +<p>A biblioteca NSS e suas ferramentas de linha de comando de suporte são escritas na linguagem de programação C. Seu sistema de compilação e os testes automatizados são baseados em makefiles e scripts bash.</p> + +<p>Ao longo do tempo, muitos documentos foram produzidos que descrevem vários aspectos do NSS. Você pode começar com:</p> + +<ul> + <li>a <a href="/en-US/docs/NSS" title="/en-US/docs/NSS">página principal de documentação NSS</a> atual a partir da qual nós linkamos para outra documentação.</li> + <li>uma <a href="/en-US/docs/Overview_of_NSS" title="/en-US/docs/Overview_of_NSS">Visão Geral</a> das aplicações que usam o NSS e os recursos que ele fornece.</li> + <li>Uma <a href="/en-US/docs/An_overview_of_NSS_Internals" title="/en-US/docs/An_overview_of_NSS_Internals">Introdução</a> de alto nível para o Internals do NSS.</li> + <li>Aprender sobre como obter os<a href="/en-US/docs/NSS_Sources_Building_Testing" title="/en-US/docs/NSS_Sources_Building_Testing"> codigos-fonte, builds e testes do NSS.</a></li> + <li><a href="http://www-archive.mozilla.org/projects/security/pki/nss/">Documentação antiga </a>que está arquivada no site mozilla.org..</li> +</ul> + +<p>(Infelizmente, o projeto NSS não tem um escritor técnico neste momento, então nossa documentação não é tão organizada como gostaríamos que fosse. Você poderia contribuir organizando-a de uma maneira melhor.)</p> + +<h2 id="Amostra_de_código_do_NSS">Amostra de código do NSS</h2> + +<p>Um bom lugar para começar a aprender a escrever aplicativos NSS são as ferramentas de linha de comando mantidas pelos desenvolvedores do NSS. Você pode encontrá-los no subdiretório mozilla/security/nss/cmd</p> + +<p>Ou dê uma olhada em algum <a href="/docs/Mozilla/Projects/NSS/NSS_Sample_Code">código de amostra NSS </a>básico.</p> + +<p>Um novo conjunto de amostras está atualmente em desenvolvimento e revisão, consulte <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=490238">Criar novas amostras NSS</a>.</p> + +<p>Você é bem-vindo para baixar as amostras via: hg clone https://hg.mozilla.org/projects/nss; cd nss; hg update SAMPLES_BRANCH</p> + +<h2 id="Oportunidades_para_contribuir">Oportunidades para contribuir:</h2> + +<p>... (esta seção ainda está em construção, mas há muitas oportunidades de contribuição)</p> + +<p>Você pode dar uma olhada na nossa <a href="https://wiki.mozilla.org/NSS:BurnDownList" title="https://wiki.mozilla.org/NSS:BurnDownList">recente lista ToDo</a>.</p> diff --git a/files/pt-br/mozilla/projects/nss/index.html b/files/pt-br/mozilla/projects/nss/index.html new file mode 100644 index 0000000000..22e30aeb88 --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/index.html @@ -0,0 +1,184 @@ +--- +title: Network Security Services +slug: Mozilla/Projects/NSS +tags: + - JSS + - NSS + - NeedsMigration +translation_of: Mozilla/Projects/NSS +--- +<p><strong>Network Security Services</strong> (<strong>NSS</strong>), ou serviços de segurança de rede, é um conjunto de bibliotecas projetadas para oferecer suporte ao desenvolvimento multiplataforma de aplicativos cliente e servidor com implementações de segurança. Aplicativos compilados com NSS possuem suporte a certificados SSL v2 e v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 e outros padrões de segurança.</p> + +<p>Para informações detalhadas sobre os padrões aos quais se oferece suporte, veja <a href="NSS/Overview" title="Overview_of_NSS">Visão Geral do NSS</a>. Para uma lista de perguntas frequentes, veja o <a href="NSS/FAQ" title="NSS_FAQ">FAQ</a>.</p> + +<p>NSS está disponível sob a Licença Pública da Mozilla. Para informações sobre baixar lançamentos do NSS como arquivos tar, veja <a href="NSS/NSS_Sources_Building_Testing">Baixando fontes PKI</a>.</p> + +<p>Se você é um desenvolvedor e gostaria de contribuir para NSS, você pode ler os documentos <a href="NSS/An_overview_of_NSS_Internals" title="/en-US/docs/An_overview_of_NSS_Internals">visão geral de alto nível de detalhes internos do NSS</a> e <a href="NSS/Getting_started_with_NSS" title="/en-US/docs/Getting_Started_With_NSS">primeiros passos com NSS</a>.</p> + +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 class="Documentation" id="Documentation" name="Documentation">Documentação</h2> + + <h3 id="Informação_base">Informação base</h3> + + <dl> + <dt><a href="NSS/Overview">Visão geral do NSS</a></dt> + <dd>Fornece um breve resumo do NSS e suas capacidades.</dd> + <dt><a href="NSS/FAQ">FAQ do NSS</a></dt> + <dd>Responde algumas perguntas básicas sobre o NSS.</dd> + <dt><a href="/docs/Introduction_to_Public-Key_Cryptography">Introdução à Criptografia de Chave pública</a></dt> + <dd>Explica os conceitos básicos de criptografia de chave pública por baixo do NSS.</dd> + <dt><a href="/docs/Introduction_to_SSL">Introdução ao SSL</a></dt> + <dd>Introduz o protocolo SSL, incluindo informações sobre as cifras criptográficas às quais SSL oferecer suporte, e os passos envolvidos na negociação SSL.</dd> + </dl> + + <h3 id="Primeiros_passos">Primeiros passos</h3> + + <dl> + <dt><a href="NSS/NSS_Releases" title="NSS_releases">Lançamentos do NSS</a></dt> + <dd>Essa página contém informações sobre os lançamentos passados e atual do NSS.</dd> + <dt><a href="NSS/NSS_Sources_Building_Testing">Obtendo o código-fonte e compilando-o</a></dt> + <dd>Instruções e como compilar NSS em diferentes plataformas.</dd> + <dt><a href="/docs/Mozilla/Developer_guide/Source_Code/Mercurial">Obtendo o código-fonte da Mozilla usando o Mercurial</a></dt> + <dd>Informações sobre usar o Mercurial.</dd> + <dt><a href="/docs/Mozilla/Developer_guide/Source_Code/CVS">Obtendo o código-fonte da Mozilla usando o CVS (obsoleto)</a></dt> + <dd>Documentação antiga e obsoleta sobre CVS.</dd> + </dl> + + <h3 id="APIs_do_NSS">APIs do NSS</h3> + + <dl> + <dt><a href="NSS/Introduction_to_Network_Security_Services">Introdução ao Network Security Services</a></dt> + <dd>Fornece uma visão geral das bibliotecas do NSS e o que você precisa saber para usá-las.</dd> + <dt><a href="NSS/SSL_functions">Funções Públicas do NSS</a></dt> + <dd>Resume as APIs exportadas pelas bibliotecas compartilhadas do NSS.</dd> + <dt><a href="NSS/Reference">Referência do NSS</a></dt> + <dd>API usada para invocar as operações SSL.</dd> + <dt><a href="NSS/NSS_API_GUIDELINES">Diretrizes de API do NSS</a></dt> + <dd>Explica como as bibliotecas e códigos são organizados, e diretrizes para o desenvolvimento de código (convenção de nomenclatura, tratamento de erro, segurança de threads, etc.)</dd> + <dt><a href="NSS/nss_tech_notes">Notas Técnicas do NSS</a></dt> + <dd>Link para as notas técnicas do NSS, as quais fornecem as últimas informações sobre os novos recursos do NSS e documentação suplementar para tópicos avançados quanto a programação com NSS.</dd> + </dl> + + <h3 id="Ferramentas_testes_e_outros_detalhes_técnicos">Ferramentas, testes e outros detalhes técnicos</h3> + + <dl> + <dt><a href="NSS/NSS_Sources_Building_Testing">Instruções de Compilação do NSS</a></dt> + <dd>Descreve como obter e compilar lançamentos do NSS.</dd> + </dl> + + <dl> + <dt><a href="NSS/NSS_Developer_Tutorial">Tutorial do Desenvolvedor do NSS</a></dt> + <dd>Como fazer alterações no NSS. Estilo de codificação, manutenção de compatibilidade da ABI.</dd> + </dl> + + <dl> + <dt><a href="NSS/Tools">Ferramentas de Segurança do NSS</a></dt> + <dd>Ferramentas para desenvolvimento, depuração e manutenção de aplicativos que usam NSS.</dd> + <dt><a href="NSS/NSS_Sample_Code">Exemplo de Código</a></dt> + <dd>Demonstra como o NSS pode ser usado para operações criptográficas, tratamento de certificados, SSL, etc.</dd> + <dt><a href="http://www-archive.mozilla.org/projects/security/pki/nss/testnss_32.html">Suíte de Teste do NSS 3.2</a></dt> + <dd><strong>Versão arquivada.</strong> Descreve como executar os testes padrões do NSS.</dd> + <dt><a href="http://www-archive.mozilla.org/projects/security/pki/nss/performance_reports.html">Relatórios de desempenho do NSS</a></dt> + <dd><strong>Versão arquivada.</strong> Links para relatórios de desempenho para NSS 3.2 e lançamentos posteriores.</dd> + <dt><a href="http://www-archive.mozilla.org/projects/security/pki/nss/nss-3.11/nss-3.11-algorithms.html">Tecnologias de Criptografia Disponíveis no NSS 3.11</a></dt> + <dd><strong>Versão arquivada.</strong> List os algoritmos criptográficos usados pelo NSS 3.11.</dd> + <dt><a href="http://www-archive.mozilla.org/projects/security/pki/nss/loadable_certs.html">Certificados Raízes Carregáveis pelo NSS 3.1</a></dt> + <dd><strong>Versão arquivada.</strong> Descreve o esquema para carregar certificados raízes de AC.</dd> + <dt><a href="http://www-archive.mozilla.org/projects/security/pki/nss/db_formats.html">cert7.db</a></dt> + <dd><strong>Versão arquivada.</strong> Formato geral do banco de dados cert7.db.</dd> + </dl> + + <h3 id="Informação_do_PKCS_11">Informação do PKCS #11</h3> + + <ul> + <li><a href="NSS/PKCS11" title="PKCS11">Documentação sobre módulos PKCS #11</a></li> + <li><a href="NSS/PKCS11_Implement">Implementando PKCS #11 para NSS</a></li> + <li><a href="NSS/PKCS11/Module_Specs" title="PKCS11_Module_Specs">As strings que o NSS usa para carregar módulos PKCS #11</a></li> + <li><a href="NSS/PKCS11/FAQ">FAQ do PKCS #11</a></li> + <li><a href="NSS/PKCS11/Module_Installation">Usando o Gerenciador de Instalação de JAR para Instalar um Módulo Criptográfico PKCS #11</a></li> + <li><a href="http://www-archive.mozilla.org/projects/security/pki/pkcs11/">Teste de Conformidade com PKCS #11 - Versão arquivada</a></li> + </ul> + + <dl> + </dl> + + <h3 id="Certificados_de_AC_pré-carregados_no_NSS">Certificados de AC pré-carregados no NSS</h3> + + <ul> + <li><a href="http://www.mozilla.org/projects/security/certs/policy/">Política de certificado AC da Mozilla</a></li> + <li><a href="http://www.mozilla.org/projects/security/certs/included/">Lista de certificados AC pré-carregados</a> + <ul> + <li>Usuários desta lista devem considerar a configuração do bit de confiança para cada certificado raiz incluído. <a href="https://www.imperialviolet.org/2012/01/30/mozillaroots.html">Mais informações</a>, <a href="https://github.com/agl/extract-nss-root-certs">Extraindo raízes e seus bits de confiança</a></li> + </ul> + </li> + </ul> + + <dl> + </dl> + + <h3 id="NSS_é_construído_em_cima_da_Netscape_Portable_Runtime_(NSPR)">NSS é construído em cima da Netscape Portable Runtime (NSPR)</h3> + + <dl> + <dt><a href="NSPR">Netscape Portable Runtime</a></dt> + <dd>Página do projeto NSPR.</dd> + <dt><a href="/en-US/docs/Mozilla/Projects/NSPR/Reference">Referência do NSPR</a></dt> + <dd>Documentação da API do NSPR.</dd> + </dl> + + <h3 id="Informações_adicionais">Informações adicionais</h3> + + <ul> + <li><a href="/en-US/docs/JavaScript_crypto" title="JavaScript_crypto">Usando o objeto window.crypto do JavaScript</a></li> + <li><a href="NSS/HTTP_delegation" title="HTTP_Delegation">Delegação do download HTTP para OCSP</a></li> + <li><a href="NSS/TLS_Cipher_Suite_Discovery" title="TLS_Cipher_Suite_Discovery">TLS Cipher Suite Discovery</a></li> + <li><a href="NSS/Certificate_Download_Specification" title="NSS_Certificate_Download_Specification">Especificação de Download de Certificado do NSS</a></li> + <li><a href="NSS/FIPS_Mode_-_an_explanation" title="FIPS Mode - an explanation">Modo FIPS - uma explicação</a></li> + <li><a href="NSS/Key_Log_Format" title="NSS Key Log Format">Formato de arquivos de registro log de chaves</a></li> + <li>Veja <a href="en_US/docs/tag/NSS" title="/en-US/docs/tag/NSS">todos os artigos em inglês relacionados ao NSS no MDN</a> (e em <a href="/docs/tag/NSS">português</a>)</li> + </ul> + + <h3 id="Teste">Teste</h3> + + <ul> + <li><a href="/en-US/docs/Testing_third-party_PKCS#11_modules.2Ftokens_with_NSS" title="Testing_third-party_PKCS#11_modules.2Ftokens_with_NSS">Testando módulos/tokens PKCS #11 de terceiros com NSS</a></li> + </ul> + + <h3 id="Planejamento">Planejamento</h3> + + <p>Informações sobre o planejamento do NSS podem ser encontradas em <a class="external" href="http://wiki.mozilla.org/NSS">wiki.mozilla.org</a>, incluindo:</p> + + <ul> + <li><a class="external" href="http://wiki.mozilla.org/FIPS_Validation">Validação FIPS</a></li> + <li><a class="external" href="http://wiki.mozilla.org/NSS:Roadmap">Página de Roadmap do NSS</a></li> + <li><a href="https://fedoraproject.org/wiki/User:Mitr/NSS:DeveloperFriendliness" title="https://fedoraproject.org/wiki/User:Mitr/NSS:DeveloperFriendliness">Projeto de Melhoria do NSS</a></li> + </ul> + </td> + <td> + <h2 class="Community" id="Community" name="Community">Communidade</h2> + + <ul> + <li>Veja os fóruns da Mozilla Security...</li> + </ul> + + <p>{{ DiscussionList("dev-security", "mozilla.dev.security") }}</p> + + <ul> + <li>Veja os fóruns da Mozilla Cryptography...</li> + </ul> + + <p>{{ DiscussionList("dev-tech-crypto", "mozilla.dev.tech.crypto") }}</p> + + <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Tópicos relacionados</h2> + + <ul> + <li><a href="/docs/Web/Security" title="Security">Segurança</a></li> + </ul> + </td> + </tr> + </tbody> +</table> + +<p> </p> diff --git a/files/pt-br/mozilla/projects/nss/nss_3.16.4_release_notes/index.html b/files/pt-br/mozilla/projects/nss/nss_3.16.4_release_notes/index.html new file mode 100644 index 0000000000..5873639121 --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/nss_3.16.4_release_notes/index.html @@ -0,0 +1,32 @@ +--- +title: NSS 3.16.4 release notes +slug: Mozilla/Projects/NSS/NSS_3.16.4_release_notes +translation_of: Mozilla/Projects/NSS/NSS_3.16.4_release_notes +--- +<h2 id="Introdrução">Introdrução</h2> +<p>Network Security Services (NSS) 3.16.4 is a patch release for NSS 3.16. The bug fixes in NSS 3.16.4 are described in the "Bugs Fixed" section below.</p> +<h2 id="Distribution_Information">Distribution Information</h2> +<p>The HG tag is NSS_3_16_4_RTM. NSS 3.16.4 requires NSPR 4.10.6 or newer.</p> +<p>NSS 3.16.4 source distributions are available on ftp.mozilla.org for secure HTTPS download:</p> +<ul> + <li>Source tarballs:<br> + <a href="https://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_16_4_RTM/src/">https://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_16_4_RTM/src/</a></li> +</ul> +<h2 id="New_in_NSS_3.16.4">New in NSS 3.16.4</h2> +<p>This release consists primarily of CA certificate changes as listed below, and includes a small number of bug fixes.</p> +<h2 id="Notable_Changes_in_NSS_3.16.4">Notable Changes in NSS 3.16.4</h2> +<ul> + <li>The following <strong>1024-bit</strong> root CA certificate was <strong>restored</strong> to allow more time to develop a better transition strategy for affected sites. It was removed in <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_3.16.3_release_notes">NSS 3.16.3</a>, but discussion in the mozilla.dev.security.policy forum led to the decision to keep this root included longer in order to give website administrators more time to update their web servers. + <ul> + <li>CN = GTE CyberTrust Global Root + <ul> + <li>SHA1 Fingerprint: 97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74</li> + </ul> + </li> + </ul> + </li> + <li>In <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_3.16.3_release_notes">NSS 3.16.3</a>, the <strong>1024-bit </strong>"Entrust.net Secure Server Certification Authority" root CA certificate (SHA1 Fingerprint: 99:A6:9B:E6:1A:FE:88:6B:4D:2B:82:00:7C:B8:54:FC:31:7E:15:39) was removed. In NSS 3.16.4, a <strong>2048-bit </strong>intermediate CA certificate has been included, without explicit trust. The intention is to mitigate the effects of the previous removal of the 1024-bit Entrust.net root certificate, because many public Internet sites still use the "USERTrust Legacy Secure Server CA" intermediate certificate that is signed by the 1024-bit Entrust.net root certificate. The inclusion of the intermediate certificate is a temporary measure to allow those sites to function, by allowing them to find a trust path to another <strong>2048-bit</strong> root CA certificate. The temporarily included intermediate certificate expires November 1, 2015.</li> +</ul> +<h2 id="Bugs_fixed_in_NSS_3.16.4">Bugs fixed in NSS 3.16.4</h2> +<p>This Bugzilla query returns all the bugs fixed in NSS 3.16.4:</p> +<p><a href="https://bugzilla.mozilla.org/buglist.cgi?resolution=FIXED&classification=Components&query_format=advanced&product=NSS&target_milestone=3.16.4">https://bugzilla.mozilla.org/buglist.cgi?resolution=FIXED&classification=Components&query_format=advanced&product=NSS&target_milestone=3.16.4</a></p> diff --git a/files/pt-br/mozilla/projects/nss/nss_sample_code/index.html b/files/pt-br/mozilla/projects/nss/nss_sample_code/index.html new file mode 100644 index 0000000000..89f7fca802 --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/nss_sample_code/index.html @@ -0,0 +1,26 @@ +--- +title: NSS Sample Code +slug: Mozilla/Projects/NSS/NSS_Sample_Code +tags: + - NSS +translation_of: Mozilla/Projects/NSS/NSS_Sample_Code +--- +<h2 id="Código_NSS">Código NSS</h2> + +<p>As seções seguintes mostram como NSS pode ser utilizada para operações criptográficas, gerenciamento de certificados, SSL, etc. Apresenta também, boas práticas em aplicações de criptografia.</p> + +<ol> + <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/nss_sample_code/NSS_Sample_Code_Sample1">Código fonte 1: Geração de chave e transporte entre servidores</a></li> + <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/nss_sample_code/NSS_Sample_Code_sample2">Código fonte 2: Encriptação simétrica</a></li> + <li><a href="nss_sample_code/NSS_Sample_Code_sample3">Código fonte 3: Hashing, MAC</a></li> + <li><a href="nss_sample_code/NSS_Sample_Code_sample4">Código fonte 4: Encriptação PKI</a></li> + <li><a href="nss_sample_code/NSS_Sample_Code_sample5">Código fonte 5: Encriptação PKI com chave pública private em formato DER</a></li> + <li><a href="nss_sample_code/NSS_Sample_Code_sample6">Código fonte 6: Chaves simétricas persistentes em banco de dados NSS</a></li> +</ol> + +<p><br> + Alguns exemplos muito antigos precisam ser atualizados. Segue o link: https://bugzilla.mozilla.org/show_bug.cgi?id=490238</p> + +<p>Um repositório git temporário com trabalho em andamento</p> + +<pre class="bz_comment_text" id="comment_text_42">git clone git://fedorapeople.org/~emaldonado/samples.git</pre> diff --git a/files/pt-br/mozilla/projects/nss/tools/index.html b/files/pt-br/mozilla/projects/nss/tools/index.html new file mode 100644 index 0000000000..37966e2234 --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/tools/index.html @@ -0,0 +1,100 @@ +--- +title: NSS Tools +slug: Mozilla/Projects/NSS/tools +tags: + - NSS +translation_of: Mozilla/Projects/NSS/tools +--- +<h2 id="NSS_Security_Tools">NSS Security Tools</h2> + +<p>Newsgroup: <a href="news://news.mozilla.org/mozilla.dev.tech.crypto">mozilla.dev.tech.crypto</a></p> + +<h3 id="VISÃO_GERAL">VISÃO GERAL</h3> + +<p>As NSS Security Tools permitem que desenvolvedores testem, depurem e gerenciem aplicações que usem NSS. A tabela <a href="#Tools">Informação das Ferramentas</a> abaixo descreve as ferramentas que estão atualmente funcionando e aquelas que ainda estão em desenvolvimento. Os links para cada ferramenta leva você ao código fonte, documentação, planos e links relacionados para cada ferramenta. Os links ficarão ativos assim que houver informação disponível.</p> + +<p>Atualmente, você deve baixar o fonte e compilá-lo para criar arquivos binários para as ferramentas NSS. Para informação sobre baixar o fonte de NSS, veja <a href="https://developer.mozilla.org/NSS/Building">https://developer.mozilla.org/NSS/Building</a>.</p> + +<p>Se você tiver algum feedback ou perguntas, por favor sinta-se à vontade para postar em<a href="news://news.mozilla.org/mozilla.dev.tech.crypto"> mozilla.dev.tech.crypto</a>. Esse newsgroup é o fórum preferido para todas as questões sobre NSS e as ferramentas NSS.</p> + +<h3 id="Objetivos_Globais">Objetivos Globais</h3> + +<ol> + <li>Prover uma ferramenta para analizar e reparar banco de dados de certificados (<a href="#dbck">dbck</a>).</li> + <li>Migrar ferramentas da interface secutil.h para a interface PKCS #11.</li> + <li>Eliminar funcionalidade redundantes em ferramentas. Muitas ferramentas implementam versões privadas de PKCS11Init(), OpenCertDB(), etc.</li> + <li>Eliminar uso de getopt() e substituir por chamadas NSPR para obter opções de comando (para eliminar dependências de plataforma com getopt()).</li> +</ol> + +<h3 id="Informação_das_Ferramentas"><a name="Tools">Informação das Ferramentas</a></h3> + +<table style="width: 90%;"> + <tbody> + <tr> + <th><strong>Ferramenta</strong></th> + <th><strong>Descrição</strong></th> + <th><strong>Links</strong></th> + </tr> + <tr> + <td><a name="certutil">certutil 2.0</a></td> + <td>Gerenciar banco de dados de certificados e chaves (cert7.db e key3.db).</td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/certutil/">Fonte</a>, <a href="tools/NSS_Tools_certutil">Documentação</a>, <a href="tools/NSS_Tools_certutil-tasks">Tarefas/Planos</a> </font></td> + </tr> + <tr> + <td><a name="cmsutil">cmsutil 1.0</a></td> + <td><font size="-1">Realiza operações básicas de CMS básicas, como criptografar, descriptografar e assinar mensagens</font>.</td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/smimetools/">Fonte</a>, <a href="tools/NSS_Tools_cmsutil">Documentação</a> </font></td> + </tr> + <tr> + <td><a name="crlutil">crlutil</a></td> + <td><font size="-1">Gerenciar listas de revogação de certificados </font>(CRLs).</td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/crlutil/">Fonte</a>, <a href="tools/NSS_Tools_crlutil">Documentação</a>, </font></td> + </tr> + <tr> + <td><a name="dbck">dbck 1.0</a></td> + <td><font size="-1">Analizar e reparar banco de dados de certificados </font>(não funciona em NSS 3.2)</td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/dbck/">Fonte</a>, <a href="tools/NSS_Tools_dbck-tasks">Tarefas/Planos</a> </font></td> + </tr> + <tr> + <td><a name="modutil">modutil 1.1</a></td> + <td><font size="-1">Gerenciar o banco de dados de módulos </font>PKCS11 (secmod.db). Adicionar módulos e modificar as propriedades de módulos existentes (tal como se um módulo é o provedor padrão de algum serviço de criptografia).</td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/modutil/">Fonte</a>, <a href="tools/NSS_Tools_modutil">Documentação</a>, <a href="tools/NSS_Tools_modutil-tasks">Tarefas/Planos</a> </font></td> + </tr> + <tr> + <td><a name="pk12util">pk12util 1.0</a></td> + <td>Importar e exportar chaves e certificados entre os bancos de dados de certificados/chaves e arquivos no formato PKCS12.</td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/pk12util/">Fonte</a>, <a href="tools/NSS_Tools_pk12util">Documentação</a>, <a href="tools/NSS_Tools_pk12util-tasks">Tarefas/Planos</a> </font></td> + </tr> + <tr> + <td><a name="signtool">signtool 1.3</a></td> + <td><font size="-1">Criar arquivos jar assinados digitalmente, contendo arquivos e/ou código</font>.</td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/signtool/">Fonte</a>, <a href="http://docs.sun.com/source/816-5531-10/app_sign.htm"> Documentação</a>, </font></td> + </tr> + <tr> + <td><a name="signver">signver 1.1</a></td> + <td>Verificar assinaturas em objetos assinados digitalmente.</td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/signver/">Fonte</a>, <a href="http://docs.sun.com/source/816-6153-10/signver.htm"> Documentação</a>, <a href="tools/NSS_Tools_signver-tasks">Tarefas/Planos</a> </font></td> + </tr> + <tr> + </tr> + <tr> + <td><a name="sslstrength">sslstrength</a></td> + <td><font size="-1">Força de </font>SSL</td> + <td><font size="-1"><a href="tools/NSS_Tools_sslstrength">Documentação</a> </font></td> + </tr> + <tr> + <td><a name="ssltap">ssltap 3.2</a></td> + <td> + <p><font size="-1">Intermediar requisições para um servidor SSL e exibe o conteúdo das mensagens trocadas</font> entre o cliente e o servidor. A ferramenta sstap não descriptografa os dados, mas mostra coisas como o tipo de mensagem SSL (clientHello, serverHello, etc) e dados da conexão (versão do protocolo, suíte de cifras, etc). Essa ferramenta é muito útil para depuração.</p> + </td> + <td><font size="-1"><a href="http://lxr.mozilla.org/mozilla/source/security/nss/cmd/ssltap/">Fonte</a>, <a href="tools/NSS_Tools_ssltap">Documentação</a> </font></td> + </tr> + </tbody> +</table> + +<p> </p> + +<ol> + <li><font size="-1"><a name="note1"></a> Atualmente aponta para o Netscape Certificate Management System Administration Guide em docs.sun.com. Para mais informações sobre essa ferramenta, veja <a href="http://developer.netscape.com/docs/manuals/security.html#OBJ">Object Signing</a>. </font></li> + <li><font size="-1"><a name="note2"></a> Atualmente aponta para a documentação de signver no developer.netscape.com. Para informações adicionais sobre essa ferramenta, veja <a href="http://developer.netscape.com/docs/manuals/security.html#FORM">Form Signing</a> .</font></li> +</ol> diff --git a/files/pt-br/mozilla/projects/nss/tools/nss_tools_certutil-tasks/index.html b/files/pt-br/mozilla/projects/nss/tools/nss_tools_certutil-tasks/index.html new file mode 100644 index 0000000000..ed643929d0 --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/tools/nss_tools_certutil-tasks/index.html @@ -0,0 +1,25 @@ +--- +title: NSS Tools certutil-tasks +slug: Mozilla/Projects/NSS/tools/NSS_Tools_certutil-tasks +translation_of: Mozilla/Projects/NSS/tools/NSS_Tools_certutil-tasks +--- +<h1 id="Tarefas_do_NSS_Security_Tools_certutil">Tarefas do NSS Security Tools: certutil</h1> + +<p>Newsgroup: <a href="news://news.mozilla.org/mozilla.dev.tech.crypto">mozilla.dev.tech.crypto</a></p> + +<h1 id="Lista_de_tarefas">Lista de tarefas</h1> + +<ol> + <li>Melhor relatório de erro. A maioria dos erros do certutil fornece nenhum detalhe. Erros com opções de linha de comandos exibem apenas uma mensagem de uso.</li> + <li>Melhorar listagem de certificados. Permitir ordenação por nome e confiança. Ordenação por confiança vai retornar primeiro certificados de AC.</li> + <li>Permitir listagem e procura por chaves por índice e alcunha.</li> + <li>Melhorar coerência de alcunhas de chave e certificado.</li> + <li>Remover chaves "encalhadas" sem um certificado (exceto para a iminente (????) chave de criptografia para arquivos de senha).</li> + <li>Suporte a importação de chaves de um arquivo.</li> + <li>Melhorar suporte a token de hardware.</li> + <li>(correção de erro) Algumas extensões de certificados fazem o certutil travar.</li> + <li>(correção de erro) Entradas de certificados exigem um número de série; um deveria ser gerado automaticamente, se não fornecido.</li> + <li>(correção de erro) Senha nula é dada a um novo <code class="filename">key3.db</code>; deveria perguntar o usuário por uma senha inicial.</li> + <li>(correção de erro) Listagem de chaves privadas não funciona: exige autenticação por senha.</li> + <li>(correção de erro) Listagem de extensões de certificado possui erros de escrita e não fornece muita informação.</li> +</ol> diff --git a/files/pt-br/mozilla/projects/nss/tools/nss_tools_certutil/index.html b/files/pt-br/mozilla/projects/nss/tools/nss_tools_certutil/index.html new file mode 100644 index 0000000000..b7f6dd34ca --- /dev/null +++ b/files/pt-br/mozilla/projects/nss/tools/nss_tools_certutil/index.html @@ -0,0 +1,677 @@ +--- +title: NSS Tools certutil +slug: Mozilla/Projects/NSS/tools/NSS_Tools_certutil +translation_of: Mozilla/Projects/NSS/tools/NSS_Tools_certutil +--- +<h2 id="Usando_a_Ferramenta_de_Banco_de_Dados_de_Certificado">Usando a Ferramenta de Banco de Dados de Certificado</h2> + +<p>A Ferramenta de Banco de Dados de Certificado (em inglês, "Certificate Database Tool") é um utilitário de linha de comando que pode criar e modificar os arquivos de banco de dados <code>cert8.db</code> e <code>key3.db do </code>Netscape Communicator. Ela também pode listar, gerar, modificar ou excluir certificados do arquivo <code>cert8.db e criar ou alterar a senha, gerar novos pares de chaves públicas e privadas, exibir o conteúdo do banco de dados de chave, ou excluir os pares de chaves do arquivo<font face="Open Sans, Arial, sans-serif"> </font></code><code>key3.db</code>.</p> + +<p>O processo de gerenciamento de chave e certificado geralmente começa com a criação de chaves no banco de dados de chave e, então, geração e gerenciamento de certificados no banco de dados de certificado.</p> + +<p>Esse documento discute gerenciamento de banco de dados de chave e certificado. Para gerenciamento de banco de dados de módulo de segurança de informações, veja <a href="/en-US/docs/NSS_reference/NSS_tools_:_modutil">Usando a Ferramenta de Banco de Dados de Segurança.</a></p> + +<h2 id="Disponibilidade">Disponibilidade</h2> + +<p>Veja as notas de lançamento para as plataformas para as quais essa ferramenta está disponível.</p> + +<h2 id="Sintaxe">Sintaxe</h2> + +<p>Para executar a Ferramenta de Banco de Dados de Certificado, digite o comando</p> + +<pre><code>certutil </code><em>opção</em> [<em>argumentos</em> ]</pre> + +<p>sendo <em> opção</em> e<em> argumentos</em> combinações das opções e argumentos listados na seção a seguir. Cada comando leva uma opção. Cada opção pode levar zero ou mais argumentos. Para ver uma mensagem sobre o uso, execute o comando sem opções ou com a opçaõ -H.</p> + +<h3 id="Opções_e_Argumentos">Opções e Argumentos</h3> + +<p>Opções especificam uma ação e estão em letras maiúsculas. Argumentos de opções modificam uma ação e estão em letras minúsculas. As opções do comando de Ferramenta de Banco de Dados de Certificado e seus argumentos são definidos abaixo:</p> + +<table> + <tbody> + <tr> + <td> <strong>Opções</strong></td> + <td> + + </td> + </tr> + <tr> + <td> + <p><code>-N</code></p> + </td> + <td> + <p>Cria novos bancos de dados de certificado e de chave.</p> + </td> + </tr> + <tr> + <td> + <p><code>-S</code></p> + </td> + <td> + <p>Cria um certificado individual e o adiciona a um banco de dados de certificado.</p> + </td> + </tr> + <tr> + <td> + <p><code>-R</code></p> + </td> + <td> + <p>Cria um arquivo de requisição de certificado (certificate-request) que pode ser enviado a uma Autoridade Certificadora (AC) para processamento em um certificado final. A saída padrão é para a saída padrão, a menos que você use o argumento <code>-o</code><em>output-file</em>. Use o argumento <code>-a</code> para especificar a saída em ASCII.</p> + </td> + </tr> + <tr> + <td> + <p><code>-C</code></p> + </td> + <td> + <p>Cria um novo arquivo binário de certificado a partir do arquivo binário de requisição de certificado. Use o argumento <code>-i</code> para especificar o arquivo de requisição de certificado. Se esse argumento não for usado, a Ferramenta de Banco de Dados de Certificado pergunta por um nome de arquivo.</p> + </td> + </tr> + <tr> + <td> + <p><code>-G</code></p> + </td> + <td> + <p>Gera um novo par de chaves pública e privada. O banco de dados de chave já deve existir; se um não estiver presente, essa opção vai inicializar um por padrão. Alguns cartões inteligentes (por exemplo, o cartão Litronic) podem armazenar apenas um par de chaves. Se você criar um novo par de chaves para tal cartão, o par anterior é sobrescrito.</p> + </td> + </tr> + <tr> + <td> + <p><code>-F</code></p> + </td> + <td> + <p>Exclui uma chave privada de um banco de dados de chave. Especifique a chave para excluir com o argumento <code>-n</code>. Especifique o banco de dados do qual a chave será excluída com o argumento <code>-d</code>.</p> + + + + <p>Use o argumento <code>-k</code> para especificar explicitamente se deve-se excluir uma chave DSA ou RSA. Se você não usar o argumento <code>-k</code>, a opção procura por uma chave RSA que corresponda com o apelido.</p> + + + + <p>Quando você excluir chaves, certifique-se de remover quaisquer certificados associados àquelas chaves do banco de dados de certificado, usando <code>-D</code>.</p> + + + + <p>Alguns cartões inteligentes (por exemplo, o cartão Litronic) não permite que você remova uma chave pública que você gerou. Neste caso, apenas a chave privada é excluída do par de chaves. Você pode exibir a chave pública com o comando <code>certutil -K -h</code><em>tokenname</em> .</p> + </td> + </tr> + <tr> + <td> + <p><code>-K</code></p> + </td> + <td> + <p>Lista o keyID das chaves no banco de dados de chave. Uma keyID é o modulus da chave RSA ou o <code>publicValue</code> da chave DSA. IDs são exibidos em hexadecimal ("0x" não é mostrado).</p> + </td> + </tr> + <tr> + <td> + <p><code>-A</code></p> + </td> + <td> + <p>Adiciona um certificado existente a um banco de dados de certificado. O banco de dados de certificado já deve existir; se um não estiver presente, essa opção vai inicializar um por padrão.</p> + </td> + </tr> + <tr> + <td> + <p><code>-D</code></p> + </td> + <td> + <p>Exclui um certificado do banco de dados de certificado.</p> + </td> + </tr> + <tr> + <td> + <p><code>-L</code></p> + </td> + <td> + <p>Lista todos os certificados ou exibe informações sobre um certificado nomeado, em um banco de dados de certificado.</p> + + + + <p>Use o argumento <code>-h</code><em>tokenname</em> para especificar o banco de dados de certificado em um token de hardware ou software em particular.</p> + </td> + </tr> + <tr> + <td> + <p><code>-V</code></p> + </td> + <td> + <p>Verifica a validade de um certificado e seus atributos.</p> + </td> + </tr> + <tr> + <td> + <p><code>-M</code></p> + </td> + <td> + <p>Modifica os atributos de confiança de um certificado usando os valores do argumento <code>-t</code>.</p> + </td> + </tr> + <tr> + <td> + <p><code>-H</code></p> + </td> + <td> + <p>Exibe uma lista das opções e argumentos usados pela Ferramenta de Banco de Dados de Certificado.</p> + </td> + </tr> + <tr> + <td> + <p><code>-W</code></p> + </td> + <td> + <p>Altera a senha para um banco de dados de chave.</p> + </td> + </tr> + <tr> + <td> + <p><code>-U</code></p> + </td> + <td> + <p>Lista todos os módulos disponíveis ou exibe um módulo específico nomeado.</p> + </td> + </tr> + <tr> + <td> + <p><strong>Argumentos</strong></p> + </td> + <td> + + </td> + </tr> + <tr> + <td> + <p><code>-a</code></p> + </td> + <td> + <p>Usa formato ASCII ou permite o uso de formato ASCII para entrada ou saída. Essa formatação segue {{rfc(1113)}}. Para requisições de certificados, saída ASCII padrão vai para a saída padrão, a menos que seja redirecionada.</p> + </td> + </tr> + <tr> + <td> + <p><code>-b </code><em>validity-time</em></p> + </td> + <td> + <p>Especifica um tempo até o qual um certificado é exigido ser válido. Use ao verificar a validade de certificado com a opção <code>-V</code>. O formato do argumento <em>tempo-validade</em> é "YYMMDDHHMMSS[+HHMM|-HHMM|Z]". Especificação de segundos (SS) é opcional. Ao especificar um tempo explícito, use "YYMMDDHHMMSSZ". Ao especificar um tempo de compensação, use "YYMMDDHHMMSS+HHMM" ou "YYMMDDHHMMSS-HHMM". Se essa opção não for usada, a verificação de validade tem como padrão o tempo de sistema atual.</p> + </td> + </tr> + <tr> + <td> + <p><code>-c </code><em>issuer</em></p> + </td> + <td> + <p>Identifica o certificado da AC a partir da qual um novo certificado derivará sua autenticidade. Use o apelido exato do certificado da AC, ou use o endereço de email da AC. Coloque a string <em>emissor</em> entre aspas se ela contiver espaços.</p> + </td> + </tr> + <tr> + <td> + <p><code>-d </code><em>directory</em></p> + </td> + <td> + <p>Especifica o diretório de banco de dados contendo os arquivos de banco de dados de certificado e chave. No Unix, a Ferramenta de Banco de Dados de Certificado usa como padrão <code>$HOME/.netscape</code> (isto é, <code>~/.netscape</code>). No Windows NT usa como padrão o diretório atual.</p> + + + + <p>Os arquivos de banco de dados <code>cert8.db</code> e <code>key3.db devem residir no mesmo diretório</code>.</p> + </td> + </tr> + <tr> + <td> + <p><code>-P </code><em>dbprefix</em></p> + </td> + <td> + <p>Especifica o prefixo usado nos <code>cert8.db</code> e <code>key3.db</code> (por exemplo, <code>my_cert8.db</code> e <code>my_key3.db</code>). Essa opção é fornecida como um caso especial. Alterar os nomes dos bancos de dados de certificado e chave não é recomendado.</p> + </td> + </tr> + <tr> + <td> + <p><code>-e</code></p> + </td> + <td> + <p>Verifica a assinatura do certificado durante o processo de validação de um certificado.</p> + </td> + </tr> + <tr> + <td> + <p><code>-f </code><em>password-file</em></p> + </td> + <td> + <p>Especifica um arquivo que fornecerá automaticamente a senha para incluir um certificado ou para acessar um banco de dados de certificado. Esse é um arquivo texto simples contendo uma senha. Certifique-se de evitar acesso não autorizado a este arquivo.</p> + </td> + </tr> + <tr> + <td> + <p><code>-g </code><em>keysize</em></p> + </td> + <td> + <p>Define um tamanho de chave para usar ao gerar novos pares de chave pública e privada. O mínimo é 512 bits e o máximo é 8192 bits. O padrão é 1024 bits. qualquer tamanho que seja um múltiplo de 8 entre o mínimo e o máximo é permitido.</p> + </td> + </tr> + <tr> + <td> + <p><code>-h </code><em>tokenname</em></p> + </td> + <td> + <p>Especifica o nome de um token para usar ou agir sobre. A menos que especificado, o token padrão é um slot interno (especialmente, slot interno 2). Esse slot também pode ser nomeado explicitamente com a string <code>"internal"</code>. Um slot interno é um slot virtual mantido por software, em vez de por dispositivo hardware. Slot interno 2 é usado por serviços de chave e certificado. Slot interno 1 é usado por serviços critográficos.</p> + </td> + </tr> + <tr> + <td> + <p><code>-i </code><em>cert|cert-request-file</em></p> + </td> + <td> + <p>Especifica um certificado ou um arquivo de requisição de certificado.</p> + </td> + </tr> + <tr> + <td> + <p><code>-k rsa|dsa|all</code></p> + </td> + <td> + <p>Especifica o tipo de uma chave: RSA, DSA ou ambos. O valor padrão é <code>rsa</code>. Ao especificar o tipo de chave você pode evitar erros causados por apelidos duplicados.</p> + </td> + </tr> + <tr> + <td> + <p><code>-l</code></p> + </td> + <td> + <p>Exibe informações detalhdadas ao validar um certificado com a opção <code>-V</code>.</p> + </td> + </tr> + <tr> + <td> + <p><code>-m </code><em>serial-number</em></p> + </td> + <td> + <p>Atribui um número de série único para um certificao sendo criado. Essa opção deve ser realizada por um AC. O número de série padrão é 0 (zero). Números de séries são limitados a inteiros.</p> + </td> + </tr> + <tr> + <td> + <p><code>-n </code><em>nickname</em></p> + </td> + <td> + <p>Especifica o apelido de um certificado ou chave para listar, criar, adicionar a um banco de dados, modificar ou validar. Coloque a string <em>nickname</em> entre aspas se ela contiver espaços.</p> + </td> + </tr> + <tr> + <td> + <p><code>-o </code><em>output-file</em></p> + </td> + <td> + <p>Especifica o nome de arquivo de saída para novos certificados ou requisições binárias de certificados. Coloque a string <em>output-file</em> entre aspas se ela contiver espaços. Se esse argumento não foi usado, o destino de saída usado por padrão é a saída padrão.</p> + </td> + </tr> + <tr> + <td> + <p><code>-p </code><em>phone</em></p> + </td> + <td> + <p>Especifica um número de telefone de contato a ser incluído em novos certificados ou requisições de certificados. Coloque a string <em>phone</em> entre aspas se ela contiver espaços.</p> + </td> + </tr> + <tr> + <td> + <p><code>-q </code><em>pqgfile</em></p> + </td> + <td> + <p>Lê um valor PQG alternativo a partir do arquivo especificado ao gerar pares de chaves DSA. Se esse argumento não for usado, a Ferramenta de Banco de Dados de Chave gera seu próprio valor de PQG. Arquivos PQG são criados com um utilitário DSA separado.</p> + </td> + </tr> + <tr> + <td> + <p><code>-r</code></p> + </td> + <td> + <p>Exibe uma codificação DER binária do certificado ao listar informações sobre aquele certificado com a opção <code>-L</code>.</p> + </td> + </tr> + <tr> + <td> + <p><code>-s </code><em>subject</em></p> + </td> + <td> + <p>Identifica um dono de um certificado em particular para novos certificados ou requisições de certificados. Coloque a string <em>subject</em> entre aspas se ela contiver espaços. O formato de identificação do sujeito segue {{rfc(1485)}}.</p> + </td> + </tr> + <tr> + <td> + <p><code>-t </code><em>trustargs</em></p> + </td> + <td> + <p>Especifica os atributos de confiança a serem modificados em um certificado existente ou para serem aplicados em um certificado ao criá-lo ou adicioná-lo a um banco de dados.</p> + + + + <p>Há três categorias de confiança disponíveis para cada certificado, expressado nesta ordem: "<em>SSL</em> ,<em>email</em> ,<em>assinatura de objeto</em> ". Em cada posição de categoria use zero ou mais para os seguintes códigos de atributos:</p> + + + + <p><code>p</code> Proibido (explicitamente não confiada)<br> + <code>P</code> Par confiável<br> + <code>c</code> AC válida<br> + <code>T</code> AC confiável para emitir certificados de clientes (implica em <code>c</code>)<br> + <code>C</code> AC confiável para emitir certificados de servidores (SSL apenas)<br> + (implica em <code>c</code>)<br> + <code>u</code> Certificado pode ser usado para autenticação ou assinatura<br> + <code>w</code> Envia aviso (use com outros atributos para incluir um aviso quando o certificado é usado naquele contexto)</p> + + + + <p>Os códigos de atributos para as categorias são separados por vírgulas, e todo o conjunto de atributos é envolto por aspas. Por exemplo:</p> + + <p><code>-t "TCu,Cu,Tuw"</code></p> + + + + <p>Use a opção <code>-L</code> para ver uma lista de certificados e atributos confiáveis atuais em um banco de dados de certificado.</p> + </td> + </tr> + <tr> + <td> + <p><code>-u </code><em>certusage</em></p> + </td> + <td> + <p>Especifica um contexto de uso a ser aplicado ao validade um certificado com a opção <code>-V</code>. Os contextos são os seguintes:</p> + + + + <p><code>C</code> (como um cliente SSL)<br> + <code>V</code> (como um servidor SSL)<br> + <code>S</code> (como um assinador de email)<br> + <code>R</code> (como um destinatário de email)</p> + </td> + </tr> + <tr> + <td> + <p><code>-v </code><em>valid-months</em></p> + </td> + <td> + <p>Define o número de meses nos quais um novo certificado será válido. O período de validade começa no horário atual do sistema, a menos que uma compensação seja adicionada ou substraída com a opção <code>-w</code>. Se esse argumento não for usado, o período de validade padrão é três meses. Quando esse argumento é usado, período padrão de três meses é automaticamente adicionado a qualquer valor dado no argumento <em>valid-month</em>. Por exemplo, usar essa opção para definir um valor de 3 causaria 3 ser adicionado ao padrão de três meses, criando um período de validade de seis meses. Você pode usar valores negativos para reduzir o período padrão. Por exemplo, definir um valor de -2 subtrairia 2 do padrão e criaria um período de validade de um mês.</p> + </td> + </tr> + <tr> + <td> + <p><code>-w </code><em>offset-months</em></p> + </td> + <td> + <p>Define uma compensação a partir do horário atual do sistema, em meses, para o começo de um período de validade do certificado. Use ao criar o certificado ou adicioná-lo a um banco de dados. Expresse a compensação em inteiros, usando um sinal de menos (<code>-</code>) para indicar uma compensação negativa. Se esse argumento não foi usado, o período de validade começa no horário atual do sistema. O tamanho da validade é definida com o argumento <code>-v</code>.</p> + </td> + </tr> + <tr> + <td> + <p><code>-x</code></p> + </td> + <td> + <p>Usa a Ferramenta de Banco de Dados de Certificado para gerar a assinatura para um certificado sendo criado ou adicionado a um banco de dados, em vez de obter uma assinatura a partir de uma AC separada.</p> + </td> + </tr> + <tr> + <td> + <p><code>-y </code><em>exp</em></p> + </td> + <td> + <p>Define um valor de exponente alternativo a ser usado na geração de uma nova chave pública de RSA para um banco de dados, em vez do valor padrão de 65537. Os valores alternativos disponíveis são 3 e 17.</p> + </td> + </tr> + <tr> + <td> + <p><code>-z </code><em>noise-file</em></p> + </td> + <td> + <p>Lê um valor inicial a partir do arquivo do arquivo binário especificado a ser usado na geração de um novo par de chaves privada e pública RSA. Esse argumento torna possível usar valores iniciais gerados por hardware e desnecessário criar manualmente um valor do teclado. O tamanho mínimo de arquivo é 20 bytes.</p> + </td> + </tr> + <tr> + <td> + <p><code>-1</code></p> + </td> + <td> + <p>Adiciona uma extensão de uso da chave a um certificado que está sendo criado ou adicionado a um banco de dados. Essa extensão permite que uma chave do certificado seja dedicada a dar suporte a operações específicas tais como um servidor SSL ou assinatura de objeto. A Ferramenta de Banco de Dados de Certificado vai lhe solicitar um uso em particular para o chave do certificado. Esses usos são descritas sob <a href="https://access.redhat.com/documentation/en-US/Red_Hat_Certificate_System/9/html/Administration_Guide/Standard_X.509_v3_Certificate_Extensions.html">Standard X.509 v3 Certificate Extensions</a> no Apêndice A.3 do <em>Guia de Administração do Sistema de Certificados da Red Hat.</em></p> + </td> + </tr> + <tr> + <td> + <p><code>-2</code></p> + </td> + <td> + <p>Adiciona uma extensão de restrição básica a um certificado que está sendo criado ou adicionado a um banco de dados. Essa extensão oferece suporte ao processo de verificação da cadeia de certificados. A Ferramenta de Banco de Dados de Certificado solicitará que você selecione a extensão de restrição de certificado. Extensões de restrição são descritas sob <a href="https://access.redhat.com/documentation/en-US/Red_Hat_Certificate_System/9/html/Administration_Guide/Standard_X.509_v3_Certificate_Extensions.html">Standard X.509 v3 Certificate Extensions</a> no Apêndice A.3 do <em>Guia de Administração do Sistema de Certificados da Red Hat.</em></p> + </td> + </tr> + <tr> + <td> + <p><code>-3</code></p> + </td> + <td> + <p>Adiciona uma extensão de keyID de autoridade a um certificado que está sendo criado ou adicionado a um banco de dados. Essa extensão oferece suporte à identificação de um certificado em particular, no meio de múltiplos certificados associados a um nome de sujeito, como o emissor correto de um certificado. A Ferramenta de Banco de Dados de Certificado solicitará que você selecione a extensão de keyID de autoridade. Extensões de restrição são descritas sob <a href="https://access.redhat.com/documentation/en-US/Red_Hat_Certificate_System/9/html/Administration_Guide/Standard_X.509_v3_Certificate_Extensions.html">Standard X.509 v3 Certificate Extensions</a> no Apêndice A.3 do <em>Guia de Administração do Sistema de Certificados da Red Hat.</em></p> + </td> + </tr> + <tr> + <td> + <p><code>-4</code></p> + </td> + <td> + <p>Adiciona uma extensão de ponto de distribuição de CRL a um certificado que está sendo criado ou adicionado a um banco de dados. Essa extensão identifica a URL de uma lista de revogação de certificados (CRL) associados do certificado. A Ferramenta de Banco de Dados de Certificado solicitará que você informe uma URL. Estensões de pontos de distribuição de CRL são descritas sob <a href="https://access.redhat.com/documentation/en-US/Red_Hat_Certificate_System/9/html/Administration_Guide/Standard_X.509_v3_Certificate_Extensions.html">Standard X.509 v3 Certificate Extensions</a> no Apêndice A.3 do <em>Guia de Administração do Sistema de Certificados da Red Hat.</em></p> + </td> + </tr> + <tr> + <td> + <p><code>-5</code></p> + </td> + <td> + <p>Adiciona uma extensão de tipo de certificado Netscape a um certificado que está sendo criado ou adicionado ao banco de dados. Extensões de tipo de certificado Netscape são descritas sob <a href="https://access.redhat.com/documentation/en-US/Red_Hat_Certificate_System/9/html/Administration_Guide/Standard_X.509_v3_Certificate_Extensions.html">Standard X.509 v3 Certificate Extensions</a> no Apêndice A.3 do <em>Guia de Administração do Sistema de Certificados da Red Hat.</em></p> + </td> + </tr> + <tr> + <td> + <p><code>-6</code></p> + </td> + <td> + <p>Adiciona uma extensão de uso estendido da chave a um certificado que está sendo criado ou adicionado ao banco de dados. Extensões de uso estendido de chave são descritas sob <a href="https://access.redhat.com/documentation/en-US/Red_Hat_Certificate_System/9/html/Administration_Guide/Standard_X.509_v3_Certificate_Extensions.html">Standard X.509 v3 Certificate Extensions</a> no Apêndice A.3 do <em>Guia de Administração do Sistema de Certificados da Red Hat</em></p> + </td> + </tr> + <tr> + <td> + <p><code>-7 </code><em>emailAddrs</em></p> + </td> + <td> + <p>Adiciona uma lista de endereços de email, separados por vírgula, à extensão de nome alternativo do sujeito de um certificado ou requisição de certificado que está sendo criado ou adicionado ao banco de dados. Extensões de nome alternativo do sujeito são descritas na Seção 4.2.1.7 do {{rfc(32800)}}.</p> + </td> + </tr> + <tr> + <td> + <p><code>-8 </code><em>dns-names</em></p> + </td> + <td> + <p>Adiciona uma lista de nomes de DNS, separados por vírgula, à extensão de nome alternativo do sujeito de um certificado ou requisição de certificado que está sendo criado ou adicionado ao banco de dados. Extensões de nome alternativo do sujeito são descritas na Seção 4.2.1.7 do {{rfc(32800)}}</p> + </td> + </tr> + </tbody> +</table> + +<h2 id="Uso">Uso</h2> + +<p>As capacidades da Ferramenta de Banco de Dados de Certificado estão agrupadas a seguir, usando essa combinações de opções e argumentos. Opções e argumentos entre colchetes são opcionais; aqueles sem colchetes são obrigatórios.</p> + +<pre><code>-N [-d </code><em>certdir</em> <code>] </code></pre> + +<pre><code>-S -k rsa|dsa -n </code><em>certname</em> <code>-s </code><em>subject</em> +<code>[-c </code><em>issuer</em> <code>|-x] -t </code><em>trustargs</em> <code>[-h </code><em>tokenname</em> <code>] +[-m </code><em>serial-number</em> <code>] [-v </code><em>valid-months</em> <code>] [-w </code><em>offset-months</em> <code>] +[-d </code><em>certdir</em> <code>] [-p </code><em>phone</em> <code>] [-f </code><em>password-file</em> <code>] [-1] [-2] [-3] [-4] </code></pre> + +<pre><code>-R -k rsa|dsa -s </code><em>subject</em> <code>[-h </code><em>tokenname</em> <code>] +[-d </code><em>certdir</em> <code>] [-p </code><em>phone</em> <code>] [-o </code><em>output-file</em> <code>] [-f </code><em>password-file</em> <code>] </code></pre> + +<pre><code>-C -c </code><em>issuer</em> <code>[-f </code><em>password-file</em> <code>] +[-h </code><em>tokenname</em> <code>] -i </code><em>cert-request-file</em> <code>-o </code><em>output-file</em> <code>[-m </code><em>serial-number</em> <code>] +[-v </code><em>valid-months</em> <code>] [-w </code><em>offset-months</em> <code>] [-d </code><em>certdir</em> <code>] [-1] [-2] [-3] +[-4] </code></pre> + +<pre><code>-A -n </code><em>certname</em> <code>-t </code><em>trustargs</em> <code>[-h </code><em>tokenname</em> <code>] [-d </code><em>certdir</em> <code>] [-a] +[-i </code><em>cert-request-file</em> <code>] </code></pre> + +<pre><code>-L [-n </code><em>certname</em> <code>] [-d </code><em>certdir</em> <code>] [-r] [-a] </code></pre> + +<pre><code>-V -n </code><em>certname</em> <code>-b </code><em>validity-time</em> <code>-u </code><em>certusage</em> <code>[-e] [-l] [-d </code><em>certdir</em> <code>] </code></pre> + +<pre><code>-M -n </code><em>certname</em> <code>-t </code><em>trustargs</em> <code>[-d </code><em>certdir</em> <code>] </code></pre> + +<pre><code>-H </code></pre> + +<ul> + <li>Criando um novo arquivo <code>cert8.db</code>:</li> + <li>Criando um novo certificado e adicionando-o ao banco de dados com um comando:</li> + <li>Fazendo uma requisição de certificado separada:</li> + <li>Criando um novo certificado binário a partir de uma requisição binária de certificado:</li> + <li>Adicionando um certificado a um banco de dados existente:</li> + <li>Listando todos certificados ou um certificado determinado:</li> + <li>Validando um certificado:</li> + <li>Modificando um atributo de confiança do certificado:</li> + <li>Exibindo uma lista das opções e argumetnos usados pela Ferramenta de Banco de Dados de Certificado:</li> +</ul> + +<h2 id="Exemplos">Exemplos</h2> + +<h3 id="Criando_um_novo_Banco_de_Dados_de_Certificado">Criando um novo Banco de Dados de Certificado</h3> + +<p>Esse exemplo cria um novo banco de dados de certificado (arquivo <code>cert8.db</code>) no diretório especificado:</p> + +<pre><code>certutil -N -d </code><em>certdir</em></pre> + +<p>Você deve gerar os arquivos <code>key3.db</code> e <code>secmod.db</code> associados usando a Ferramenta de Banco de Dados de Chave e outras ferramentas.</p> + +<h3 id="Listando_Certificados_em_um_Banco_de_Dados">Listando Certificados em um Banco de Dados</h3> + +<p>Esss exemplo lista todos os certificados no arquivo <code>cert8.db</code> no diretório especificado:</p> + +<pre><code>certutil -L -d </code><em>certdir</em></pre> + +<p>A Ferramenta de Banco de Dados de Certificado exibe uma saída similar a esta:</p> + +<p><code>Certificate Name Trust Attributes </code><br> + <code>Uptime Group Plc. Class 1 CA C,C,<br> + VeriSign Class 1 Primary CA ,C,<br> + VeriSign Class 2 Primary CA C,C,C<br> + AT&T Certificate Services C,C,<br> + GTE CyberTrust Secure Server CA C,,<br> + Verisign/RSA Commercial CA C,C,<br> + AT&T Directory Services C,C,<br> + BelSign Secure Server CA C,,<br> + Verisign/RSA Secure Server CA C,C,<br> + GTE CyberTrust Root CA C,C,<br> + Uptime Group Plc. Class 4 CA ,C,<br> + VeriSign Class 3 Primary CA C,C,C<br> + Canada Post Corporation CA C,C,<br> + Integrion CA C,C,C<br> + IBM World Registry CA C,C,C<br> + GTIS/PWGSC, Canada Gov. Web CA C,C,<br> + GTIS/PWGSC, Canada Gov. Secure CA C,C,C<br> + MCI Mall CA C,C,<br> + VeriSign Class 4 Primary CA C,C,C<br> + KEYWITNESS, Canada CA C,C,<br> + BelSign Object Publishing CA ,,C<br> + BBN Certificate Services CA Root 1 C,C,<br> + p prohibited (explicitly distrusted)<br> + P Trusted peer<br> + c Valid CA<br> + T Trusted CA to issue client certs (implies c)<br> + C Trusted CA to issue server certs(for ssl only) (implies c)<br> + u User cert<br> + w Send warning </code></p> + +<h3 id="Criando_uma_Requisição_de_Certificado">Criando uma Requisição de Certificado</h3> + +<p>Esse exemplo gera um arquivo de requisição binária de certificado chamado <code>e95c.req</code> no diretório especificado:</p> + +<pre><code>certutil -R -s "CN=John Smith, O=Netscape, L=Mountain View, ST=California, C=US" -p "650-555-8888" -o meucert.req -d </code><em>certdir</em></pre> + +<p>Antes de criar o arquivo de requisição, a Ferramenta de Banco de Dados solicita uma senha:</p> + +<pre><code>Enter Password or Pin for "Communicator Certificate DB": </code></pre> + +<h3 id="Criando_um_Certificado">Criando um Certificado</h3> + +<p>Um certificado válido deve ser emitido por uma AC confiável. Se um par de chaves de AC não estiver disponível, você pode criar um certificado auto-assinado (para o propósito deste exemplo) com o argumento <code>-x</code>. Esse exemplo cria um novo certificado de AC binário e auto-assinado chamado <code>meuemissor</code>, no diretório especificado.</p> + +<pre><code>certutil -S -s "CN=Meu emissor" -n meuemissor -x -t "C,C,C" -1 -2 -5 -m 1234 -f </code><em>password-file</em> <code>-d </code><em>certdir</em></pre> + +<p>O exemplo a seguir cria um novo certificado binário chamado <code>meucert.crt</code>, a partir de uma requisição binária de certificado chamada <code>meucert.req</code>, no diretório especificado. Ele é emitido pelo certificado auto-assinado criado assim, <code>meuemissor</code>.</p> + +<pre><code>certutil -C -m 2345 -i meucert.req -o meucert.crt -c meuemissor -d </code><em>certdir</em></pre> + +<h3 id="Adicionando_um_Certificado_ao_Banco_de_Dados">Adicionando um Certificado ao Banco de Dados</h3> + +<p>Esse exemplo adiciona um certificado ao banco de dados de certificado:</p> + +<pre><code>certutil -A -n jsmith@netscape.com -t "p,p,p" -i meucert.crt -d </code><em>certdir</em></pre> + +<p>Você pode ver esse certificado no banco de dados com esse comando:</p> + +<pre><code>certutil -L -n jsmith@netscape.com -d </code><em>certdir</em></pre> + +<p>A Ferramenta de Banco de Dados de Certificado exibe uma saída similiar a esta:</p> + +<p><code>Certificate:<br> + Data:<br> + Version: 3 (0x2)<br> + Serial Number: 0 (0x0)<br> + Signature Algorithm: PKCS #1 MD5 With RSA Encryption<br> + Issuer: CN=John Smith, O=Netscape, L=Mountain View, ST=California, C=US<br> + Validity:<br> + Not Before: Thu Mar 12 00:10:40 1998<br> + Not After: Sat Sep 12 00:10:40 1998<br> + Subject: CN=John Smith, O=Netscape, L=Mountain View, ST=California, C=US </code><br> + <code>Subject Public Key Info:<br> + Public Key Algorithm: PKCS #1 RSA Encryption<br> + RSA Public Key:<br> + Modulus:<br> + 00:da:53:23:58:00:91:6a:d1:a2:39:26:2f:06:3a:<br> + 38:eb:d4:c1:54:a3:62:00:b9:f0:7f:d6:00:76:aa:<br> + 18:da:6b:79:71:5b:d9:8a:82:24:07:ed:49:5b:33:<br> + bf:c5:79:7c:f6:22:a7:18:66:9f:ab:2d:33:03:ec:<br> + 63:eb:9d:0d:02:1b:da:32:ae:6c:d4:40:95:9f:b3:<br> + 44:8b:8e:8e:a3:ae:ad:08:38:4f:2e:53:e9:e1:3f:<br> + 8e:43:7f:51:61:b9:0f:f3:a6:25:1e:0b:93:74:8f:<br> + c6:13:a3:cd:51:40:84:0e:79:ea:b7:6b:d1:cc:6b:<br> + 78:d0:5d:da:be:2b:57:c2:6f<br> + Exponent: 65537 (0x10001)<br> + Signature Algorithm: PKCS #1 MD5 With RSA Encryption<br> + Signature:<br> + 44:15:e5:ae:c4:30:2c:cd:60:89:f1:1d:22:ed:5e:5b:10:c8:<br> + 7e:5f:56:8c:b4:00:12:ed:5f:a4:6a:12:c3:0d:01:03:09:f2:<br> + 2f:e7:fd:95:25:47:80:ea:c1:25:5a:33:98:16:52:78:24:80:<br> + c9:53:11:40:99:f5:bd:b8:e9:35:0e:5d:3e:38:6a:5c:10:d1:<br> + c6:f9:54:af:28:56:62:f4:2f:b3:9b:50:e1:c3:a2:ba:27:ee:<br> + 07:9f:89:2e:78:5c:6d:46:b6:5e:99:de:e6:9d:eb:d9:ff:b2:<br> + 5f:c6:f6:c6:52:4a:d4:67:be:8d:fc:dd:52:51:8e:a2:d7:15:<br> + 71:3e </code><br> + <code>Certificate Trust Flags:<br> + SSL Flags:<br> + Valid CA<br> + Trusted CA<br> + Email Flags:<br> + Valid CA<br> + Trusted CA<br> + Object Signing Flags:<br> + Valid CA<br> + Trusted CA </code></p> + +<h3 id="Validando_um_Certificado">Validando um Certificado</h3> + +<p>Esse exemplo valida um certificado:</p> + +<pre><code>certutil -V -n jsmith@netscape.com -b 9803201212Z -u SR -e -l -d </code><em>certdir</em></pre> + +<p>A Ferramenta de Banco de Dados de Certificado mostra resultdos similares a</p> + +<pre><code>Certificate:'jsmith@netscape.com' is valid.</code></pre> + +<p>ou</p> + +<pre><code>UID=jsmith, E=jsmith@netscape.com, CN=John Smith, O=Netscape Communications Corp., C=US : Expired certificate</code></pre> + +<p>ou</p> + +<pre><code>UID=jsmith, E=jsmith@netscape.com, CN=John Smith, O=Netscape Communications Corp., C=US : Certificate not approved for this operation</code></pre> diff --git a/files/pt-br/mozilla/projects/rhino/index.html b/files/pt-br/mozilla/projects/rhino/index.html new file mode 100644 index 0000000000..d005d7660a --- /dev/null +++ b/files/pt-br/mozilla/projects/rhino/index.html @@ -0,0 +1,26 @@ +--- +title: Rhino +slug: Mozilla/Projects/Rhino +tags: + - JavaScript + - Mozilla + - Rhino +translation_of: Mozilla/Projects/Rhino +--- +<p><img alt="Image:rhino.jpg" class="internal" src="/@api/deki/files/832/=Rhino.jpg"></p> + +<p><span class="seoSummary"><strong>Rhino</strong> é uma implementação de código aberto do <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a> escrita inteiramente em Java. </span><span id="result_box" lang="pt"><span class="hps">É normalmente</span> <span class="hps">embutido em</span> <span class="hps">aplicações</span> <span class="hps">Java para fornecer</span> <span class="hps">scripting</span> <span class="hps">para usuários finais</span></span><span class="seoSummary">.</span><span id="result_box" lang="pt"><span class="hps">Ele está incorporado</span> <span class="hps">no</span> <span class="hps">J2SE</span> <span class="hps">6 como</span> <span class="hps">o mecanismo de script</span> <span class="hps">padrão</span> <span class="hps">Java</span></span><span class="seoSummary">.</span></p> + +<h4 id="Rhino_downloads" name="Rhino_downloads">Baixar Rhino</h4> + +<p>Como <a class="internal" href="/en/RhinoDownload" title="en/RhinoDownload">obter as fontes e os binarios</a>. </p> + +<h4 id="Rhino_documentation" name="Rhino_documentation">Documentação do Rhino</h4> + +<p>Veja <a href="/en/Rhino_documentation" title="en/Rhino_documentation">Informação sobre Rhino</a> para escrever scripts e embedders.</p> + +<h4 id="Rhino_help" name="Rhino_help">Ajuda do Rhino</h4> + +<p><a href="/en/Rhino/Community" title="en/Rhino/Community">Alguns recursos</a> se você ficar perdido.</p> + +<p>{{ languages( { "ja": "ja/Rhino" } ) }}</p> diff --git a/files/pt-br/mozilla/projects/spidermonkey/index.html b/files/pt-br/mozilla/projects/spidermonkey/index.html new file mode 100644 index 0000000000..d859385d11 --- /dev/null +++ b/files/pt-br/mozilla/projects/spidermonkey/index.html @@ -0,0 +1,110 @@ +--- +title: SpiderMonkey +slug: Mozilla/Projects/SpiderMonkey +tags: + - SpiderMonkey +translation_of: Mozilla/Projects/SpiderMonkey +--- +<div>{{SpiderMonkeySidebar}}</div> + +<div></div> + +<div class="summary"> +<p><strong>SpiderMonkey é o engine <a href="/docs/Web/JavaScript">JavaScript</a> da Mozilla escrito em C/C++. É usado em varios produtos Mozilla, incluindo Firefox, e está disponível sob a MPL2.</strong></p> +</div> + +<p>Lançamentos do código-fonte autônomo podem ser encontrados na <a href="/pt-BR/docs/Mozilla/Projects/SpiderMonkey/Releases">página de Lançamentos</a>.</p> + +<div class="column-container"> +<div class="column-half"> +<h2 id="Creating" name="Creating">Guias</h2> + +<h3 id="Compilação">Compilação</h3> + +<dl> + <dt><a href="SpiderMonkey/Build_Documentation" title="SpiderMonkey build documentation">Documentação de compilação do SpiderMonkey</a></dt> + <dd>Como obter o código fonte do SpiderMonkey, compilá-lo, e executar a suíte de teste.</dd> +</dl> + +<h3 id="Usando_o_SpiderMonkey">Usando o SpiderMonkey</h3> + +<dl> + <dt><a href="SpiderMonkey/Introduction_to_the_JavaScript_shell" title="Introduction to the JavaScript shell">Introdução ao JavaScript shell</a></dt> + <dd>Documentação do JavaScript shell de linha de comando, <code>js</code>.</dd> + <dt><a href="SpiderMonkey/JSAPI_User_Guide" title="en-US/docs/JSAPI_User_Guide">Guia de usuário JSAPI</a></dt> + <dd>Esse guia fornece uma visão geral do SpiderMonkey e descreve como você pode embutir chamadas da engine em seus aplicativos, habilitando neles o reconhecimento de JavaScript.</dd> + <dt><a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/JSAPI_Cookbook" title="en-US/docs/SpiderMonkey/JSAPI_Phrasebook">Guia do JSAPI</a></dt> + <dd>Mostra a tradução JSAPI de algumas expressões e declarações JavaScript comumente usadas.</dd> + <dt><a href="SpiderMonkey/GC_Rooting_Guide">Guia de enraizamento de GC</a></dt> + <dd>Guia sobre como escrever código compatível com o Generational GC no SpiderMonkey.</dd> + <dt><a href="SpiderMonkey/How_to_embed_the_JavaScript_engine" title="en-US/docs/How_to_embed_the_JavaScript_engine">Como embutir o motor de JavaScript</a></dt> + <dd>Um tutorial mais antigo sobre embutir o SpiderMonkey.</dd> +</dl> + +<h2 id="Hacking_on_SpiderMonkey">Hacking on SpiderMonkey</h2> + +<dl> + <dt><a class="link-https" href="https://wiki.mozilla.org/JavaScript:New_to_SpiderMonkey" title="https://wiki.mozilla.org/JavaScript:New_to_SpiderMonkey">Novo no SpiderMonkey</a></dt> + <dd>A guide to hacking on SpiderMonkey.</dd> + <dt><a href="/en-US/docs/SpiderMonkey/Setting_up_CDT_to_work_on_SpiderMonkey" title="en-US/docs/SpiderMonkey/Setting up CDT to work on SpiderMonkey">Setting up CDT to work on SpiderMonkey</a></dt> + <dd>How to configure Eclipse to work on the SpiderMonkey code.</dd> + <dt><a href="http://blog.cdleary.com/2011/11/contributing-to-spidermonkey/">Contribuindo com SpiderMonkey</a></dt> + <dd>A slidecast that is less than four minutes long.</dd> +</dl> + +<dl> + <dt><a href="/en-US/docs/SpiderMonkey/Running_Automated_JavaScript_Tests" title="Running automated JavaScript tests">Running Automated JavaScript Tests</a></dt> + <dd>How to run the JavaScript test suites.</dd> + <dt><a href="/en-US/docs/SpiderMonkey/Creating_JavaScript_tests" title="en-US/docs/SpiderMonkey/Creating JavaScript tests">Creating JavaScript tests</a></dt> + <dd>How to add tests to the JavaScript test suites.</dd> +</dl> +</div> + +<div class="column-half"> +<h2 id="Referência">Referência</h2> + +<dl> + <dt><a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/JSAPI_reference" title="en-US/docs/SpiderMonkey/JSAPI_Reference">JSAPI Reference</a></dt> + <dd>SpiderMonkey API reference.</dd> + <dt><a href="/en-US/docs/SpiderMonkey/JS_Debugger_API_Reference" title="en-US/docs/SpiderMonkey/JS Debugger API Reference">JS Debugger API Reference</a></dt> + <dd>API reference for the <code>Debugger</code> object introduced in SpiderMonkey 1.8.6, which corresponds to Gecko 8.0 {{ geckoRelease("8.0") }}.</dd> + <dt><a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/Bytecode">Bytecode descriptions</a></dt> + <dd>Listing of SpiderMonkey's bytecodes.</dd> + <dt><a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API">Parser API</a></dt> + <dd>Reflection of the SpiderMonkey parser, made available as a JavaScript API.</dd> +</dl> + +<h2 id="Tips_tricks_and_philosophy">Tips, tricks and philosophy</h2> + +<dl> + <dt><a href="/en-US/docs/SpiderMonkey/Future_directions" title="en-US/docs/SpiderMonkey/Future_directions">Direções futuras</a></dt> + <dd>Futuras direções para funcionalidade, design, e prática de código.</dd> + <dt><a href="/en-US/docs/SpiderMonkey/Internals" title="en-US/docs/SpiderMonkey_Internals">SpiderMonkey Internals</a></dt> + <dd>A design overview and a file-by-file walkthrough of the implementation.</dd> + <dt><a href="/en-US/docs/SpiderMonkey/Bytecodes" title="en-US/docs/SpiderMonkey/Bytecodes">Bytecode Reference</a></dt> + <dd>SpiderMonkey bytecode reference.</dd> + <dt><a href="/en-US/docs/SpiderMonkey/Internals/Garbage_collection" title="en-US/docs/SpiderMonkey/Internals/GC">SpiderMonkey Internals: GC</a></dt> + <dd>Separate internals article on the GC</dd> + <dt><a href="/en-US/docs/SpiderMonkey/Hacking_Tips" title="en-US/docs/SpiderMonkey/Hacking_Tips">SpiderMonkey Internals: Hacking Tips </a></dt> + <dd>Collection of helpful tips & tools for hacking on the engine</dd> +</dl> + +<h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Related Topics</h2> + +<ul> + <li><a href="/en-US/docs/JavaScript" title="en-US/docs/JavaScript">JavaScript</a></li> + <li><a href="/en-US/docs/SpiderMonkey/FOSS" title="en-US/docs/SpiderMonkey/FOSS">FOSS projects using or based on SpiderMonkey</a></li> +</ul> + +<h2 id="Releases">Releases</h2> + +<dl> + <dt><a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases">SpiderMonkey release notes</a></dt> + <dd>Current and past versions: <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/45">45</a>, <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/38">38</a>, <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/31">31</a>, <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/24">24</a>, <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey/Releases/17">17</a></dd> +</dl> + +<dl> + <dt></dt> +</dl> +</div> +</div> diff --git a/files/pt-br/mozilla/projects/spidermonkey/releases/index.html b/files/pt-br/mozilla/projects/spidermonkey/releases/index.html new file mode 100644 index 0000000000..95a09a605a --- /dev/null +++ b/files/pt-br/mozilla/projects/spidermonkey/releases/index.html @@ -0,0 +1,37 @@ +--- +title: Lançamentos do SpiderMonkey +slug: Mozilla/Projects/SpiderMonkey/Releases +tags: + - SpiderMonkey +translation_of: Mozilla/Projects/SpiderMonkey/Releases +--- +<div>{{SpiderMonkeySidebar("Releases")}}</div> + +<div class="summary"> +<p>Essa página lista as notas de lançamento do <a href="/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a>.</p> +</div> + +<h2 id="Lançamento_atual">Lançamento atual</h2> + +<ul> + <li><a href="Releases/45">SpiderMonkey 45</a></li> +</ul> + +<h2 id="Lançamento_futuro">Lançamento futuro</h2> + +<ul> + <li><a href="Releases/52">SpiderMonkey 52</a></li> +</ul> + +<h2 id="Lançamentos_anteriores">Lançamentos anteriores</h2> + +<ul> + <li><a href="Releases/38">SpiderMonkey 38</a></li> + <li><a href="Releases/31">SpiderMonkey 31</a></li> + <li><a href="Releases/24">SpiderMonkey 24</a></li> + <li><a href="Releases/17">SpiderMonkey 17</a></li> + <li><a href="Releases/1.8.8">SpiderMonkey 1.8.8</a></li> + <li><a href="Releases/1.8.7">SpiderMonkey 1.8.7</a></li> + <li><a href="Releases/1.8.5">SpiderMonkey 1.8.5</a></li> + <li><a href="Releases/1.8">SpiderMonkey 1.8</a></li> +</ul> diff --git a/files/pt-br/mozilla/projetos-do-mozilla-no-github/index.html b/files/pt-br/mozilla/projetos-do-mozilla-no-github/index.html new file mode 100644 index 0000000000..bb0223e440 --- /dev/null +++ b/files/pt-br/mozilla/projetos-do-mozilla-no-github/index.html @@ -0,0 +1,129 @@ +--- +title: Projetos do Mozilla no Github +slug: Mozilla/projetos-do-mozilla-no-github +tags: + - GitHub + - Guia do Desenvolvedor + - Guia(2) + - Mozilla + - Source code +translation_of: Mozilla/Mozilla_on_GitHub +--- +<p><span class="seoSummary">Embora a Mozilla possua boa parte de seu <em>core</em> localizado nos servidores da Mozilla <a href="/en-US/docs/Mercurial">Mercurial</a>. Existem projetos como o <a href="/en-US/docs/mozilla-central">mozilla-central</a> e outras ferramentes e serviços hospedadas no <a href="https://github.com/">GitHub</a>. Este artigo oferece um guia rápido de como contribuir para o Mozilla no GitHub, e também uma lista dos repositórios mais bacanas no GitHub que envolve a Mozilla.</span></p> + +<h2 id="Vamos_começar">Vamos começar</h2> + +<p>Você pode dar uma olhada no código hospedado no GitHub, sem possuir uma conta; esta é a primeira coisa que deve saber. Fazer mais—isto é, contribuir no código já existente, ou <em>forkar</em> o repositório e começar a escrever o seu próprio em cima do existente.—para isso você precisará de uma conta no GitHub. Você pode ver como <a href="https://help.github.com/articles/set-up-git/">criar uma conta</a> no site do GitHub.</p> + +<p>A maioria dos projetos da Mozilla estão localizados em repositórios gerenciados pela <a href="https://github.com/mozilla/">organização Mozilla</a>. Este é um ótimo lugar para dar uma olhada em repositórios que não estão listados abaixo.</p> + +<h2 id="Projetos">Projetos</h2> + +<p>Esta lista cobre os maiores e também os mais importantes projetos que nós temos hospedados no GitHub. Isto não é uma lista completa, até porque, é díficil para nós acompanharmos os projetos menores e adiciona-los aqui (e as vezes, até mesmo os projetos grandes!). Você pode ver a <a href="https://github.com/mozilla">lista completa dos projetos da Mozilla no Github</a>.</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Nome do Projeto</th> + <th scope="col">Descrição</th> + </tr> + </thead> + <tbody> + <tr> + <td><a href="https://github.com/mozilla/pdf.js">PDF.js</a></td> + <td>Um leitor portátil de arquivos (PDF) escrito totalmente em <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">JavaScript</a>.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla/shumway">Shumway</a></td> + <td><a href="https://github.com/mozilla/shumway">Shumway</a> é uma Flash VM e um auto-executável escrito em JavaScript.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla/addon-sdk">addon-sdk</a></td> + <td>A extensão SDK da Mozilla.</td> + </tr> + <tr> + <td><a href="https://github.com/jdm/asknot">asknot</a></td> + <td>O "<a href="http://whatcanidoformozilla.org/#!/progornoprog/translate">O que eu posso fazer para a Mozilla?</a>" web site, que lhe mostrará como contribuir para o Mozilla.</td> + </tr> + <tr> + <td><a href="https://github.com/jdm/bugsahoy">bugsahoy</a></td> + <td>Uma <a class="external" href="https://codetribute.mozilla.org/">página que ajudará novos contribuidores da Mozilla</a> a encontrar bugs a serem corrigidos.</td> + </tr> + <tr> + <td><a href="https://github.com/Yoric/bugzilla-dashboard">bugzilla-dashboard</a></td> + <td>Um <em>dashboard</em> muito bacana feito para te ajudar a ter uma noção do que esta acontecendo com os seus bugs.</td> + </tr> + <tr> + <td><a href="https://github.com/bbondy/codefirefox">codefirefox</a></td> + <td>O site do <a href="http://codefirefox.com/">CodeFirefox</a>, possui vídeos e tutoriais sobre como contribuir para o Firefox e outros projetos da Mozilla em geral.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla/dxr">dxr</a></td> + <td>Uma ferramenta inteligente para depuração de código.</td> + </tr> + <tr> + <td><a href="https://github.com/kripken/emscripten">emscripten</a></td> + <td>O <a href="/en-US/docs/Mozilla/Projects/Emscripten">Emscripten</a> é um compilador LLVM para JavaScript.</td> + </tr> + <tr> + <td><a href="https://github.com/campd/fxdt-adapters">fxdt-adapters</a></td> + <td>O <em>Firefox Developer Tools Adapter</em> permite que você depure seus códigos de lugares variados pelo <em>Firefox Developer Tools</em>.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla/gecko-dev">gecko-dev</a></td> + <td>Apenas um manual dos repositórios de código-fechado da Mozilla hospedados no <a href="/en-US/docs/Mozilla/Mercurial">Mercurial</a>.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla/kitsune">kitsune</a></td> + <td><a href="http://kitsune.readthedocs.org/">Kitsune</a> é uma plataforma que gerencia o <a href="https://support.mozilla.org/pt-BR/">suporte da Mozilla</a>, SUMO.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla/kuma">kuma</a></td> + <td>O projeto <a href="https://www.djangoproject.com/">Django</a> que compõem este site (MDN).</td> + </tr> + <tr> + <td><a href="https://github.com/mdn">mdn</a></td> + <td>Code samples for the <a href="https://developer.mozilla.org/">MDN Web site</a>. Exemplos de código para o <a href="https://developer.mozilla.org/pt-BR/">site da MDN</a>.</td> + </tr> + <tr> + <td><a href="https://github.com/mozbrick">mozbrick</a></td> + <td>O projeto <a href="/en-US/Apps/app_layout/Mozilla_Brick_ready_made_UI_components">Brick</a> da Mozilla.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla-b2g">mozilla-B2G</a></td> + <td>O projeto <a href="/pt-BR/docs/Archive/B2G_OS">Firefox OS</a>.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla-appmaker">mozilla-appmaker</a></td> + <td>O projeto Appmaker -- uma ferramenta Web que ajuda os não-programadores a criarem seus aplicativos.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla-l10n/">mozilla-l10n</a></td> + <td>Ferramentas e scripts criados pelos <em>drivers</em> de <a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Localization">localização</a>.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla-metrics">mozilla-metrics</a></td> + <td>Ferramentas usadas para coletar dados sobre os códigos da Mozilla.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla-services">mozilla-services</a></td> + <td>O projeto de <a href="https://blog.mozilla.org/services/">Serviços na Núvem</a> da Mozilla.</td> + </tr> + <tr> + <td><a href="https://github.com/opennews">opennews</a></td> + <td>O projeto Knight-Mozilla, ajuda a comunidade de jornalismo/tecnologia a fazer seu melhor em compartilhamento de código e conhecimento.</td> + </tr> + <tr> + <td><a href="https://github.com/mozilla/pluotsorbet">PluotSorbet</a></td> + <td>Uma máquina virtual compátivel com J2ME, escrito totalmente em JavaScript.</td> + </tr> + <tr> + <td><a href="https://github.com/rust-lang">rust-lang</a></td> + <td>A linguagem de programação Rust, criada para um código seguro.</td> + </tr> + <tr> + <td><a href="https://github.com/servo">servo</a></td> + <td>A próxima geração de mecanismo de renderização.</td> + </tr> + </tbody> +</table> diff --git a/files/pt-br/mozilla/rust/index.html b/files/pt-br/mozilla/rust/index.html new file mode 100644 index 0000000000..51420e8d2b --- /dev/null +++ b/files/pt-br/mozilla/rust/index.html @@ -0,0 +1,47 @@ +--- +title: A linguagem de programação Rust +slug: Mozilla/Rust +tags: + - Desenvolvimento Web + - Mozilla + - linguagens + - paralelismo + - rust + - sistemas +translation_of: Mozilla/Rust +--- +<p><img alt="Rust logo" src="https://www.rust-lang.org/logos/rust-logo-blk.svg" style="float: left; height: 150px; width: 150;"><a href="https://www.rust-lang.org/pt-BR/">Rust</a> é uma nova linguagem de programação para sistemas <em>open-source</em> criada pela Mozilla juntamente com uma comunidade de voluntários, projetada para ajudar desenvolvedores a criarem aplicações rápidas e seguras, que queiram aproveitar ao máximo as poderosas funcionalidades dos processadores modernos multi-cores. Ela previne falhas de segmentação e garante a segurança nas <em>Threads</em>, tudo através de uma sintaxe fácil de aprender.</p> + +<p>Além disso, Rust oferece custo zero nas suas abstrações, mudanças de semânticas, garantia de segurança de memória, <em>threads</em> sem condições de corrida, <em>generics</em> baseados em traços, <em>pattern matching</em> (casamento de padrões), inferência de tipos e <em>binding</em> eficiente para C, com o menor tamanho em tempo de execução.</p> + +<p>Para aprender mais sobre Rust, você pode:</p> + +<ul> + <li>Assistir os vídeos abaixo para um olhar mais de perto no poder e nos benefícios que Rust provê.</li> + <li>Ler o livro online <em><a href="https://doc.rust-lang.org/book/">The Rust Programming Language</a></em>.</li> + <li>Baixar o compilador de Rust, ver os exemplos, e aprender tudo que você poderia desejar saber, através do <a href="https://www.rust-lang.org/pt-BR/">site oficial de Rust</a>.</li> +</ul> + +<h2 id="Rust_e_o_futuro_da_programação_de_sistemas">Rust e o futuro da programação de sistemas</h2> + +<p>{{EmbedYouTube("8EPsnf_ZYU0")}}</p> + +<h2 id="Desbloqueando_o_poder_do_paralelismo_com_Rust">Desbloqueando o poder do paralelismo com Rust</h2> + +<p>{{EmbedYouTube("cNeIOt8ZdAY")}}</p> + +<h2 id="Rust_para_desenvolvedores_web">Rust para desenvolvedores web</h2> + +<p>{{EmbedYouTube("FfoXFnzZbBM")}}</p> + +<h2 id="Programação_de_sistemas_seguros_com_Rust">Programação de sistemas seguros com Rust</h2> + +<p>{{EmbedYouTube("P3sfNGtpuxc")}}</p> + +<h2 id="Crescendo_a_comunidade_Rust">Crescendo a comunidade Rust</h2> + +<p>{{EmbedYouTube("duv0tuPAnO0")}}</p> + +<h2 id="Colocando_Rust_em_produção_na_Mozilla">Colocando Rust em produção na Mozilla</h2> + +<p>{{EmbedYouTube("2RhbYpgVpg0")}}</p> diff --git a/files/pt-br/mozilla/segurança/index.html b/files/pt-br/mozilla/segurança/index.html new file mode 100644 index 0000000000..1aa95fef95 --- /dev/null +++ b/files/pt-br/mozilla/segurança/index.html @@ -0,0 +1,30 @@ +--- +title: Segurança do navegador +slug: Mozilla/Segurança +tags: + - Desenvolvimento Firefox + - Firefox + - Mozilla + - Segurança +translation_of: Mozilla/Security +--- +<p><span class="seoSummary">Um importante aspecto do desenvolvimento de código para qualquer navegador, incluindo o Firefox, assim como qualquer projeto orientado à Web, é sua segurança. Esses artigos fornecem importantes guias e referências para garantir que o código que você escrever é seguro, incluindo recomendações de design e diretrizes de teste.</span></p> + +<p>{{LandingPageListSubpages}}</p> + +<section id="Quick_Links"> +<ol> + <li><a href="http://www.mozilla.org/security/bug-bounty.html" title="We appreciate all bug reports, but we back up our appreciation of reports of severe security problems with a $3000 reward!">Programa de recompensa por bug</a></li> + <li><a href="http://www.mozilla.org/projects/security/known-vulnerabilities.html" title="Learn from our past mistakes.">Vulnerabilidade e soluções conhecidas no Mozilla</a></li> + <li><a href="/en-US/docs/Mozilla/Security">Depurando e testando</a> + <ol> + <li>{{Link("/pt-BR/docs/Mozilla/Testing/Analise_estatica_Clang")}}</li> + <li>{{Link("/en-US/docs/Debugging_Mozilla_with_Valgrind")}}</li> + <li>{{Link("/en-US/docs/Mozilla/Testing/Firefox_and_Address_Sanitizer")}}</li> + <li>{{Link("/pt-BR/docs/Mozilla/QA/Fuzzing")}}</li> + </ol> + </li> + <li>{{Link("/pt-BR/docs/Developer_Guide")}}</li> + <li>{{Link("/pt-BR/docs/Web/Security")}}</li> +</ol> +</section> diff --git a/files/pt-br/mozilla/segurança/travamentos_exploráveis/index.html b/files/pt-br/mozilla/segurança/travamentos_exploráveis/index.html new file mode 100644 index 0000000000..0a943d7c67 --- /dev/null +++ b/files/pt-br/mozilla/segurança/travamentos_exploráveis/index.html @@ -0,0 +1,51 @@ +--- +title: Travamentos exploráveis +slug: Mozilla/Segurança/Travamentos_exploráveis +translation_of: Mozilla/Security/Exploitable_crashes +--- +<p><span class="seoSummary">Este artigo ajudará você a determinar se um travamento é exploravel, encontrar falhas que são exploráveis para corrigir falhas exploráveis.</span></p> + +<h2 id="O_que_é_um_travamento_explorável">O que é um travamento explorável?</h2> + +<p>Um relatório de falha do seu depurador, seu SO, ou <a href="https://crash-stats.mozilla.com/" title="https://crash-stats.mozilla.com/">Status de travamento Mozilla</a> pode dizer muito sobre a existência ou nao se um travamento é potencialmente explorável. Você precisa olhar principalmente para três coisas , nessa ordem :</p> + +<ol> + <li>Analise <strong>a estrutura superior do rastreamento de pilha</strong>. Se você ver um endereço hexadecimal como 0x292c2830 em vez de um nome de função como nsListBoxBodyFrame::GetRowCount no topo da pilha, o bug motivou o programa para transferir o controle para um "Aleatória" parte da memoória que nao faz parte do programa. Essas interrupções são quase sempre possiveis de serem exploradas para executar um código arbitrário.</li> + <li>Olhe o motivo do travamento, será normalmente algo como "KERN_PROTECTION_FAILURE (0x0002) em 0x00000000". Este é normalmente localizado à direita acima do rastreamento de pilha. O último numero, neste caso 0x00000000, é <strong> o endereço de memória que o Firefox foi impedido de acessar</strong>. Se o endereço é sempre zero (ou próximo de zero, como 0x0000001c), provavelmente é um bug de referência nula.Estes erros fazem com que o navegador trave, mas fazem isso de forma previsível, de modo que nao são exploráveis. A maioria dos travamentos se enquadram nessa categoria.</li> + <li>Verifique o <strong>comprimento do rastreamento de pilha</strong>. Se for mais de 300 funçoes no tempo, é provavel que seja um acidente de recursão demais. Como de referência nula, essas falhas não são exploráveis.</li> +</ol> + +<p>Qualquer outro travamento onde o Firefox tenta usar a memória que nao têm acesso indica algum tipo de erro de segurança de memória. Essas interrupções podem muitas vezes serem exploradas para executar código arbitrário, mas você nao pode ser tão certo como no caso de ver um endereço falso no topo da pilha na etapa 1.</p> + +<h2 id="Procurando_travamentos_exploráveis">Procurando travamentos exploráveis</h2> + +<p>Travamentos exploráveis são frequentemente descobertos através de testes normais e uso, quando os desenvolvedores reconhecem uma pilha de travamento em gdb ou submetidos a um erro que pode ser explorado.</p> + +<p>Além disso, os desenvolvedores Mozilla fazem uso pesado de duas ferramentas em particular para encontrar situaçoes exploráveis antes que eles apareçam em relatórios de falhas exploráveis.</p> + +<p>A primeira ferramenta é o <a href="http://www.chromium.org/developers/testing/addresssanitizer" title="http://www.chromium.org/developers/testing/addresssanitizer">AddressSanitizer (ASAN)</a>. Há <a href="https://developer.mozilla.org/en-US/docs/Building_Firefox_with_Address_Sanitizer" title="ASAN with Mozilla Projects">um artigo MDN </a> documentando seu uso com projetos Mozilla.</p> + +<p>A outra ferramenta é o <a href="http://valgrind.org/" title="http://valgrind.org/">Valgrind</a>. Há <a href="https://developer.mozilla.org/en-US/docs/Debugging_Mozilla_with_Valgrind" title="Valgrind with Mozilla Projects">um artigo no MDN</a> documentando seu uso com projetos Mozilla.</p> + +<h2 id="Próximos_passos">Próximos passos</h2> + +<p>Uma vez que você tenha determinado que a falha é potencialmente explorável , tome as seguintes medidas. Se você precisar de ajuda com qualquer um das etapas (Por exempl talvez necessite previlégios bugzilla) Envie um email <a href="mailto:security@mozilla.org" title="mailto:security@mozilla.org">security@mozilla.org</a><strong>.</strong></p> + +<ol> + <li>Certifique-se que o erro é no arquivo.</li> + <li>Marque o erro como segurança sensivel colocando o erro no grupo de "Segurança Sensivel". Faça isso antes de realizar comentários ou tomar ações que exponha publicamente a exploração.</li> + <li>Coloque uma <a href="https://wiki.mozilla.org/Security_Severity_Ratings" title="Security Severity Rating">classificação de segurança grave </a>nas palavras chaves do erro.Se você nao tiver certeza de qual classificação dar, coloque na mais alta de modo que o erro obtenha mais atençao.</li> + <li>Explique em um comentário por qual razão a questão parecer ser explorável.</li> +</ol> + +<h2 id="Outras_ferramentas">Outras ferramentas</h2> + +<p>A Apple tem uma ferramenta chamada "crashwrangler" que ainda é mantida desde 2012. Há pouca informação pública sobre ela, e é dificil encontrar mesmo no site de desenvolvedor Apple. Para obtê-lo vá em Seçao de Downloads Do Centro de Desenvolvimento Apple -> Outros Downloads -> procure por "crashwrangler".</p> + +<p>A Microsoft lançou uma ferramenta de extensão de depurador em 2009 chamado "!exploitable". Ele não foi atualizado desde 2009.</p> + +<h2 id="Veja_também">Veja também</h2> + +<ul> + <li><a class="external" href="http://www.squarefree.com/2006/11/02/determining-whether-a-crash-looks-exploitable/" title="http://www.squarefree.com/2006/11/02/determining-whether-a-crash-looks-exploitable/">Post no blog de Jesse Runderman's sobre a possibilidade de exploração em 2006.</a></li> +</ul> diff --git a/files/pt-br/mozilla/tech/index.html b/files/pt-br/mozilla/tech/index.html new file mode 100644 index 0000000000..8a54865338 --- /dev/null +++ b/files/pt-br/mozilla/tech/index.html @@ -0,0 +1,15 @@ +--- +title: Mozilla technologies +slug: Mozilla/Tech +tags: + - Landing + - Mozilla + - NeedsTranslation + - Reference + - TopicStub + - XUL +translation_of: Mozilla/Tech +--- +<p>Mozilla has several technologies used as components of its projects. These are documented here.</p> + +<p>{{LandingPageListSubpages}}</p> diff --git a/files/pt-br/mozilla/tech/xpcom/como_construir_um_componente_xpcom_em_javascript/index.html b/files/pt-br/mozilla/tech/xpcom/como_construir_um_componente_xpcom_em_javascript/index.html new file mode 100644 index 0000000000..f1c6757292 --- /dev/null +++ b/files/pt-br/mozilla/tech/xpcom/como_construir_um_componente_xpcom_em_javascript/index.html @@ -0,0 +1,221 @@ +--- +title: Como construir um componente XPCOM em Javascript +slug: Mozilla/Tech/XPCOM/Como_construir_um_componente_XPCOM_em_Javascript +translation_of: Mozilla/Tech/XPCOM/Guide/Building_components_in_JavaScript +--- +<p><span id="result_box" lang="pt"><span class="hps">Este é um tutorial</span> <span class="hps">"Olá Mundo"</span> <span class="hps">para a criação de</span> <span class="hps">um componente</span> <span class="hps">XPCOM</span> <span class="hps">em</span> <span class="hps">JavaScript</span><span>.</span> <span class="hps">Este</span> <span class="hps">tutorial</span> <span class="hps">não descreve</span> <span class="hps">como e por que</span> <span class="hps">XPCOM</span> <span class="hps">funciona da maneira que</span> <span class="hps">faz, ou</span> <span class="hps">o que cada</span> <span class="hps">bit</span> <span class="hps">do código de exemplo</span> <span class="hps">faz.</span> <span class="hps">Isso</span> <span class="hps">foi detalhado</span> <span class="hps">em outro lugar.</span> <span class="hps">Este</span> <span class="hps">tutorial</span> <span class="hps">irá mostrar-lhe</span> <span class="hps">o que você precisa</span> <span class="hps">fazer para obter um</span> <span class="hps">componente</span> <span class="hps">de trabalho</span> <span class="hps">como</span> <span class="hps">poucos e</span> <span class="hps">como passos</span> <span class="hps">mais simples possível.</span></span></p> +<h2 id="Implementation" name="Implementation"><span class="short_text" id="result_box" lang="pt"><span class="hps">Implementação</span></span></h2> +<p><span id="result_box" lang="pt"><span class="hps">Este componente</span> <span class="hps">exemplo,</span> <span class="hps">irá expor</span> <span class="hps">um único método</span><span>, que retorna a</span> <span class="hps atn">string "</span><span>Olá</span> <span class="hps">Mundo!"</span><span>.</span></span></p> +<h3 id="Defining_the_Interface" name="Defining_the_Interface"><span class="short_text" id="result_box" lang="pt"><span class="hps">Definindo</span> <span class="hps">a Interface</span></span></h3> +<p><span id="result_box" lang="pt"><span class="hps">Se você</span> <span class="hps">quiser usar o</span> <span class="hps">componente</span> <span class="hps">em outras</span> <span class="hps">componentes XPCOM</span><span>, você deve definir</span> <span class="hps">as interfaces que</span> <span class="hps">você</span> <span class="hps">deseja expor</span><span>.</span> <span class="hps">Se você</span> <span class="hps">quiser usar o seu</span> <span class="hps">único componente</span> <span class="hps">de</span> <span class="hps">JavaScript,</span> <span class="hps">você pode</span> <span class="hps">pular para</span> <span class="hps">a</span></span> <a href="#Using_XPCOMUtils"><span class="short_text" id="result_box" lang="pt"><span class="hps">próxima seção</span></span></a>.</p> +<p><span id="result_box" lang="pt"><span class="hps">Há</span> <span class="hps">muitas interfaces</span> <span class="hps">já</span> <span class="hps">definidas nos aplicativos</span> <span class="hps">Mozilla</span><span>, então</span> <span class="hps">você pode não precisar</span> <span class="hps">de definir</span> <span class="hps">um novo.</span> <span class="hps">Você pode procurar</span> <span class="hps">as interfaces</span> <span class="hps">XPCOM</span> <span class="hps">existentes</span> <span class="hps">em vários locais</span> <span class="hps">no código fonte</span> <span class="hps">Mozilla,</span> <span class="hps">ou</span> <span class="hps">usando </span></span><a class="external" href="http://www.ondrejd.info/projects/xpcomviewer/" title="http://www.ondrejd.info/projects/xpcomviewer/">XPCOMViewer</a>, <span id="result_box" lang="pt"><span class="hps">uma interface gráfica</span> <span class="hps">para navegar</span> <span class="hps">interfaces e</span> <span class="hps">componentes</span> <span class="hps">registrados.</span> <span class="hps">Você pode baixar</span> <span class="hps">uma versão antiga do</span> <span class="hps">XPCOMViewer</span> <span class="hps">que funciona</span> <span class="hps">com</span> <span class="hps">Firefox 1.5</span> <span class="hps">a partir de</span></span> <a class="external" href="http://downloads.mozdev.org/xpcomviewer/">mozdev mirrors</a>.</p> +<p><span id="result_box" lang="pt"><span class="hps">Se</span> <span class="hps">existe</span> <span class="hps">uma interface</span> <span class="hps">que atenda às suas</span> <span class="hps">necessidades, então</span> <span class="hps">você não</span> <span class="hps">precisa escrever</span> <span class="hps">uma</span> <span class="hps">IDL</span><span>,</span> <span class="hps">ou</span> <span class="hps">compilar uma</span> <span class="hps">biblioteca de tipos</span><span>,</span> <span class="hps">e pode</span> <span class="hps">pular para</span> <span class="hps">a</span></span> <a href="#Using_XPCOMUtils"><span class="short_text" id="result_box" lang="pt"><span class="hps">próxima seção</span></span></a>.</p> +<p><span id="result_box" lang="pt"><span class="hps">Se você não</span> <span class="hps">encontrar</span> <span class="hps">uma relação</span> <span class="hps">pré-existente</span> <span class="hps">adequada,</span> <span class="hps">em seguida,</span> <span class="hps">você deve definir</span> <span class="hps">o seu próprio.</span> <span class="hps">XPCOM</span> <span class="hps">usa</span> <span class="hps">um dialeto do</span> <span class="hps">IDL</span> <span class="hps">para</span> <span class="hps">definir interfaces</span><span>, chamada</span></span> <a href="/en/XPIDL" title="en/XPIDL">XPIDL</a>. <span id="result_box" lang="pt"><span class="hps">Aqui está a</span> <span class="hps">definição</span> <span class="hps">XPIDL</span> <span class="hps">para o nosso</span> <span class="hps">componente</span> <span class="hps">Olá Mundo</span></span>:</p> +<p>HelloWorld.idl</p> +<pre>#include "nsISupports.idl" + +[scriptable, uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)] +interface nsIHelloWorld : nsISupports +{ + string hello(); +}; +</pre> +<p><span id="result_box" lang="pt"><span class="hps">Observe que você deve</span> <span class="hps">gerar</span> <span class="hps">um novo</span> <span class="hps">UUID</span> <span class="hps">para cada componente</span> <span class="hps">XPCOM</span> <span class="hps">que você criar.</span> <span class="hps">ver</span></span> <a href="/en/Generating_GUIDs" title="en/Generating_GUIDs">Generating GUIDs</a> <span class="short_text" id="result_box" lang="pt"><span class="hps">para mais informações</span></span>.</p> +<h3 id="Compiling_the_Typelib" name="Compiling_the_Typelib"><span class="short_text" id="result_box" lang="pt"><span class="hps">Compilando o</span> <span class="hps">Typelib</span></span></h3> +<p><span id="result_box" lang="pt"><span class="hps">Sua</span> <span class="hps">definição de interface</span> <span class="hps">deve ser compilado</span> <span class="hps">em um formato binário</span> <span class="hps atn">(</span><span>XPT)</span><span>, a fim de</span> <span class="hps">ser registrado e</span> <span class="hps">usado</span> <span class="hps">em aplicativos</span> <span class="hps">Mozilla</span><span>.</span> <span class="hps">A compilação</span> <span class="hps">pode ser feito</span> <span class="hps">usando o</span> <span class="hps">Gecko</span> <span class="hps">SDK.</span> <span class="hps">Você pode aprender</span> <span class="hps">como obter</span> <span class="hps">Mac</span><span>, Linux e</span> <span class="hps">versões</span> <span class="hps">do Windows do</span> <span class="hps">Gecko</span> <span class="hps">SDK</span> <span class="hps">lendo o artigo</span></span> <a href="/en/Gecko_SDK" title="en/Gecko_SDK">Gecko SDK</a>.</p> +<h4 id="Para_o_código_de_fora_da_árvore"><span class="short_text" id="result_box" lang="pt"><span class="hps">Para o código de</span> <span class="hps">fora da árvore</span></span></h4> +<div class="note"> + <span id="result_box" lang="pt"><span class="hps"><strong>Nota</strong>: No Windows</span><span>, se você</span> <span class="hps">baixar o</span> <span class="hps">Gecko</span> <span class="hps">SDK</span><span>, sem</span> <span class="hps">toda</span> <span class="hps">a árvore de criação</span><span>, você vai</span> <span class="hps">estar faltando</span> <span class="hps">algumas</span> <span class="hps">DLLs</span> <span class="hps">necessárias para</span> <span class="hps">xpidl.exe</span> <span class="hps">e ele será executado</span> <span class="hps">sem erros</span><span>, mas não</span> <span class="hps">fazer nada.</span> <span class="hps">Para corrigir</span> <span class="hps">esta transferência</span> <span class="hps">o </span></span><a class="external" href="http://ftp.mozilla.org/pub/mozilla.org/mozilla/source/wintools.zip">Mozilla build <span class="short_text" id="result_box" lang="pt"><span class="hps">ferramentas para</span></span> Windows</a> <span id="result_box" lang="pt"><span class="hps">e copiar as</span> <span class="hps">DLLs</span> <span class="hps">do</span> <span class="hps">windows \</span> <span class="hps">bin \</span> <span class="hps">x86</span> <span class="hps">dentro do</span> <span class="hps">zip</span> <span class="hps">para o diretório</span> <span class="hps">bin</span> <span class="hps">do</span> <span class="hps">Gecko</span> <span class="hps">SDK.</span></span></div> +<div class="note"> + <span id="result_box" lang="pt"><span class="hps"><strong>Nota</strong>: A versão</span> <span class="hps">Mac</span> <span class="hps">do</span> <span class="hps">SDK</span> <span class="hps">fornecido</span> <span class="hps">para download</span> <span class="hps">é</span> <span class="hps">apenas para</span> <span class="hps">PowerPC</span><span>.</span> <span class="hps">Se você precisa de</span> <span class="hps">uma versão</span> <span class="hps">Intel</span><span>,</span> <span class="hps">você precisa</span> <span class="hps">compilá-lo</span> <span class="hps">como descrito</span> <span class="hps">na página.</span></span></div> +<p><span id="result_box" lang="pt"><span class="hps">Executar este comando</span> <span class="hps">para compilar o</span> <span class="hps">typelib</span><span>.</span> <span class="hps">Aqui,</span></span> <code>{sdk_dir}</code> <span id="result_box" lang="pt"><span class="hps">é o</span> <span class="hps">diretório no qual você</span> <span class="hps">descompactou o</span> <span class="hps">Gecko</span> <span class="hps">SDK.</span></span></p> +<pre class="eval">{sdk_dir}/bin/xpidl -m typelib -w -v -I {sdk_dir}/idl -e HelloWorld.xpt HelloWorld.idl +</pre> +<div class="note"> + <span id="result_box" lang="pt"><span class="hps"><strong>Nota</strong>: No</span> <span class="hps">Windows, você deve</span> <span class="hps">usar barras</span> <span class="hps">para o caminho</span> <span class="hps">de inclusão.</span></span></div> +<div class="note"> + <strong>Nota:</strong> (o -I flag é um uppercase i, <span class="short_text" id="result_box" lang="pt"><span class="hps">não é um</span></span> lowercase L.)</div> +<p><span id="result_box" lang="pt"><span class="hps">Isto irá criar</span> <span class="hps">o</span> <span class="hps">arquivo</span> <span class="hps">HelloWorld.xpt</span> <span class="hps">typelib</span> <span class="hps">no diretório de trabalho</span> <span class="hps">atual.</span></span></p> +<h4 id="Para_um_novo_componente_em_FirefoxThunderbirdB2G"><span class="short_text" id="result_box" lang="pt"><span class="hps">Para um novo</span> <span class="hps">componente</span> <span class="hps">em</span> <span class="hps">Firefox/Thunderbird/B2G</span></span></h4> +<p><span id="result_box" lang="pt"><span class="hps">Se você estiver adicionando</span> <span class="hps">uma nova funcionalidade</span> <span class="hps">para</span> <span class="hps">aplicações no</span> <span class="hps">repositório</span> <span class="hps atn">mozilla-</span><span>central,</span> <span class="hps">você pode criar um</span> <span class="hps">Makefile</span> <span class="hps">listando os arquivos</span> <span class="hps">IDL</span> <span class="hps">e</span> <span class="hps">o sistema de compilação</span> <span class="hps">irá gerar</span> <span class="hps">automaticamente o</span> <span class="hps">typelib</span><span>.</span> <span class="hps">A</span> <span class="hps">amostra</span> <span class="hps">Makefile.in</span></span></p> +<pre># 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/. +DEPTH = @DEPTH@ +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + + +<span id="the-code"># MODULE specifies where header files from this Makefile are installed</span> +# Use dom if your component implements a DOM API +MODULE = dom + +# Name of the typelib +XPIDL_MODULE = dom_apps + +# Set to 1 if the module should be part of the Gecko Runtime common to all applications +GRE_MODULE = 1 + +# The IDL sources +XPIDLSRCS = \ + HelloWorld.idl \ + $(NULL) + +include $(topsrcdir)/config/rules.mk + +XPIDL_FLAGS += \ + -I$(topsrcdir)/dom/interfaces/base \ + -I$(topsrcdir)/dom/interfaces/events \ + $(NULL)</pre> +<h3 id="Using_XPCOMUtils" name="Using_XPCOMUtils"><span class="short_text" id="result_box" lang="pt"><span class="hps">Criando o</span> <span class="hps">componente usando</span> <span class="hps">XPCOMUtils</span></span></h3> +<p>{{ Fx_minversion_inline(3) }} em <a href="/en/Firefox_3_for_developers" title="en/Firefox_3_for_developers">Firefox 3</a> <span class="short_text" id="result_box" lang="pt"><span class="hps">e mais tarde</span> <span class="hps">você pode usar</span> <span class="hps">importação </span></span><a href="/en/JavaScript_code_modules/XPCOMUtils.jsm" title="en/XPCOMUtils.jsm">XPCOMUtils.jsm</a> <span class="short_text" id="result_box" lang="pt"><span class="hps">utilização</span></span> <a href="/en/Components.utils.import" title="en/Components.utils.import">Components.utils.import</a> <span id="result_box" lang="pt"><span class="hps">para simplificar o processo</span> <span class="hps">de escrever o seu</span> <span class="hps">componente</span> <span class="hps">ligeiramente.</span> <span class="hps">A biblioteca</span> <span class="hps">importada</span> <span class="hps">contém funções para</span> <span class="hps">gerar o</span> <span class="hps">módulo</span><span>, a fábrica,</span> <span class="hps">e</span> <span class="hps">os</span> <span class="hps">NSGetModule</span> <span class="hps">e</span> <span class="hps">QueryInterface</span> <span class="hps">funções para você</span><span>.</span> <span class="hps"><strong>Nota</strong>:</span> <span class="hps">ele não faz</span> <span class="hps">o trabalho de criar</span> <span class="hps">o arquivo de</span> <span class="hps">definição de interface</span> <span class="hps">ou</span> <span class="hps">a biblioteca de tipos</span> <span class="hps">para você, então</span> <span class="hps">você ainda tem que</span> <span class="hps">passar por essas</span> <span class="hps">etapas anteriores</span><span>, caso não tenham</span> <span class="hps">sido feito.</span> <span class="hps">A biblioteca</span> <span class="hps">proporciona</span> <span class="hps">um exemplo simples de</span> <span class="hps">sua utilização</span> <span class="hps">no código fonte</span></span> ({{ Source("js/src/xpconnect/loader/XPCOMUtils.jsm") }}), <span id="result_box" lang="pt"><span class="hps">mas aqui é</span> <span class="hps">outro usando</span> <span class="hps">este exemplo.</span> <span class="hps">Para começar</span><span>, inclua uma linha</span> <span class="hps">no topo da</span> <span class="hps">sua interface</span> <span class="hps">para importar a biblioteca</span> <span class="hps">XPCOMUtils</span><span>:</span></span></p> +<pre class="brush: js">Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); +</pre> +<p><span id="result_box" lang="pt"><span class="hps">em seguida, implementar</span> <span class="hps">a interface</span> <span class="hps">da mesma forma que</span> <span class="hps">fiz</span> <span class="hps">acima, exceto</span> <span class="hps">com algumas modificações</span> <span class="hps">para que</span> <span class="hps">XPCOMUtils</span> <span class="hps">pode configurá-lo</span> <span class="hps">corretamente:</span></span></p> +<pre class="brush: js">/*********************************************************** +class definition +***********************************************************/ + +//class constructor +function HelloWorld() { +// If you only need to access your component from Javascript, uncomment the following line: +//this.wrappedJSObject = this; +} + +// class definition +HelloWorld.prototype = { + + // properties required for XPCOM registration: + classDescription: "My Hello World Javascript XPCOM Component", + classID: Components.ID("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"), + contractID: "@dietrich.ganx4.com/helloworld;1", + + // [optional] custom factory (an object implementing nsIFactory). If not + // provided, the default factory is used, which returns + // |(new MyComponent()).QueryInterface(iid)| in its createInstance(). + _xpcom_factory: { ... }, + + // [optional] an array of categories to register this component in. + _xpcom_categories: [{ + + // Each object in the array specifies the parameters to pass to + // nsICategoryManager.addCategoryEntry(). 'true' is passed for both + // aPersist and aReplace params. + category: "some-category", + + // optional, defaults to the object's classDescription + entry: "entry name", + + // optional, defaults to the object's contractID (unless 'service' is specified) + value: "...", + + // optional, defaults to false. When set to true, and only if 'value' is not + // specified, the concatenation of the string "service," and the object's contractID + // is passed as aValue parameter of addCategoryEntry. + service: true + }], + + // QueryInterface implementation, e.g. using the generateQI helper (remove argument if skipped steps above) + QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIHelloWorld]), + + // Optional, but required if you want your component to be exposed to DOM + classInfo: XPCOMUtils.generateCI({classID: Components.ID("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"), + contractID: "@dietrich.ganx4.com/helloworld;1", + interfaces: [Ci.nsIHelloWorld], + flags: Ci.nsIClassInfo.DOM_OBJECT}), + + // ...component implementation... + // define the function we want to expose in our interface + hello: function() { + return "Hello World!"; + }, +}; +</pre> +<p><span id="result_box" lang="pt"><span class="hps">XPCOMUtils</span> <span class="hps">faz o trabalho de</span> <span class="hps">criação do</span> <span class="hps">módulo</span> <span class="hps">e da fábrica</span> <span class="hps">para você</span> <span class="hps">depois disso.</span> <span class="hps">Finalmente, você cria</span> <span class="hps">uma matriz</span> <span class="hps">de</span> <span class="hps">seus</span> <span class="hps">componentes a serem criados</span><span>:</span></span></p> +<pre class="brush: js"> var components = [HelloWorld]; +</pre> +<p><span id="result_box" lang="pt"><span class="hps">e substituir</span> <span class="hps">NSGetFactory</span> <span class="hps">/</span> <span class="hps">NSGetModule</span> <span class="hps">usar</span> <span class="hps">essa matriz</span> <span class="hps">e</span> <span class="hps">XPCOMUtils</span><span>:</span></span></p> +<pre class="brush: js"> if ("generateNSGetFactory" in XPCOMUtils) + var NSGetFactory = XPCOMUtils.generateNSGetFactory(components); // Firefox 4.0 and higher + else + var NSGetModule = XPCOMUtils.generateNSGetModule(components); // Firefox 3.x +</pre> +<p><span id="result_box" lang="pt"><span class="hps">Assim, a versão</span> <span class="hps">simplificada do</span> <span class="hps">total de</span> <span class="hps">seu componente</span> <span class="hps">agora</span> <span class="hps">parece</span> <span class="hps">(é claro que</span> <span class="hps">a documentação</span> <span class="hps">e os comentários</span> <span class="hps">não são uma coisa</span> <span class="hps">ruim, mas</span> <span class="hps">como um modelo</span> <span class="hps">algo menor</span> <span class="hps">é bom ter</span><span>)</span><span>:</span></span></p> +<pre class="brush: js">Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); + +function HelloWorld() { } + +HelloWorld.prototype = { + classDescription: "My Hello World Javascript XPCOM Component", + classID: Components.ID("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"), + contractID: "@dietrich.ganx4.com/helloworld;1", + QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIHelloWorld]), + hello: function() { return "Hello World!"; } +}; +var components = [HelloWorld]; +if ("generateNSGetFactory" in XPCOMUtils) + var NSGetFactory = XPCOMUtils.generateNSGetFactory(components); // Firefox 4.0 and higher +else + var NSGetModule = XPCOMUtils.generateNSGetModule(components); // Firefox 3.x +</pre> +<div class="note"> + <span id="result_box" lang="pt"><span class="hps"><strong>Nota</strong>:</span> <span class="hps">A partir do</span> <span class="hps">Firefox 4.0</span> <span class="hps">será necessário</span> <span class="hps">declarar</span> <span class="hps">o componente</span> <span class="hps">em</span> <span class="hps">chrome.manifest</span><span>;</span> <span class="hps">classDescription</span> <span class="hps">e</span> <span class="hps">propriedades</span> <span class="hps">contractID</span> <span class="hps">por outro lado,</span> <span class="hps">não são mais necessários</span><span>.</span> <span class="hps">ver </span></span><a href="/en/XPCOM/XPCOM_changes_in_Gecko_2.0" title="XPCOM changes in Gecko 2.0">XPCOM changes in Gecko 2.0</a> <span class="short_text" id="result_box" lang="pt"><span class="hps">para mais detalhes</span></span>.</div> +<h2 id="Installation" name="Installation"><span class="short_text" id="result_box" lang="pt"><span class="hps">Instalação</span></span></h2> +<h3 id="For_extensions:" name="For_extensions:"><span class="short_text" id="result_box" lang="pt"><span class="hps">para extensões</span></span>:</h3> +<ol> + <li><span id="result_box" lang="pt"><span class="hps">Helloworld.js</span> <span class="hps">copiar e</span> <span class="hps">HelloWorld.xpt</span> <span class="hps atn">(</span><span>só</span> <span class="hps">se você tiver definido</span> <span class="hps">e</span> <span class="hps">compilou o</span> <span class="hps">IDL</span><span>) para</span></span> <code>{extensiondir}/components/</code>.</li> + <li><span id="result_box" lang="pt"><span class="hps">Excluir</span> <span class="hps">compreg.dat</span> <span class="hps">e</span> <span class="hps">xpti.dat</span> <span class="hps">do seu</span> <span class="hps">diretório de perfil</span></span>.</li> + <li><span class="short_text" id="result_box" lang="pt"><span class="hps">reinicie o</span> <span class="hps">aplicativo</span></span>.</li> +</ol> +<h3 id="For_Firefox" name="For_Firefox">Para Firefox:</h3> +<ol> + <li><span id="result_box" lang="pt"><span class="hps">Helloworld.js</span> <span class="hps">copiar e</span> <span class="hps">HelloWorld.xpt</span> <span class="hps atn">(</span><span>só</span> <span class="hps">se você tiver definido</span> <span class="hps">e</span> <span class="hps">compilou o</span> <span class="hps">IDL</span><span>) para</span> <span class="hps">o</span></span> <code>{objdir}/dist/bin/components</code> directory, <span class="short_text" id="result_box" lang="pt"><span class="hps">se</span> <span class="hps">correr a partir da</span> <span class="hps">fonte</span><span>.</span></span></li> + <li><span id="result_box" lang="pt"><span class="hps">Excluir</span> <span class="hps">compreg.dat</span> <span class="hps">e</span> <span class="hps">xpti.dat</span> <span class="hps">do diretório</span> <span class="hps">componentes</span></span>.</li> + <li><span id="result_box" lang="pt"><span class="hps">Excluir</span> <span class="hps">compreg.dat</span> <span class="hps">e</span> <span class="hps">xpti.dat</span> <span class="hps">do seu</span> <span class="hps">diretório de perfil</span></span>.</li> + <li><span class="short_text" id="result_box" lang="pt"><span class="hps">reinicie o</span> <span class="hps">aplicativo</span></span>.</li> +</ol> +<h2 id="Using_Your_Component" name="Using_Your_Component"><span class="short_text" id="result_box" lang="pt"><span class="hps">Usando o</span> <span class="hps">Componente</span></span></h2> +<h3 id="Using_wrappedJSObject" name="Using_wrappedJSObject"><span class="short_text" id="result_box" lang="pt"><span class="hps">Usando</span> <span class="hps">wrappedJSObject</span></span></h3> +<p><span id="result_box" lang="pt"><span class="hps">Se</span> <span class="hps">você só pretende</span> <span class="hps">aceder à sua</span> <span class="hps">componente</span> <span class="hps">de</span> <span class="hps">Javascript</span><span>, ou seja,</span> <span class="hps">você pulou</span> <span class="hps">as seções</span> <span class="hps">"Definindo</span> <span class="hps">a</span> <span class="hps">Interface"</span> <span class="hps atn">e "</span><span>Compilando o</span> <span class="hps">Typelib</span><span>" acima</span><span>, é</span> <span class="hps">comentada</span> <span class="hps atn">a linha "</span><span>wrappedJSObject</span><span>"</span> <span class="hps">no construtor da classe</span><span>, e</span> <span class="hps">removido</span> <span class="hps">o</span></span> "[Components.interfaces.nsIHelloWorld]" <span class="short_text" id="result_box" lang="pt"><span class="hps">argumento para</span> <span class="hps">a chamada para </span></span>XPCOMUtils.generateQI() em QueryInterface, <span id="result_box" lang="pt"><span class="hps">então você pode acessar</span> <span class="hps">o seu componente</span> <span class="hps">da seguinte forma:</span></span></p> +<pre class="brush: js">try { + var myComponent = Components.classes['@dietrich.ganx4.com/helloworld;1'] + .getService().wrappedJSObject; + + alert(myComponent.hello()); +} catch (anError) { + dump("ERROR: " + anError); +} +</pre> +<p><span id="result_box" lang="pt"><span class="hps">Para mais informações sobre</span> <span class="hps">wrappedJSObject</span><span>, veja</span></span> <a href="/en/wrappedJSObject" title="en/wrappedJSObject">aqui</a>.</p> +<h3 id="Using_XPCOM_instantiation" name="Using_XPCOM_instantiation"><span class="short_text" id="result_box" lang="pt"><span class="hps">Usando</span> <span class="hps">instanciação</span> <span class="hps">XPCOM</span></span></h3> +<pre class="brush: js">try { + var myComponent = Components.classes['@dietrich.ganx4.com/helloworld;1'] + .createInstance(Components.interfaces.nsIHelloWorld); + + alert(myComponent.hello()); +} catch (anError) { + dump("ERROR: " + anError); +} +</pre> +<h2 id="Other_resources" name="Other_resources"><span class="short_text" id="result_box" lang="pt"><span class="hps">Outros</span> <span class="hps">recursos</span></span></h2> +<ul> + <li><span id="result_box" lang="pt"><span class="hps">Dois</span> <span class="hps">fóruns</span> <span class="hps">tópicos</span> <span class="hps">mozillazine</span> <span class="hps">sobre a implementação de</span> <span class="hps">componentes XPCOM</span> <span class="hps">em</span> <span class="hps">JS</span> <span class="hps">com algumas</span> <span class="hps">explicações,</span> <span class="hps">exemplo</span> <span class="hps">de código</span> <span class="hps">e dicas</span> <span class="hps">para solução de problemas</span><span>:</span></span> + <ul> + <li><a class="external" href="http://forums.mozillazine.org/viewtopic.php?t=308369" rel="freelink">http://forums.mozillazine.org/viewtopic.php?t=308369</a></li> + <li><a class="external" href="http://forums.mozillazine.org/viewtopic.php?t=367298" rel="freelink">http://forums.mozillazine.org/viewtopic.php?t=367298</a></li> + </ul> + </li> + <li><a class="external" href="http://kb.mozillazine.org/Implementing_XPCOM_components_in_JavaScript">Implementing XPCOM components in JavaScript</a> at kb.mozillazine.org</li> + <li><a class="external" href="http://www.mozilla.org/scriptable/avoiding-leaks.html">Using XPCOM in JavaScript without leaking</a> - A must-read.</li> + <li><a class="external" href="http://lxr.mozilla.org/seamonkey/source/xpcom/sample/nsSample.js">An example component</a></li> + <li><a class="external" href="http://www.mozilla.org/scriptable/js-components-status.html">Older JS+XPCOM notes</a> - <span class="short_text" id="result_box" lang="pt"><span class="hps">inclui algumas informações</span> <span class="hps">wrappedJSObject</span></span>.</li> + <li><a class="external" href="http://weblogs.mozillazine.org/weirdal/archives/019620.html" title="http://weblogs.mozillazine.org/weirdal/archives/019620.html">Writing an XPCOM <em><u>Service</u></em> in javascript</a></li> +</ul> +<p>{{ languages( { "fr": "fr/compiler_un_composant_xpcom_javascript", "zh-cn": "cn/How_to_Build_an_XPCOM_Component_in_Javascript", "ja": "ja/How_to_Build_an_XPCOM_Component_in_Javascript" } ) }}</p> +<p> </p> +<p><strong>Tradução para o portugues(Brasil) : Josimar de souza</strong></p> +<p>contato : portaldobarulho@hotmail.com</p> +<p>site : <a href="http://facebook.com/soundbrasil" title="http://facebook.com/soundbrasil">Portal do Barulho</a></p> diff --git a/files/pt-br/mozilla/tech/xpcom/guide/index.html b/files/pt-br/mozilla/tech/xpcom/guide/index.html new file mode 100644 index 0000000000..63fcce03c0 --- /dev/null +++ b/files/pt-br/mozilla/tech/xpcom/guide/index.html @@ -0,0 +1,21 @@ +--- +title: XPCOM guide +slug: Mozilla/Tech/XPCOM/Guide +tags: + - Add-ons + - Extensions + - Guide + - Landing + - Mozilla + - NeedsTranslation + - TopicStub + - XPCOM +translation_of: Mozilla/Tech/XPCOM/Guide +--- +<p><span class="seoSummary">These articles provide tutorials and usage documentation for XPCOM, including how to use it in your own projects and how to build XPCOM components for your Firefox add-ons and the like.</span></p> + +<div class="warning"> +<p><strong>WebExtensions are becoming the new standard for creating add-ons. </strong>Eventually support for XPCOM add-ons will be deprecated, so you should begin to investigate porting your add-ons to use the <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions">WebExtensions</a> API, and <a href="https://mzl.la/webext-feature-needed">report any missing functionality</a> so we can be sure to address your concerns. Work is ongoing on WebExtension capabilities, so your input will help prioritize and plan the work. To learn more about the kinds of changes that will be needed, see <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_XUL_XPCOM_extensions">Comparison with XUL/XPCOM extensions</a>. In addition, any binaries you use will then need to be converted for use with the WebExtensions <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging">native messaging</a> API, or compiled using <a href="https://webassembly.github.io/">WebAssembly</a> or <a href="/en-US/docs/Mozilla/Projects/Emscripten">Emscripten</a>.</p> +</div> + +<p>{{LandingPageListSubpages}}</p> diff --git a/files/pt-br/mozilla/tech/xpcom/index.html b/files/pt-br/mozilla/tech/xpcom/index.html new file mode 100644 index 0000000000..07687c0f82 --- /dev/null +++ b/files/pt-br/mozilla/tech/xpcom/index.html @@ -0,0 +1,47 @@ +--- +title: XPCOM +slug: Mozilla/Tech/XPCOM +tags: + - Landing + - Mozilla + - NeedsTranslation + - TopicStub + - XPCOM +translation_of: Mozilla/Tech/XPCOM +--- +<p><span class="seoSummary"><strong>XPCOM</strong> is a cross platform component object model, similar to Microsoft COM. It has multiple <a href="/en-US/docs/XPCOM/Language_Bindings" title="XPCOM/Language_Bindings">language bindings</a>, allowing XPCOM components to be used and implemented in JavaScript, Java, and Python in addition to C++.</span> Interfaces in XPCOM are defined in a dialect of IDL called <a href="/en-US/docs/XPIDL" title="XPIDL">XPIDL</a>.</p> + +<div class="warning"> +<p><strong>XPCOM is no longer available for use by Firefox extensions. Use <a href="/en-US/Add-ons/WebExtensions">WebExtensions</a> instead.</strong></p> +</div> + +<p>XPCOM itself provides a set of core components and classes, e.g. file and memory management, threads, basic data structures (strings, arrays, variants), etc. The majority of XPCOM components are not part of this core set and are provided by other parts of the platform (e.g. <a href="/en-US/docs/Gecko" title="Gecko">Gecko</a> or <a href="/en-US/docs/Necko" title="Necko">Necko</a>) or by an application or even by an extension.</p> + +<div class="row topicpage-table"> + <div class="section"><dl><dl><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Accessing_the_Windows_Registry_Using_XPCOm">Accessing the Windows Registry Using XPCOM</a></dt><dd class="landingPageList">When implementing Windows-specific functionality, it is often useful to access the Windows registry for information about the environment or other installed programs. To this end, there exist <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a> interfaces to read and write registry data. This article will show you how to use the available interfaces in several Mozilla products.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Aggregating_the_In-Memory_Datasource">Aggregating the In-Memory Datasource</a></dt><dd class="landingPageList"></dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/already_AddRefed">already_AddRefed</a></dt><dd class="landingPageList"><code>already_AddRefed</code> in association with <code><a href="/en-US/docs/NsCOMPtr">nsCOMPtr</a></code> allows you to assign in a pointer <strong>without</strong> <code>AddRef</code>ing it.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Binary_compatibility">Binary compatibility</a></dt><dd class="landingPageList">If Mozilla decides to upgrade to a compiler that does not have the same ABI as the current version, any built component may fail. It is a possiblity that is introduced when upgrading to a new compiler without recompiling everything. Effectively, it is a different platform.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Bundling_multiple_binary_components">Bundling multiple binary components</a></dt><dd class="landingPageList">Binary XPCOM components are sometimes required to implement low-level features for extensions. Since binary components are linked against a single Gecko SDK, a dependency to a particular version of Gecko is created. If the component uses only "frozen" XPCOM interfaces, there is a good chance the same binary component will work with different versions of Gecko (version 1.8 and 1.9, for example). The more likely case is that the component uses "unfrozen" interfaces and those interfaces can change between Gecko versions. This can create a difficult situation for extension developers trying to support multiple Gecko versions (Firefox 2 and 3, for example).</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Creating_a_Python_XPCOM_component">Creating a Python XPCOM component</a></dt><dd class="landingPageList"><a href="http://books.mozdev.org/html"><em>Creating Applications with Mozilla</em></a> already provides <a href="http://books.mozdev.org/html/mozilla-chp-8-sect-2.html">a tutorial</a> for making a simple JavaScript or C++ component (implementing the <code>nsISimple</code> interface). Here is how to make the same component in Python using <a href="/en-US/docs/PyXPCOM" title="PyXPCOM">PyXPCOM</a>.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Fun_with_XBL_and_XPConnect">Fun With XBL and XPConnect</a></dt><dd class="landingPageList"></dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Generating_GUIDs">Generating GUIDs</a></dt><dd class="landingPageList"><strong>GUID</strong>s are used in Mozilla programming for identifying several types of entities, including XPCOM <a href="/en-US/docs/Interfaces">Interfaces</a> (this type of GUIDs is callled IID), components (CID), and legacy add-ons—like <a href="/en-US/docs/Extensions">extensions</a> and <a href="/en-US/docs/Themes">themes</a>—that were created prior to Firefox 1.5. <a href="/en-US/docs/Install_Manifests#id">Add-ons can (and should) be identified with IDs of the form <code><var>extensionname</var>@<var>organization</var>.<var>tld</var></code></a> since <a href="/en-US/docs/Firefox_1.5_for_developers">Firefox 1.5</a>.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Generic_factory">Generic factory</a></dt><dd class="landingPageList">Most XPCOM factories can be very simple. Rick Potts wrote a templated-based generic factory (nsFactory<t>) that simplifies the factory creation process that just requires writing a CreateInstance() method. The new nsIGenericFactory interface takes this a step further, by providing a single interface that can be reused anytime a simple implementation of nsIFactory is needed. Here is the interface, and a description of its use.</t></dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/How_to_build_a_binary_XPCOM_component_using_Visual_Studio">How to build a binary XPCOM component using Visual Studio</a></dt><dd class="landingPageList">This is a simple tutorial for building XPCOM objects in C++ using Visual Studio. XPCOM is Mozilla’s cross platform component object model, similar to Microsoft’s COM technology. XPCOM components can be implemented in C, C++, and JavaScript, and can be used from C, C++, and JavaScript. That means you can call JavaScript methods from C++ and vice versa. For more information on the workings of XPCOM look <a href="en/XPCOM">elsewhere</a>.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/How_to_pass_an_XPCOM_object_to_a_new_window">How To Pass an XPCOM Object to a New Window</a></dt><dd class="landingPageList">If you want to be able to call functions within an XPCOM object from a XUL window's code, you can do so if you pass the XPCOM object as one of the arguments to the window creation method.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Interfacing_with_the_XPCOM_cycle_collector">Interfacing with the XPCOM cycle collector</a></dt><dd class="landingPageList">This is a quick overview of the cycle collector introduced into XPCOM for Firefox 3, including a description of the steps involved in modifying an existing C++ class to participate in XPCOM cycle collection. If you have a class that you think is involved in a cyclical-ownership leak, this page is for you.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Introduction_to_XPCOM_for_the_DOM">Introduction to XPCOM for the DOM</a></dt><dd class="landingPageList">Warning: this document has not yet been reviewed by the DOM gurus, it might contain some errors.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Language_Bindings">Language bindings</a></dt><dd class="landingPageList">An <strong>XPCOM Language Binding</strong> is a bridge between a particular language and <a href="/en/XPCOM" title="en/XPCOM">XPCOM</a> to provide access to XPCOM objects from that language, and to let modules written in that language be used as XPCOM objects by all other languages for which there are XPCOM bindings.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Monitoring_HTTP_activity">Monitoring HTTP activity</a></dt><dd class="landingPageList">Gecko includes the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIHttpActivityObserver" title="">nsIHttpActivityObserver</a></code> interface, which you can implement in your code to monitor <a href="/en/HTTP" title="en/HTTP">HTTP</a> transactions in real time, receiving a callback as the transactions take place.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/nsCOMPtr_versus_RefPtr">nsCOMPtr versus RefPtr</a></dt><dd class="landingPageList">Gecko code uses both <code>nsCOMPtr</code> and <code>RefPtr</code> as smart pointers. This guide provides some explanation and advice on how to choose between them.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Observer_Notifications">Observer Notifications</a></dt><dd class="landingPageList">The following are topics that you can observe during the course of an application. Unless otherwise noted you register for the topics using the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIObserverService" title="">nsIObserverService</a></code>.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Setting_HTTP_request_headers">Setting HTTP request headers</a></dt><dd class="landingPageList"><a href="/en-US/docs/HTTP">HTTP</a> is one of the core technologies behind the Web. In addition to the actual content, <a href="/en-US/docs/HTTP/Headers">some important information</a> is passed with HTTP headers for both HTTP requests and responses.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Storage">Storage</a></dt><dd class="landingPageList"><strong>Storage</strong> is a <a class="external" href="http://www.sqlite.org/">SQLite</a> database API. It is available to trusted callers, meaning extensions and Firefox components only.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/The_Thread_Manager">The Thread Manager</a></dt><dd class="landingPageList">The Thread Manager, introduced in Firefox 3, offers an easy to use mechanism for creating threads and dispatching events to them for processing.</dd></dl></dl></div> + <div class="section"><dl><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Troubleshooting_XPCOM_components_registration">Troubleshooting XPCOM components registration</a></dt><dd class="landingPageList">Often the first time you create an XPCOM component, it may fail to register correctly.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Using_nsCOMPtr">Using nsCOMPtr</a></dt><dd class="landingPageList">This document is the sum total of everything written down about <code>nsCOMPtr</code>. If you have a question about <code>nsCOMPtr</code>, and this document doesn't answer it, there probably isn't a document that answers it. You'll have to turn to <a class="external" href="news:mozilla.dev.tech.xpcom">the XPCOM newsgroup</a> or another experienced <code>nsCOMPtr</code> user, or find the answer by experimentation.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Using_nsIClassInfo">Using nsIClassInfo</a></dt><dd class="landingPageList">If you use a C++ class which implements <code>nsIClassInfo</code> from JavaScript, then you don't have to explicitly call <code>QueryInterface</code> on the JavaScript object to access the object's interfaces.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Using_nsIDirectoryService">Using nsIDirectoryService</a></dt><dd class="landingPageList">nsDirectoryService implements the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIProperties" title="">nsIProperties</a></code> interface. This implementation will allow you to <code>Get()</code>, <code>Set()</code>, <code>Define()</code>, and <code>Undefine()</code> <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile" title="">nsIFile</a></code>.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Using_nsIPasswordManager">Using nsIPasswordManager</a></dt><dd class="landingPageList">Technical review completed.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Using_nsISimpleEnumerator">Using nsISimpleEnumerator</a></dt><dd class="landingPageList"></dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Using_the_clipboard">Using the clipboard</a></dt><dd class="landingPageList">This section provides information about cutting, copying, and pasting to and from the clipboard.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Using_the_Gecko_SDK">Using the Gecko SDK</a></dt><dd class="landingPageList"></dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Weak_reference">Weak reference</a></dt><dd class="landingPageList">In <a href="/en-US/docs/XPCOM">XPCOM</a>, a <strong>weak reference</strong> is a special object that contains a pointer to an XPCOM object, but does<em>not</em> keep that object alive. If the referent object is destroyed before the weak reference, the pointer inside the weak reference is set to <code>nsnull</code>.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Working_with_multiple_versions_of_interfaces">Working with Multiple Versions of Interfaces</a></dt><dd class="landingPageList">In this short note we illustrate how one can update an XPCOM module in +order for it to work in both Firefox 2 and Firefox 3, even if the interfaces have +changed in the interim.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Working_with_out_parameters">Working with out parameters</a></dt><dd class="landingPageList"></dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/wrappedJSObject">wrappedJSObject</a></dt><dd class="landingPageList"><code>wrappedJSObject</code> is a property sometimes available on <a href="en/XPConnect">XPConnect</a> wrappers. When available, it lets you access the JavaScript object hidden by the wrapper.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/XPCOM_ABI">XPCOM ABI</a></dt><dd class="landingPageList"><a href="/en/XPCOM" title="en/XPCOM">XPCOM</a> <abbr title="Application Binary Interface">ABI</abbr> is the binary interface of XPCOM components. While XPCOM components written in a scripting language (such as <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a>) can be moved across platforms (such as Windows and OS X) without adaptation, those written in a compiled language (such as C++) require recompilation when moving to a different platform. Often, compiled XPCOM components are called 'binary' or 'native'.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/XPCOM_category_image-sniffing-services">XPCOM category image-sniffing-services</a></dt><dd class="landingPageList">In versions of Firefox prior to Firefox 3, extensions could add decoders for new image types. However, such decoders relied on servers sending correct MIME types; images sent with incorrect MIME types would not be correctly displayed.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Glue">XPCOM glue</a></dt><dd class="landingPageList">The XPCOM Glue is a static library which component developers and embedders can link against. It allows developers to link only against the frozen XPCOM method symbols and maintain compatibility with multiple versions of XPCOM.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Guide">XPCOM guide</a></dt><dd class="landingPageList">These articles provide tutorials and usage documentation for XPCOM, including how to use it in your own projects and how to build XPCOM components for your Firefox add-ons and the like.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/XPCOM_ownership_guidelines">XPCOM ownership guidelines</a></dt><dd class="landingPageList">...naturally. If you create a temporary object, obviously it's up to you to destroy it. That's a sure sign of ownership. If you create an object with a longer lifespan, you will own it until you give ownership away.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference">XPCOM reference</a></dt><dd class="landingPageList">This reference describes the interfaces and functions provided by the <a href="/en-US/docs/Mozilla/Tech/XPCOM">XPCOM</a> library. In addition, it details the various helper classes and functions, as well as the components, provided by the <a href="/en-US/docs/Mozilla/Tech/XPCOM/Glue">XPCOM glue</a> library. The contents herein are oriented primarily toward extension developers and people embedding XPCOM in other projects.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/XPCOM_tasks">XPCOM tasks</a></dt><dd class="landingPageList">The XPCOM module roughly parallels the C/C++ standard libraries. It overlaps them significantly, but goes beyond them in capabilities. XPCOM sits above the standard libraries. Its role is to extend them with facilities tailored to XPCOM development in general, and specifically the needs of Mozilla. Like the standard libraries, XPCOM must be a fairly self-contained library, so as not to encumber clients with any unnecessary external dependencies.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/Thread_synchronization">XPCOM Thread Synchronization</a></dt><dd class="landingPageList">XPCOM thread synchronization primitives have the same semantics as those in NSPR, and each method of these synchronization objects (e.g. <code>Mutex::Lock()</code>) has a matching function in NSPR (<code>PR_Lock()</code>). This is no accident, as mozilla:: primitives are merely bare-minimum wrappers around NSPR's.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/xptcall_FAQ">xptcall FAQ</a></dt><dd class="landingPageList"><code>xptcall</code> is a small low level XPCOM method call library. It is implemented using platform specific C/C++ and assembly language code. It is used to facilitate cross language and cross thread method calls. Porting this code is required in order to make Mozilla run on any given platform.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/xptcall_porting_guide">Xptcall Porting Guide</a></dt><dd class="landingPageList">Original Author: John Bandhauer, 31 May 1999.</dd><dt class="landingPageList"><a href="/en-US/docs/Mozilla/Tech/XPCOM/xptcall_porting_status">Xptcall Porting Status</a></dt><dd class="landingPageList">This is a status page for the multiplatform porting of xptcall. xptcall has a <a href="/En/Xptcall_FAQ">FAQ</a> and a <a href="/En/Xptcall_Porting_Guide">Porting Guide</a>.</dd></dl></div> + </div> + +<div class="blockIndicator communitybox" dir="ltr"> + + <div class="column-container"> + <h2 id="Join_the_XPCOM_community">Join the XPCOM community</h2> + <div class="column-half"> + <div class="communitysubhead">Choose your preferred method for joining the discussion:</div> + <ul class="communitymailinglist"> + <li><a href="https://lists.mozilla.org/listinfo/dev-tech-xpcom">Mailing list</a></li> + + + <li><a href="http://groups.google.com/group/mozilla.dev.tech.xpcom">Newsgroup</a></li> + <li><a href="http://groups.google.com/group/mozilla.dev.tech.xpcom/feeds">RSS feed</a></li> +</ul> + </div> + <div class="column-half"> + <ul class="communitycontact"><li><strong>IRC: </strong><a href="irc://irc.mozilla.org/developers">#developers</a> <span class="smaller">(<a href="https://wiki.mozilla.org/IRC">learn more</a>)</span></li><li><strong>Tools: </strong><a href="http://ted.mielczarek.org/code/mozilla/jscomponentwiz/">JavaScript Component Wizard</a>, <a href="http://www.mytools360.com-a.googlepages.com/home#XPComPro">Visual C++ Component Wizard</a>, <a href="http://www.yutools.com/wp/tools/yuxpcomwizard/?lang=en">Visual C++ Component Wizard for Visual Studio 2010</a>, <a href="https://addons.mozilla.org/en-US/firefox/addon/xpcomviewer/">XPCOMViewer addon: browse XPCOM interfaces easily</a></li></ul> + </div> + </div> +</div> + +<section id="Quick_Links"><ol><li><a href="http://www.ibm.com/developerworks/library/os-xpcomfirefox/">Tutorial from IBM DeveloperWorks</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Creating_Custom_Firefox_Extensions_with_the_Mozilla_Build_System">Binary components tutorial</a></li><li><a href="http://www.iosart.com/firefox/xpcom/">Linux and Windows how-to guide</a></li><li><a href="http://starkravingfinkle.org/blog/2006/10/mozilla-platform-xpcom-in-c/">Windows example blog post</a></li><li><a href="http://wanderingstan.com/2007-11-16/geekout_how_to_make_a_c_xpcom_component">Another Windows example</a></li><li><a href="http://rcrowley.org/2007/07/17/cross-platform-xpcom-a-howto.html">Mac OS X example</a></li><li><a href="/en-US/docs/Web/JavaScript" title="JavaScript (JS) is a lightweight interpreted or JIT-compiled programming language with first-class functions. While it is most well-known as the scripting language for Web pages, many non-browser environments also use it, such as Node.js, Apache CouchDB and Adobe Acrobat.">JavaScript</a></li></ol></section> diff --git a/files/pt-br/mozilla/tech/xpcom/reference/index.html b/files/pt-br/mozilla/tech/xpcom/reference/index.html new file mode 100644 index 0000000000..3d8f2b9b64 --- /dev/null +++ b/files/pt-br/mozilla/tech/xpcom/reference/index.html @@ -0,0 +1,18 @@ +--- +title: XPCOM reference +slug: Mozilla/Tech/XPCOM/Reference +tags: + - Landing + - Mozilla + - NeedsTranslation + - Reference + - TopicStub + - XPCOM +translation_of: Mozilla/Tech/XPCOM/Reference +--- +<p>This reference describes the interfaces and functions provided by the <a href="/en-US/docs/Mozilla/Tech/XPCOM">XPCOM</a> library. In addition, it details the various helper classes and functions, as well as the components, provided by the <a href="/en-US/docs/Mozilla/Tech/XPCOM/Glue">XPCOM glue</a> library. The contents herein are oriented primarily toward extension developers and people embedding XPCOM in other projects.</p> +<div class="note"> + <p><strong>Note:</strong> If you're working on a module in the Mozilla codebase that's compiled with the <code>MOZILLA_INTERNAL_API</code> flag set, some of these APIs -- the string functions and classes in particular -- are not the ones you should be using. See the <a href="/en-US/docs/Mozilla/Tech/XPCOM/Guide/Internal_strings">XPCOM internal string guide</a> for documentation of the internal string API used within the Mozilla codebase.</p> +</div> +<p>{{LandingPageListSubpages}}</p> +<p>Many XPCOM pages return an <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Core_functions/nsresult">nsresult</a></code>. Prior to Gecko 19 {{geckoRelease(19)}}, this was an integer that simply returned an error code. It is now a strongly typed <code>enum</code> when XPCOM is built using a C++11 compiler. This causes compile-time errors to occur when improper values are returned as nsresult values, thereby making it easier to catch many bugs.</p> diff --git a/files/pt-br/mozilla/tech/xpcom/reference/interface/index.html b/files/pt-br/mozilla/tech/xpcom/reference/interface/index.html new file mode 100644 index 0000000000..9adc0e0157 --- /dev/null +++ b/files/pt-br/mozilla/tech/xpcom/reference/interface/index.html @@ -0,0 +1,17 @@ +--- +title: XPCOM Interface Reference +slug: Mozilla/Tech/XPCOM/Reference/Interface +tags: + - NeedsTranslation + - TopicStub + - XPCOM + - XPCOM Interface Reference +translation_of: Mozilla/Tech/XPCOM/Reference/Interface +--- +<p>This is a reference to the XPCOM interfaces provided by the Mozilla platform.</p> +<div class="cols-3"> + {{tree('','1')}}</div> +<h2 id="See_also" name="See_also">See also</h2> +<ul> + <li><a href="/en-US/docs/XPCOM_Interface_Reference_group" title="XPCOM_Interface_Reference_group">Interfaces grouped by function</a></li> +</ul> diff --git a/files/pt-br/mozilla/tech/xpcom/reference/interface/nsidevicemotion/index.html b/files/pt-br/mozilla/tech/xpcom/reference/interface/nsidevicemotion/index.html new file mode 100644 index 0000000000..4eef5f2942 --- /dev/null +++ b/files/pt-br/mozilla/tech/xpcom/reference/interface/nsidevicemotion/index.html @@ -0,0 +1,129 @@ +--- +title: nsIDeviceMotion +slug: Mozilla/Tech/XPCOM/Reference/Interface/nsIDeviceMotion +translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsIDeviceMotion +--- +<p></p><div style="border: solid #ddd 2px; margin-bottom: 12px;"> +<div style="background: #eee; padding: 2px;"><code><a href="https://dxr.mozilla.org/mozilla-central/source/xpcom/system/nsIDeviceMotion.idl" rel="custom">xpcom/system/nsIDeviceMotion.idl</a></code><span style="text-align: right; float: right;"><a href="/en-US/docs/Interfaces/About_Scriptable_Interfaces" style="color: #00cc00; font-weight: 700;">Scriptable</a></span></div> +<span style="padding: 4px 2px;"> + +Essa interface é usada para implementar o suporte acelerômetro. +</span> + + <div style="height: 42px; position: relative; padding: 2px; width: auto;"> + + <div style="top: 22px; font-size: 11px; position: absolute;">1.0</div> + + <div style="top: 22px; font-size: 11px; position: absolute; left: 0px; text-align: right; float: right; width: 100%;">66</div> + + <div style="height: 8px; top: 16px; background: #dd0000; left: 0px; position: absolute; width: 10.476190285714287%;"></div> + +<div style="height: 8px; top: 16px; left: 10.476190285714287%; background: #00dd00; position: absolute; width: 89.52380971428572%;" title="Introduced in Gecko 1.9.2 (Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)"></div> + +<div style="top: 0px; font-size: 11px; position: absolute; left: 10.476190285714287%;">Introduced</div> +<div style="top: 22px; font-size: 11px; position: absolute; left: 10.476190285714287%;">Gecko 1.9.2</div> + + <div style="height: 8px; top: 16px; left: 13.785714285714285%; background: #eeee00; position: absolute; width: 1%; border-radius: 4px; -webkit-border-radius: 4px;" title="Last changed in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)"></div> + +</div> + +<div style="background: #eee; padding: 2px;"> +Inherits from: <code><a href="/pt-BR/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsISupports" title="">nsISupports</a></code> +<span style="text-align: right; float: right;">Last changed in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)</span></div> +</div><p></p> + +<div class="note"><strong>Note:</strong> This interface was named <code>nsIDeviceMotion</code> prior to Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3).</div> + +<h2 id="Method_overview" name="Method_overview">Visão Geral</h2> + +<table class="standard-table"> + <tbody> + <tr> + <td><code>void <a href="#addListener()">addListener</a>(in nsIDeviceMotionListener aListener);</code></td> + </tr> + <tr> + <td><code>void <a href="#addWindowListener()">addWindowListener</a>(in nsIDOMWindow aWindow);</code> <span class="inlineIndicator noscript noscriptInline" title="This method may only be called from C++; don't use it from JavaScript.">Native code only!</span></td> + </tr> + <tr> + <td><code>void <a href="#removeListener()">removeListener</a>(in nsIDeviceMotionListener aListener);</code></td> + </tr> + <tr> + <td><code>void <a href="#removeWindowListener()">removeWindowListener</a>(in nsIDOMWindow aWindow);</code> <span class="inlineIndicator noscript noscriptInline" title="This method may only be called from C++; don't use it from JavaScript.">Native code only!</span></td> + </tr> + </tbody> +</table> + +<h2 id="Methods" name="Methods">Métodos</h2> + +<h3 id="addListener()" name="addListener()">addListener()</h3> + +<p>Quando chamado, a implementação do suporte acelerômetro deve começar a notificar o que foi especificado <code><a href="/pt-BR/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDeviceMotionListener" title="">nsIDeviceMotionListener</a></code> chamando seu <code><a href="https://developer.mozilla.org/pt-BR/docs/XPCOM_Interface_Reference/nsIDeviceMotionListener#onAccelerationChange()">nsIDeviceMotionListener.onAccelerationChange()</a></code> método apropriado para compartilhar dados de aceleração atualizados.</p> + +<pre class="eval">void addListener( + in nsIDeviceMotionListener aListener +); +</pre> + +<h6 id="Parameters" name="Parameters">Parâmetro</h6> + +<dl> + <dt><code>aListener</code></dt> + <dd>O <code><a href="/pt-BR/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDeviceMotionListener" title="">nsIDeviceMotionListener</a></code> objeto cujo <code><a href="https://developer.mozilla.org/pt-BR/docs/XPCOM_Interface_Reference/nsIDeviceMotionListener#onAccelerationChange()">nsIDeviceMotionListener.onAccelerationChange()</a></code> método deve ser chamado com dados de aceleração atualizados.</dd> +</dl> + +<p></p><div><span class="indicatorInHeadline noscript noscriptMethod" title="This method may only be called from C++; don't use it from JavaScript.">Native code only!</span><h3 id="addWindowListener">addWindowListener</h3></div><p></p> + +<p>Definir o <code>nsIAccelerometer</code> da raiz para <code>MozOrientation</code> eventos sobre um específico DOM <a href="/pt-BR/docs/Web/API/Window" title="O objeto window representa uma janela que contém um elemento DOM; a propriedade document aponta para o documento DOM document carregado naquela janela."><code>window</code></a>.</p> + +<pre class="eval">void addWindowListener( + in nsIDOMWindow aWindow +); +</pre> + +<h6 id="Parameters" name="Parameters">Parâmetro</h6> + +<dl> + <dt><code>aWindow</code></dt> + <dd><span id="result_box" lang="pt"><span>A janela de</span> <span>DOM</span> <span>que o</span> <span>acelerômetro</span> <span>deverá</span> <span>começar a enviar</span></span> para o evento <code>MozOrientation</code>.</dd> +</dl> + +<h3 id="removeListener()" name="removeListener()">removeListener()</h3> + +<p><span id="result_box" lang="pt"><span>Diz</span> a<span>o acelerômetro para</span> <span>parar de enviar</span> <span>atualizações para o</span> quem foi <span>especificado</span></span> <code><a href="/pt-BR/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDeviceMotionListener" title="">nsIDeviceMotionListener</a></code>.</p> + +<pre class="eval">void removeListener( + in nsIDeviceMotionListener aListener +); +</pre> + +<h6 id="Parameters" name="Parameters">Parâmetro</h6> + +<dl> + <dt><code>aListener</code></dt> + <dd>O <code><a href="/pt-BR/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDeviceMotionListener" title="">nsIDeviceMotionListener</a></code> <span id="result_box" lang="pt"><span>objeto para o qual</span> <span>não há</span> <span>mais atualizações</span> para <span>serem enviadas.</span></span></dd> +</dl> + +<p></p><div><span class="indicatorInHeadline noscript noscriptMethod" title="This method may only be called from C++; don't use it from JavaScript.">Native code only!</span><h3 id="removeWindowListener">removeWindowListener</h3></div><p></p> + +<p>Remover o <code>nsIAccelerometer</code> como fonte para o evento <code>MozOrientation</code> de um DOM especificado <a href="/pt-BR/docs/Web/API/Window" title="O objeto window representa uma janela que contém um elemento DOM; a propriedade document aponta para o documento DOM document carregado naquela janela."><code>window</code></a>.</p> + +<pre class="eval">void removeWindowListener( + in nsIDOMWindow aWindow +); +</pre> + +<h6 id="Parameters" name="Parameters">Parâmetro</h6> + +<dl> + <dt><code>aWindow</code></dt> + <dd><span id="result_box" lang="pt"><span>A janela de</span> <span>DOM</span> <span>que o</span> <span>acelerômetro</span> <span>deve</span> <span>parar de enviar</span></span> <code>para o evento MozOrientation</code>.</dd> +</dl> + +<h2 id="See_also" name="See_also">Veja também</h2> + +<ul> + <li><a href="/en/DOM/MozOrientation" title="en/DOM/MozOrientation"><code>MozOrientation</code></a></li> + <li><code><a href="/pt-BR/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMOrientationEvent" title="">nsIDOMOrientationEvent</a></code></li> + <li><code><a href="/pt-BR/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDeviceMotionData" title="">nsIDeviceMotionData</a></code></li> + <li><code><a href="/pt-BR/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDeviceMotionListener" title="">nsIDeviceMotionListener</a></code></li> +</ul> diff --git a/files/pt-br/mozilla/testing/analise_estatica_clang/index.html b/files/pt-br/mozilla/testing/analise_estatica_clang/index.html new file mode 100644 index 0000000000..41e019a53e --- /dev/null +++ b/files/pt-br/mozilla/testing/analise_estatica_clang/index.html @@ -0,0 +1,92 @@ +--- +title: Análise estática do Clang +slug: Mozilla/Testing/Analise_estatica_Clang +tags: + - analisador estático + - clang +translation_of: Mozilla/Testing/Clang_static_analysis +--- +<div class="warning"> +<p><strong>Boas novas:</strong> Se você quer fazer o build com o plugin Mozilla Clang (localizado em <code>/build/clang-plugin</code> e associado com o <code>MOZ_CLANG_PLUGIN</code> e os atributos em <code>/mfbt/Attributes.h</code>), é muito mais fácil que isso: apenas adicionar <code>--enable-clang-plugin</code> ao seu mozconfig!</p> +</div> + +<p>O Clang tem um <a class="external" href="http://clang-analyzer.llvm.org/" title="http://clang-analyzer.llvm.org/">analisador estático embutido</a>. A ideia principal é você adicionar um empacotador no compilador que direciona todos os resultados da análise estácica para um local comum. No fim do build, esses relatórios são juntos em um documento único mostrando todos os possíveis problemas.</p> + +<p>Essas instruções irão apenas funcionar onde o Mozilla já compila com o Clang. No momento que isto é escrito, o Mac OS X e o GNU/Linux tem um suporte mais forte. Por favor, perceba que a maior parte do esforço do analisador estático no Clang são majoritariamente feitos em <a href="http://clang.llvm.org/extra/clang-tidy/">clang-tidy</a>, uma vez que os verificadores são muito mais fáceis de escrever.</p> + +<p>Idealmente, a análise estática seria feita independentemente da compilação. Veja {{ bug("663442") }} para localizar uma solução alternativa que facilita a análise estática.</p> + +<h2 class="ace-line" id="Instalando_o_Clang">Instalando o Clang</h2> + +<p>O primeiro passo para executar uma análise estática é instalando o Clang. Atualmente, ele está disponível para a maioria das distribuições GNU/Linux mas também está disponível com Xcode como o compilador padrão.</p> + +<h2 id="Configurando_o_ambiente_de_build">Configurando o ambiente de build</h2> + +<p>Uma vez que você tiver o build do seu Clang pronto, você irá precisar preparar ferramentas para usá-lo. Veja um .mozconfig totalmente funcional para o navegador desktop:</p> + +<pre>. $topsrcdir/browser/config/mozconfig +mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff-dbg + +ac_add_options --enable-debug +</pre> + +<p>Tentativas de usar o <code><a href="/en/ccache" title="ccache">ccache</a></code> irá muito provavelmente resultar em falhas de compilação. É também necessário evitar builds otimizados, uma vez que estes irão modificar as macros no que resulta em muitos falso-positivos.</p> + +<p>Nessa altura, o ambiente build do seu Mozilla deve estar configurado para compilar através do analisador estático do Clang!</p> + +<h2 id="Realizando_scan_no_build">Realizando scan no build</h2> + +<p>Não é o suficiente simplesmente iniciar o build do forma normal. Em vez disso, você precisa executar o build através de um script utilitário do Clang que irá acompanhar toda a análise produzida e consolidá-la automaticamente.</p> + +<p>Esse scritp é o scan-build. Você pode encontrá-lo em $clang_source/tools/scan-build/scan-build.</p> + +<p>Tente executar o seu build com o scan-build:</p> + +<pre>$ cd /path/to/mozilla/source + +# Blow away your object directory because incremental builds don't make sense +$ rm -rf obj-dir + +# To start the build: +scan-build --show-description ./mach build -v + +# The above should execute without any errors. However, it should take longer than +# normal because all compilation will be executing through Clang's static analyzer, +# which adds overhead. +</pre> + +<p>Se tudo estiver ocorrendo bem, você deve ver muitas informações no console, assim como qualquer build.</p> + +<p>Na primeira vez que você rodar o scan-build, dê CTRL+C depois que alguns arquivos forem compilados. Você deve ver uma saída como essa:</p> + +<pre>scan-build: 3 bugs found. +scan-build: Run 'scan-view /Users/gps/tmp/mcsb/2011-12-15-3' to examine bug reports. +</pre> + +<p>Se você ver uma mensagem como essa:</p> + +<pre>scan-build: Removing directory '/var/folders/s2/zc78dpsx2rz6cpc_21r9g5hr0000gn/T/scan-build-2011-12-15-1' because it contains no reports. +</pre> + +<p>ou nenhum resultado de análise estática está disponível ainda ou seu ambiente não está configurado corretamente.</p> + +<p>Por padrão, <code>scan-build</code> produz resultados em um diretório em uma localização pseudo-temporária. Você pode controlar onde os resultados vão ao passar o argumento <code>-o /path/to/output</code> no script <code>scan-build</code>.</p> + +<p>Você pode também querer executar <code>scan-build --help</code> para ver todas as opções disponíveis. É possível habilitar ou desabilitar seletivamente analisadores individuais, por exemplo.</p> + +<h2 id="Analisando_a_saída">Analisando a saída</h2> + +<p>Uma vez que o build estiver completado, o script <code>scan-build</code> irá produzir um relatório resumindo tudo que foi encontrado. Este é chamado de <code>index.html</code> no diretório de saída. Você pode executar o <code>scan-view</code> (em <code>$clang_source/tools/scan-view/scan-view</code>) como a saída do <code>scan-build</code> sugere; isso meramente ativa um servidor HTTP local. Ou você deve poder abrir o <code>index.html</code> diretamente no seu navegador.</p> + +<h2 id="Falso-positivos">Falso-positivos</h2> + +<p>Há muitos falso-positivos atualmente no analisador estático. Muitos deles são devido ao analisador ter dificuldades em seguir o relativamente complicado tratamento de erros em várias macros do pré-processador. Por exemplo, a maioria das nossas macros <code>ASSERT()</code> chamam outras funções as quais elas chamam <code>assert()</code> ou fazem alguma outra coisa.</p> + +<p>A longo-prazo, nós devemos adicionar um conjunto de macros habilidados via <code>#ifdef</code> o que fornece simples e compreensíveis macros. Há também algumas <code>pragma</code>s e extensões do compilador que podemos investigar usando avisos silenciosos.</p> + +<h2 id="Veja_também">Veja também</h2> + +<ul> + <li><a href="/en/Configuring_Build_Options" title="Configuring Build Options">Configurando Opções de Build</a></li> + <li><a href="/En/Developer_Guide" title="Developer Guide">Guia do Desenvolvedor</a></li> +</ul> diff --git a/files/pt-br/mozilla/testing/index.html b/files/pt-br/mozilla/testing/index.html new file mode 100644 index 0000000000..694d1a2b9a --- /dev/null +++ b/files/pt-br/mozilla/testing/index.html @@ -0,0 +1,13 @@ +--- +title: Testing Mozilla code +slug: Mozilla/Testing +tags: + - Landing + - Mozilla + - NeedsTranslation + - Testing + - TopicStub +translation_of: Mozilla/Testing +--- +<p><span class="seoSummary">Testing your code is important! Before you can even get your code committed into the source tree, you have to test it, and larger patches have to have automated tests. These articles will help you master (and continue to excel at) testing Mozilla code.</span></p> +<p>{{LandingPageListSubpages}}</p> diff --git a/files/pt-br/mozilla/thunderbird/autoconfiguration/fileformat/definition/index.html b/files/pt-br/mozilla/thunderbird/autoconfiguration/fileformat/definition/index.html new file mode 100644 index 0000000000..382994aa23 --- /dev/null +++ b/files/pt-br/mozilla/thunderbird/autoconfiguration/fileformat/definition/index.html @@ -0,0 +1,6 @@ +--- +title: Autoconfig file format definition +slug: Mozilla/Thunderbird/Autoconfiguration/FileFormat/Definition +translation_of: Mozilla/Thunderbird/Autoconfiguration/FileFormat/Definition +--- +<p>Por favor veja <a href="https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat" class="link-https" title="https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat">https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat</a>.</p> diff --git a/files/pt-br/mozilla/thunderbird/autoconfiguration/fileformat/index.html b/files/pt-br/mozilla/thunderbird/autoconfiguration/fileformat/index.html new file mode 100644 index 0000000000..23ab347d21 --- /dev/null +++ b/files/pt-br/mozilla/thunderbird/autoconfiguration/fileformat/index.html @@ -0,0 +1,9 @@ +--- +title: Autoconfig file format +slug: Mozilla/Thunderbird/Autoconfiguration/FileFormat +translation_of: Mozilla/Thunderbird/Autoconfiguration/FileFormat +--- +<ul> + <li><a href="/en/Thunderbird/Autoconfiguration/FileFormat/HowTo" title="en/Thunderbird/Autoconfiguration/FileFormat/HowTo">Como criar um arquivo de configuração</a></li> + <li><a href="https://developer.mozilla.org/pt-BR/docs/Mozilla/Thunderbird/Autoconfiguration/FileFormat/Definition" title="en/Thunderbird/Autoconfiguration/FileFormat/Definition">Definição de formato de arquivo</a></li> +</ul> diff --git a/files/pt-br/mozilla/thunderbird/autoconfiguration/index.html b/files/pt-br/mozilla/thunderbird/autoconfiguration/index.html new file mode 100644 index 0000000000..196fb9e443 --- /dev/null +++ b/files/pt-br/mozilla/thunderbird/autoconfiguration/index.html @@ -0,0 +1,166 @@ +--- +title: Autoconfiguration in Thunderbird +slug: Mozilla/Thunderbird/Autoconfiguration +tags: + - Administration + - NeedsTranslation + - TopicStub + - enterprise +translation_of: Mozilla/Thunderbird/Autoconfiguration +--- +<p>Author: Ben Bucksch<br> + Please do not change this document without consulting the author</p> + +<p>Thunderbird 3.1 and later (and 3.0 to some degree) includes mail account autoconfiguration functionality. The goal of autoconfiguration is to make it very easy for users to configure the connection of Thunderbird to their email servers. In many cases, people should be able to download and install Thunderbird, enter their real name, email address and password in the Account Setup Wizard and have a fully functioning mail client and get and send their mail as securely as possible.</p> + +<p>See also:</p> + +<ul> + <li>the <a class="link-https" href="https://wiki.mozilla.org/Thunderbird:Autoconfiguration" title="https://wiki.mozilla.org/Thunderbird:Autoconfiguration">project page on the Mozilla wiki</a> for background, design, implementation and project details</li> + <li>for instructions for users, see <a class="external" href="http://support.mozillamessaging.com/en-US/kb/Automatic-Account-Configuration" title="http://support.mozillamessaging.com/en-US/kb/Automatic+Account+Configuration">Automatic Account Configuration</a> on the Thunderbird Knowledge Base.</li> + <li>the configuration file <a href="/en/Thunderbird/Autoconfiguration/FileFormat/HowTo" title="en/Thunderbird/Autoconfiguration/FileFormat/HowTo">description</a> and <a href="https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat" title="en/Thunderbird/Autoconfiguration/FileFormat/Definition">definition</a></li> +</ul> + +<p>This document describes how Autoconfiguration in Thunderbird works, and what to do to allow mail servers to be autoconfigured.</p> + +<h1 id="Mechanisms">Mechanisms</h1> + +<p>Thunderbird gets the server settings via different means, each of which is intended for different cases:</p> + +<ul> + <li>ISPDB<br> + The ISPDB is a central database, currently hosted by Mozilla Messaging, but free to use for any client. It contains settings for the world's largest ISPs. We hope that the database will soon have enough information to autoconfigure approximately 50% of our user's email accounts.<br> + It was added merely because we cannot assume that all big ISPs (including Microsoft) will immediately set up a configuration server for Thunderbird.</li> + <li>Configuration server at ISP<br> + ISPs have the option to provide their configuration information themselves directly to users, by setting up a web server at autoconfig.<domain>, which simply returns a static XML file with the configuration, as described below. For more complicated setups, for example when the login name does not appear in the the email address, the XML file can also be generated by the ISP. In such complicated cases, this is the only way to allow an automatic setup.</li> + <li>Configuration file on harddisk<br> + Administrators may place a configuration file in the Thunderbird installation folder. This is mainly intended for companies who install Thunderbird on their employees' computers and want to enable easy account setup without having to set up a configuration server. This method is not practical for other use cases, because it is difficult to update the configuration file. Therefore, public ISPs should use a configuration server.</li> + <li>Guessing<br> + If all other mechanisms failed, Thunderbird tries to guess the configuration, by trying common server names like imap.<domain>, smtp.<domain>, mail.<domain> etc., and, when a mail server answers, checking whether it supports SSL, STARTTLS and encrypted passwords (CRAM-MD5).</li> + <li>Manual configuration<br> + If guessing fails the user must manually enter the configuration information. Users can may also manually modify the account settings even if configuration information is successfully obtained by the methods described above.</li> +</ul> + +<p>All the lookup mechanisms use the email address domain as base for the lookup. For example, for the email address <a class="moz-txt-link-abbreviated link-mailto" href="mailto:fred@example.com">fred@example.com</a> , the lookup is performed as (in this order):</p> + +<ol> + <li><em>tb-install-dir</em>/isp/example.com.xml on the harddisk</li> + <li>check for autoconfig.example.com</li> + <li>look up of "example.com" in the ISPDB</li> + <li>look up "MX example.com" in DNS, and for mx1.mail.hoster.com, look up "hoster.com" in the ISPDB</li> + <li>try to guess (imap.example.com, smtp.example.com etc.)</li> +</ol> + +<p>We may in the future add DNS SRV records as supported mechanism in the future, but we currently do not.</p> + +<h1 id="How_to_add_support_for_your_domain">How to add support for your domain</h1> + +<h2 id="Classification">Classification</h2> + +<p>If you are a big ISP (> 100,000 users) providing email addresses solely under a few domains like "example.com" and "example.de", you may either submit the configuration to the ISPDB or set up a configuration server.<br> + <br> + If you support email aliases and the user's login name is not part of the email address (for example, users may have <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:hero@example.com">"hero@example.com"</a> as email address, but the IMAP/POP/SMTP login name is neither "hero" nor <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:hero@example.com">"hero@example.com"</a>, but "u67578"), you need to set up a configuration server, which does the email address -> login name lookup.<br> + <br> + If you host customer domains, i.e. you are "hoster.com", but your customers have <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:fred@flintstone.com">"fred@flintstone.com"</a> and <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:louis@kent.com">"louis@kent.com"</a> as domains, with only a few users per domain, you need to set up a configuration server (or rely on DNS MX).<br> + <br> + If you are a small company installing Thunderbird on your employees' desktops, you can place a configuration file in the Thunderbird installation folder.</p> + +<h2 id="ISPDB">ISPDB</h2> + +<p>Database URL is <a class="moz-txt-link-rfc2396E link-https" href="https://live.mozillamessaging.com/autoconfig/v1.1/" title="https://live.mozillamessaging.com/autoconfig/v1.1/"><https://live.mozillamessaging.com/autoconfig/v1.1/></a>, append domain name, e.g. <a class="moz-txt-link-rfc2396E link-https" href="https://live.mozillamessaging.com/autoconfig/v1.1/freenet.de" title="https://live.mozillamessaging.com/autoconfig/v1.1/freenet.de"><https://live.mozillamessaging.com/autoconfig/v1.1/freenet.de></a>.<br> + <br> + Current process: File a bug in <a class="link-https" href="https://bugzilla.mozilla.org/enter_bug.cgi?product=Webtools&component=ISPDB%20Database%20Entries&op_sys=All&rep_platform=All">Bugzilla</a>, Product "Webtools", Component "ISPDB Database Entries", with a configuration file that matches the requirements described below. The component is actively watched for new bugs (as of November 2015) so there is no need to request review on the file.</p> + +<h2 id="Configuration_server_at_ISP">Configuration server at ISP</h2> + +<p>Given the email address <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:fred@example.com">"fred@example.com"</a>, Thunderbird first checks <<span class="external free"><a class="moz-txt-link-freetext external" href="http://autoconfig.example.com/mail/config-v1.xml?emailaddress=fred@example.com">http://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=fred@example.com</a></span>> and then <a class="moz-txt-link-rfc2396E external" href="http://example.com/.well-known/autoconfig/mail/config-v1.1.xml" title="http://example.com/.well-known/autoconfig/mail/config-v1.1.xml"><http://example.com/.well-known/autoconfig/mail/config-v1.1.xml></a>.</p> + +<h3 id="Small_company">Small company</h3> + +<p>If you are a small company, you can put the XML configuration file on your web server, at URL <a class="moz-txt-link-rfc2396E external" href="http://example.com/.well-known/autoconfig/mail/config-v1.1.xml"><http://example.com/.well-known/autoconfig/mail/config-v1.1.xml></a>. (This is not yet finalized and subject to change.)</p> + +<h3 id="Domain_hoster">Domain hoster</h3> + +<p>If you are an ISP that hosts domains for your customers - for example, you are hoster.com and your customer registers fancy.com or example.com, and your servers accept and serve the mail for example.com -, you should set up an autoconfig server.</p> + +<h4 id="DNS">DNS</h4> + +<p>For each customer domain, you add a DNS record (in addition to the existing MX, A www etc. DNS records):<br> + <code>autoconfig IN A 10.2.3.4</code><br> + or<br> + <code>autoconfig IN CNAME autoconfig.hoster.com</code>.<br> + ... where 10.2.3.4 and autoconfig.hoster.com are IP addresses / hostnames you own.<br> + This allows Thunderbird to find you as hoster.</p> + +<p>To make the Version without an autoconfig DNS Entry work you have to make sure that example.com points to the Webserver you will place the config-v1.1.xml on.</p> + +<p>Example: <span style="font-family: courier new,andale mono,monospace; line-height: normal;">example.com A 10.2.3.4</span></p> + +<h4 id="Web_server">Web server</h4> + +<p>You set up a web server bound to a physical IP address. This may be on the same machine as other web servers, but the web server must be configured to the content to any requested domain.<br> + <br> + You must use an virtual host that match all autoconfig.* domains of your customers. In Apache terms, you can use a "ip-based virtual host". In the Apache configuration files, that means something like: Listen 10.2.3.4:80 (of course, you use a public IP address that you own)</p> + +<pre><VirtualHost 10.2.3.4:80> #Must be the first and only virtual host with this ip! + DocumentRoot /var/www/autoconfig/ + ServerName autoconfig.hoster.com + <Directory /var/www/autoconfig> + Order allow,deny + allow from all + </Directory> +</VirtualHost></pre> + +<p>Place the configuration file at the URL /mail/config-v1.1.xml on that host.</p> + +<p>All config files must be served as <code>Content-Type: text/xml</code> (or <code>application/xml</code>), otherwise the file will be ignored. Also, they must use charset UTF-8 (esp. if there are any non-ASCII-characters).</p> + +<p>If you like to use name-based virtual hosts. You probably don't want to setup the autoconfig subdomain for every domain of your customers.<br> + You can add a Rewriterule in the default virtual host (on debian /etc/apache2/sites-enabled/000-default) to match all autoconfig.* subdomains:</p> + +<pre><VirtualHost *:80> #Must be the first Virtual host + ServerAdmin webmaster@hoster.com + ServerName www + DocumentRoot /var/www + RewriteEngine On + RewriteCond %{HTTP_HOST} ^autoconfig\. [NC] + RewriteRule ^/(.*) http://autoconfig.hoster.com/$1 [L,R=301,NE] + #... +</VirtualHost> +<VirtualHost *:80> + DocumentRoot /var/www/autoconfig/ + ServerName autoconfig.hoster.com + <Directory /var/www/autoconfig> + Order allow,deny + allow from all + </Directory> +</VirtualHost> +</pre> + +<p>If you use nginx, you can easily add a subdomain to all your Domains, which does the same as above. Either, you can redirect them to a common hostname:</p> + +<pre>server { + listen 10.2.3.4:80; #use your server's public IP here! + server_name autoconfig.*; + return 301 http://autoconfig.hoster.com$request_uri; +} +</pre> + +<p>Or serve them directly from a common directory:</p> + +<pre>server { + listen 10.2.3.4:80; #again, use your server's public IP here! + server_name autoconfig.*; + location / { + root /var/www/autoconfig; + } +} +</pre> + +<p> </p> + +<h2 id="Configuration_file">Configuration file</h2> + +<p>This is described at <a href="/en/Thunderbird/Autoconfiguration/FileFormat/HowTo" title="en/Thunderbird/Autoconfiguration/FileFormat/HowTo">How to create a configuration file</a> and <a href="/en/Thunderbird/Autoconfiguration/FileFormat/Definition" title="en/Thunderbird/Autoconfiguration/FileFormat/Definition">defined</a> on the sub-pages.</p> + +<p>{{ languages( { "ja": "ja/Thunderbird/Autoconfiguration" } ) }}</p> diff --git a/files/pt-br/mozilla/thunderbird/index.html b/files/pt-br/mozilla/thunderbird/index.html new file mode 100644 index 0000000000..c154f29271 --- /dev/null +++ b/files/pt-br/mozilla/thunderbird/index.html @@ -0,0 +1,69 @@ +--- +title: Thunderbird +slug: Mozilla/Thunderbird +tags: + - NeedsTranslation + - TopicStub + - thunderbird +translation_of: Mozilla/Thunderbird +--- +<p><span class="seoSummary"><strong>Thunderbird</strong> is Mozilla's mail/messaging application. These pages document Thunderbird and also provide links to documentation about the <a href="/en-US/docs/tag/MailNews" title="tag/MailNews">MailNews</a> backend which is also used in other projects such as <a href="http://wiki.mozilla.org/Penelope">Eudora/Penelope</a>, <a href="http://www.seamonkey-project.org/">Seamonkey</a>, <a href="http://www.mozillazine.org/talkback.html?article=22774">Correo</a>, etc.</span></p> + +<p>Thunderbird is Firefox's kid sibling, and is built on the same technical platform as the web browser. In development for many years, and currently one of the most popular open source email clients, it is used by millions of people around the world to bring together all their email accounts, newsgroup and feed reading in a familiar high-productivity environment. (From early 2007 to early 2011 Thunderbird was developed by <a class="link-https" href="https://en.wikipedia.org/wiki/Mozilla_Messaging" title="https://en.wikipedia.org/wiki/Mozilla_Messaging">Mozilla Messaging</a>, a subsidiary that was owned by Mozilla.)</p> + +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 class="Documentation" id="Documentation" name="Documentation">Documentation</h2> + + <dl> + <dt><a href="https://developer.mozilla.org/en-US/docs/Simple_Thunderbird_build" title="Simple Thunderbird build">Building Thunderbird</a></dt> + <dd>Information about building Thunderbird with the <a href="/en-US/docs/comm-central" title="comm-central">comm-central</a> repository. There's also information about <a href="/en-US/docs/How_comm-central%27s_build_system_works" title="How_comm-central's_build_system_works">how comm-central works</a>, how the <a href="/en-US/docs/Mailnews_and_Mail_code_review_requirements" title="Mailnews and Mail code review requirements">review process works</a> and how to use the <a href="/en-US/docs/Using_the_Mozilla_symbol_server" title="Using the Mozilla symbol server">Mozilla symbol server</a> to help with debugging.</dd> + <dt><a href="/en-US/docs/MailNews_Protocols" title="MailNews_Protocols">MailNews Protocols</a></dt> + <dd>Rough documentation about mail protocols..</dd> + <dt><a href="/en-US/docs/DB_Views_%28message_lists%29" title="DB_Views_(message_lists)">Database views</a></dt> + <dd>Backend information about {{ Interface("nsIMsgDBView") }} and related interfaces..</dd> + <dt><a href="/en-US/docs/Thunderbird/Thunderbird_API_documentation" title="Thunderbird API documentation">Thunderbird API documentation</a></dt> + <dd><a href="/en-US/docs/Thunderbird/Thunderbird_API_documentation" title="Thunderbird API documentation">Thunderbird API documentation</a></dd> + <dt><a href="/en-US/docs/Extensions/Thunderbird" title="Extensions/Thunderbird/">Extension documentation</a></dt> + <dd>Tutorials and tips for building Thunderbird extensions</dd> + <dt><a href="/en-US/docs/Thunderbird/Thunderbird_Automated_Testing" title="Thunderbird Automated Testing">Automated Testing</a></dt> + <dd>Details of Thunderbird's automated testing facilities</dd> + <dt><a href="/en-US/docs/Thunderbird/Thunderbird_in_the_Enterprise" title="Thunderbird in the Enterprise">Thunderbird in the Enterprise</a></dt> + <dd>Help with deploying Thunderbird in large organizations</dd> + </dl> + + <p><span class="alllinks"><a href="/en-US/docs/tag/Thunderbird" title="tag/Thunderbird">View All...</a></span></p> + </td> + <td> + <h2 class="Community" id="Community" name="Community">Community</h2> + + <ul> + <li>Support is handled at <a href="https://support.mozilla.org/en-US/products/thunderbird">Mozilla Support</a></li> + <li>Extensions questions are frequently discussed on the dev-apps-thunderbird group: {{ DiscussionList("dev-apps-thunderbird", "mozilla.dev.apps.thunderbird") }}</li> + <li>Development discussion happens on the tb-planning mailing list: + <ul> + <li><a class="link-https" href="https://mail.mozilla.org/listinfo/tb-planning" title="https://mail.mozilla.org/listinfo/tb-planning">subscribe</a></li> + <li><a class="link-https" href="https://mail.mozilla.org/pipermail/tb-planning/" title="https://mail.mozilla.org/pipermail/tb-planning/">archives</a></li> + </ul> + </li> + <li><a href="http://forums.mozillazine.org/viewforum.php?f=50">Mozillazine forums</a></li> + <li><a href="http://www.mozillamessaging.com/">Mozilla Messaging web page</a></li> + <li><a class="link-irc" href="irc://irc.mozilla.org/thunderbird">#thunderbird on irc.mozilla.org</a> (for Users)</li> + <li><a class="link-irc" href="irc://irc.mozilla.org/maildev">#maildev on irc.mozilla.org</a> (for Developers)</li> + <li>a list of all <a href="http://wiki.mozilla.org/Thunderbird/CommunicationChannels" title="Thunderbird communication channels">Thunderbird communication channels</a></li> + </ul> + + <h2 class="Tools" id="Tools" name="Tools">Tools</h2> + + <ul> + <li><a href="http://ted.mielczarek.org/code/mozilla/extensiondev/">Extension developer's extension</a></li> + <li><a href="/en-US/docs/DOM_Inspector" title="DOM_Inspector">DOM Inspector</a></li> + </ul> + </td> + </tr> + </tbody> +</table> + +<p> </p> |