diff options
Diffstat (limited to 'files/ru/mozilla')
126 files changed, 0 insertions, 18613 deletions
diff --git a/files/ru/mozilla/add-ons/add-on_guidelines/index.html b/files/ru/mozilla/add-ons/add-on_guidelines/index.html deleted file mode 100644 index 5be041195c..0000000000 --- a/files/ru/mozilla/add-ons/add-on_guidelines/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Add-on guidelines -slug: Mozilla/Add-ons/Add-on_guidelines -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="Be_Transparent">Be Transparent</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 (<em>e.g.,</em> 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="Be_Respectful_to_Users">Be Respectful to Users</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 should 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. Making them difficult or impossible to revert is strongly discouraged.</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="Be_Safe">Be Safe</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<em>local</em> 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="Be_Stable">Be Stable</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="Exceptions">Exceptions</h2> - -<ul> - <li>Add-ons can break some of these guidelines if that's their intended purpose and there isn't malicious intent (<em>e.g.,</em> 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="Enforcement">Enforcement</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<em>must</em> 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/ru/mozilla/add-ons/amo/index.html b/files/ru/mozilla/add-ons/amo/index.html deleted file mode 100644 index 0845e54e3d..0000000000 --- a/files/ru/mozilla/add-ons/amo/index.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: AMO -slug: Mozilla/Add-ons/AMO -tags: - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Add-ons/AMO ---- -<p>{{AddonSidebar}}</p> - -<p>Content to be added.</p> diff --git a/files/ru/mozilla/add-ons/amo/policy/index.html b/files/ru/mozilla/add-ons/amo/policy/index.html deleted file mode 100644 index 7baca9debb..0000000000 --- a/files/ru/mozilla/add-ons/amo/policy/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: AMO Policies -slug: Mozilla/Add-ons/AMO/Policy -tags: - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Add-ons/AMO/Policy ---- -<p>{{AddonSidebar}}</p> - -<p>Mozilla стремится обеспечить отличный опыт для наших пользователей и разработчиков надстроек. Перед отправкой своего дополнения ознакомьтесь с приведенными ниже правилами.</p> - - -<dl> - <dd></dd><dt><a href="/Mozilla/Add-ons/AMO/Policy/Agreement">Пакт о разработке</a></dt> -<dd>Effective January 5, 2016</dd> <dt><a href="/Mozilla/Add-ons/AMO/Policy/Reviews">Обзор процесса</a></dt> -<dd>Add-ons extend the core capabilities of Firefox, allowing users to modify and personalize their Web experience. A healthy add-on ecosystem, built on trust, is vital for developers to be successful and users to feel safe making Firefox their own. For these reasons, Mozilla requires all add-ons to comply with the following set of policies on acceptable practices. The below is not intended to serve as legal advice, nor is it intended to serve as a comprehensive list of terms to include in your add-on’s privacy policy.</dd> <dt><a href="/Mozilla/Add-ons/AMO/Policy/Featured">Избранные дополнения</a></dt> -<dd>How up-and-coming add-ons become featured and what's involved in the process. </dd> <dt><a href="/Mozilla/Add-ons/AMO/Policy/Contact">Связаться с нами</a></dt> -<dd>Add-ons allow developers to extend and modify the functionality of Firefox.</dd> <br> - <strong><a href="https://developer.mozilla.org/en-US/Add-ons#Contact_us">Связаться с нами </a></strong><br> - Как связаться с нами в отношении этих политик или вашего дополнения. -</dl> diff --git a/files/ru/mozilla/add-ons/code_snippets/index.html b/files/ru/mozilla/add-ons/code_snippets/index.html deleted file mode 100644 index d7e42cd381..0000000000 --- a/files/ru/mozilla/add-ons/code_snippets/index.html +++ /dev/null @@ -1,148 +0,0 @@ ---- -title: Code snippets -slug: Mozilla/Add-ons/Code_snippets -tags: - - Add-ons - - Code snippets - - Extensions - - NeedsTranslation - - TopicStub -translation_of: Archive/Add-ons/Code_snippets ---- -<p> </p> - -<div class="warning"> -<p>Дополнения с использованием методов, описанных в этом документе, считаются устаревшей технологией в Firefox. Не используйте эти методы для разработки новых дополнений. Используйте вместо этого <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions">WebExtensions</a>. Если вы поддерживаете надстройку, которая использует описанные здесь методы, рассмотрите возможность переноса ее на использование WebExtensions.</p> - -<p><strong>Начиная с <a href="https://wiki.mozilla.org/RapidRelease/Calendar">Firefox 53</a>, никакие новые устаревшие дополнения не будут приниматься addons.mozilla.org (AMO) для Firefox на ПК и Firefox для Android.</strong></p> - -<p><strong>Начиная с <a href="https://wiki.mozilla.org/RapidRelease/Calendar">Firefox 57</a>, только дополнения разработанные на основе WebExtensions API будут поддерживаться для Firefox на ПК и Firefox для Android. </strong></p> - -<p> Даже до Firefox 57 изменения, появляющиеся на платформе Firefox, нарушат многие устаревшие расширения. Эти изменения включают многопроцессорные Firefox (e10s), песочницу и несколько процессов контента. Устаревшие расширения, на которые влияют эти изменения, должны мигрировать, чтобы использовать API WebExtensions, если они могут. Дополнительную информацию см. в <a href="https://blog.mozilla.org/addons/2017/02/16/the-road-to-firefox-57-compatibility-milestones/">документе "Признаки совместимости"</a>.</p> - -<p>Страница wiki, содержащая <a href="https://wiki.mozilla.org/Add-ons/developer/communication">ресурсы, пути миграции, рабочие часы и т.д.</a>, доступна, чтобы помочь разработчикам перейти на новые технологии.</p> -</div> - -<p> </p> - -<p>This is a quick list of useful code snippets (small code samples) available for developers of extensions for the various Mozilla applications. Many of these samples can also be used in XULRunner applications, as well as in actual Mozilla code itself.</p> - -<p>These examples demonstrate how to accomplish basic tasks that might not be immediately obvious.</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="http://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">External links</h2> - -<p>The content at <a class="external" href="http://kb.mozillazine.org/Category:Example_code">MozillaZine Example Code</a> is slowly being moved here, but you can still find useful examples there for now.</p> diff --git a/files/ru/mozilla/add-ons/code_snippets/куки/index.html b/files/ru/mozilla/add-ons/code_snippets/куки/index.html deleted file mode 100644 index 7a77657bdb..0000000000 --- a/files/ru/mozilla/add-ons/code_snippets/куки/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Cookies -slug: Mozilla/Add-ons/Code_snippets/куки -translation_of: Archive/Add-ons/Code_snippets/Cookies ---- -<h3 id="Reading_existing_cookies" name="Reading_existing_cookies">Чтение существующих cookie</h3> - -<p>Cookie для данного хоста, как объекты <code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Add-ons/Code_snippets/%D0%BA%D1%83%D0%BA%D0%B8" title="">nsICookie2</a></code>, могут быть пронумерированны так:</p> - -<pre class="brush: js">let enum = Services.cookies.getCookiesFromHost("example.com"); -while (enum.hasMoreElements()) { - var cookie = e.getNext().QueryInterface(Ci.nsICookie2); - dump(cookie.host + ";" + cookie.name + "=" + cookie.value + "\n"); -} -</pre> - -<p>Все cookie, вне зависимости от хоста, могут быть пронумерированны с помощью <code>Services.cookies.enumerator</code>, а не <code>getCookiesFromHost()</code>.</p> - -<h3 id="Setting_a_cookie" name="Setting_a_cookie">Настраивание cookie</h3> - -<p>Следующий код показывает как настроить cookie в Firefox.</p> - -<pre class="brush: js">Services.cookies.add(".host.example.com", "/cookie-path", "cookie_name", "cookie_value", is_secure, is_http_only, is_session, expiry_date); -</pre> - -<h3 id="See_also" name="See_also">Смотрите также</h3> - -<ul> - <li>{{ Domxref("document.cookie") }}</li> - <li>{{ Interface("nsICookie") }}</li> - <li>{{ Interface("nsICookie2") }}</li> - <li>{{ Interface("nsICookieService") }}</li> - <li>{{ Interface("nsICookieManager") }}</li> - <li>{{ Interface("nsICookieManager2") }}</li> - <li><a href="/en/Web_Development/HTTP_cookies" title="HTTP cookies">HTTP cookies</a></li> -</ul> diff --git a/files/ru/mozilla/add-ons/firefox_for_android/index.html b/files/ru/mozilla/add-ons/firefox_for_android/index.html deleted file mode 100644 index a636438acb..0000000000 --- a/files/ru/mozilla/add-ons/firefox_for_android/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Устаревшие расширения для Firefox для Android -slug: Mozilla/Add-ons/Firefox_for_Android -tags: - - NeedsTranslation - - TopicStub -translation_of: Archive/Add-ons/Legacy_Firefox_for_Android ---- -<p>Firefox для Android поддерживает надстройки, используя ту же <a href="/ru/Add-ons" title="ru/Extensions">систему расширения</a>, что и все другие приложения на базе Gecko. Вы можете использовать <a href="https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/mobile.html">SDK Add-on</a> или создать <a href="/en-US/Add-ons/Bootstrapped_extensions">вручную bootstrap-дополнения</a>. Вы даже можете создавать традиционные перезагружаемые дополнения, хотя предпочтительны и другие два подхода.</p> - -<p>Дополнения, которые работают с настольным Firefox, <strong>не</strong> работают автоматически в Firefox для Android:</p> - -<ul> - <li>В пользовательском интерфейсе нет видимого XUL, поэтому вы не можете использовать наложение для создания пользовательского интерфейса.</li> - <li>Внутренний код и объекты, такие как <code>gBrowser</code>, не существуют. Посмотрите на Firefox в файле <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>Android, чтобы узнать о внутренних компонентах. Значительная часть той же фундаментальной функциональности существует.</li> - <li>Службы, такие как <code>nsIPromptService</code> и <code>nsIAlertsService</code>, реализованы для использования собственного пользовательского интерфейса Android.</li> - <li>Существует простой объект JavaScript, называемый <a href="https://developer.mozilla.org/en/Extensions/Mobile/API/NativeWindow" title="en/Extensions/Mobile/NativeWindow"><code>NativeWindow</code></a>, который позволяет вам манипулировать частями пользовательского интерфейса Android.</li> -</ul> - -<p>Следующие статьи предоставляют помощь в разработке расширений для Firefox на Android. Кроме того, обратитесь к <a class="internal" href="/en-US/Add-ons" title="En/Extensions">общей документации по расширениям</a>, которая применяется ко всем приложениям Mozilla</p> - -<div class="column-container"> -<div class="column-half"> -<h3 id="Учебники">Учебники</h3> - -<dl> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/Walkthrough">Прохождение</a></dt> - <dd>Разработка, упаковка и установка простого дополнения для Firefox для Android.</dd> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/Firefox_Hub_Walkthrough">Прохождение Firefox Hub</a></dt> - <dd>Как разработать Firefox Hub add-on и добавить его в Firefox для Android (главная страница).</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Mobile_development">Add-on SDK</a></dt> - <dd>Как разрабатывать дополнения Firefox для Android с помощью Add-on SDK.</dd> -</dl> - -<h3 id="Образец_кода">Образец кода</h3> - -<dl> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/Code_snippets">Фрагменты кода</a></dt> - <dd>Образцы кода для общих задач.</dd> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/Initialization_and_Cleanup">Инициализация и очистка</a></dt> - <dd>Как инициализировать ваше дополнение при его запуске и очистке при его закрытии.</dd> - <dt><a href="https://github.com/mozilla/firefox-for-android-addons">Firefox для Android Add-ons в репозитории Github</a></dt> - <dd>Коллекция модулей JS, кода примера и плагинов-репозиториев, которые помогут вам создавать надстройки для Firefox для Android.</dd> -</dl> -</div> - -<div class="column-half"> -<h3 id="Справка_по_API">Справка по API</h3> - -<dl> - <dt><a class="internal" href="/en-US/Add-ons/Firefox_for_Android/API/NativeWindow"><code>NativeWindow</code></a></dt> - <dd>Создайте собственные виджеты пользовательского интерфейса Android.</dd> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/API/BrowserApp"><code>BrowserApp</code></a></dt> - <dd>Доступ к вкладкам браузера и веб-содержимому, которое они размещают.</dd> - <dt><a class="internal" href="/en-US/Add-ons/Firefox_for_Android/API/Prompt.jsm"><code>Prompt.jsm</code></a></dt> - <dd>Вывод встроенного диалогового окна Android.</dd> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/API/HelperApps.jsm"><code>HelperApps.jsm</code></a></dt> - <dd>Запросить и запустить собственные приложения, установленные в системе.</dd> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/API/Notifications.jsm"><code>Notifications.jsm</code></a></dt> - <dd>Использование внешних свойств уведомлений системы Android.</dd> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/API/Home.jsm"><code>Home.jsm</code></a></dt> - <dd>Настройка домашней страницы.</dd> - <dt><a href="/en-US/Add-ons/Firefox_for_Android/API/HomeProvider.jsm"><code>HomeProvider.jsm</code></a></dt> - <dd>Сохранять данные для отображения на главной странице.</dd> - <dt> </dt> -</dl> -</div> -</div> - -<p><code> </code></p> - -<div> -<div id="tap-translate"> </div> -</div> - -<div> -<div id="tap-translate"> </div> -</div> - -<div> -<div id="tap-translate"> </div> -</div> diff --git a/files/ru/mozilla/add-ons/how_to_convert_an_overlay_extension_to_restartless/index.html b/files/ru/mozilla/add-ons/how_to_convert_an_overlay_extension_to_restartless/index.html deleted file mode 100644 index ae42b11ad1..0000000000 --- a/files/ru/mozilla/add-ons/how_to_convert_an_overlay_extension_to_restartless/index.html +++ /dev/null @@ -1,395 +0,0 @@ ---- -title: How to convert an overlay extension to restartless -slug: Mozilla/Add-ons/How_to_convert_an_overlay_extension_to_restartless -translation_of: Archive/Add-ons/How_to_convert_an_overlay_extension_to_restartless ---- -<div class="note"> -<p>This article is a step-by-step tutorial on how to convert an old <a href="https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions">overlay-based extension</a> into a <a href="https://developer.mozilla.org/en-US/Add-ons/Bootstrapped_extensions">restartless (bootstrapped) extension</a> that is also extractionless.</p> -</div> - -<h2 id="Requirements">Requirements</h2> - -<p>First off, what kind of <a href="https://developer.mozilla.org/en-US/Add-ons">add-on</a> are we talking about here? Well, <a href="https://developer.mozilla.org/en-US/docs/XUL_Overlays">XUL overlays</a> and windows, <a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules">JSM files</a>, <a href="https://developer.mozilla.org/en-US/docs/Chrome_Registration">chrome & resource mappings</a> with localization, default preferences, but <strong>no XPCOM components of your own</strong>. Some of that will have to be replaced and the rest will need to be loaded differently.</p> - -<p>Next, what's the minimum version of Firefox we should require (preferably an <a href="https://www.mozilla.org/firefox/organizations/">ESR</a>)? This guide targets <strong>Firefox 17 ESR or later</strong> (or anything else Gecko 17+, such as SeaMonkey 2.14+). This is<em>two</em> ESRs back (as of this writing), which should be plenty. Using the current Firefox ESR, stable version, or Nightly is generally a better idea if given the option, but some users take forever to upgrade.</p> - -<p>There will be no usage of the <a href="/en-US/Add-ons/SDK">Add-on SDK</a> or any other external libraries here. Everything will use APIs available in Firefox 17+ or code provided here.</p> - -<h2 id="Step_1_Use_Services.jsm">Step 1: Use Services.jsm</h2> - -<p>If you load one of Mozilla's internal <a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules">JSM files</a>, for example <a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Services.jsm">Services.jsm</a>, you'll do so via privileged JavaScript code like this:</p> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/Services.jsm");</pre> - -<p>From here on out, it is assumed you've imported Services.jsm somewhere at the top of whatever file you're in and will be using it in all code examples. The examples will also assume that you know how to properly add instructions to your add-on's <a href="https://developer.mozilla.org/en-US/docs/Chrome_Registration">chrome.manifest</a> to add and remove resource, chrome, locale, & etc. mappings, so that you can access your files with custom paths such as:</p> - -<pre>resource://myAddon/filename.ext -chrome://myAddon/content/filename.ext</pre> - -<h2 id="Step_2_No_more_resource_URIs_for_files_internal_to_your_bundle">Step 2: No more resource:// URIs for files internal to your <a href="/en-US/docs/Bundles">bundle</a></h2> - -<p>Unfortunately, resource mappings in your chrome.manifest are <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=675372">still not usable</a> in restartless add-ons, which looks bad, but only because Mozilla is still using resource:// URIs internally and in examples. Resource mappings for files in the mozilla distribution, such as Services.jsm (above), will continue to work. In overlay extensions, you can place a resource mapping in the chrome.manifest for your add-on and load your own JSM from resource:// URIs. It's a great way to modularize your code that's been available since Firefox 3. You can use chrome:// URIs with "<a href="https://developer.mozilla.org/en-US/docs/Components.utils.import">Components.utils.import()</a>" just fine; in fact you've been able to since Firefox 4. However, because it was implemented first for only file:// and resource:// but not chrome://, everyone who learned of this new feature learned that you had to load JSM from resource:// URIs and just stuck with that forever. It does still work if you don't have restartlessness to worry about, though the protocol (or scheme, or whatever term you prefer) really should be avoided at this point. The resource:// protocol actually <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=903959">bleeds into content</a> which allows webpages to detect installed add-ons using the protocol, which is not particularly fantastic (just the static file contents, not any loaded script/data).</p> - -<h3 id="Step_2a_Load_your_JSM_from_chrome">Step 2a: Load your JSM from chrome://</h3> - -<p>Now with that preface out of the way, this part is easy: drop support for Firefox 3.x if you haven't already, move your JSM files to wherever you've got your <a href="https://developer.mozilla.org/en-US/docs/Chrome_Registration#content">chrome mapping</a> to for your XUL overlay and/or windows, import your files from that new chrome mapped path instead of the old resource one, and remove your "resource" line from your chrome.manifest file. It's probably a good idea to do this even if you aren't going fully restartless / extractionless due to the previously mentioned exposure to content of resource mappings.</p> - -<p>Also, drop support for Firefox 4 through 9 while you're at it. Prior to Firefox 10, the chrome.manifest file you rely on wasn't loaded automatically for restartless add-ons. Hacks were required, and probably a bad idea.</p> - -<h3 id="Step_2b_Audit_any_remaining_resource_URI_usage_internal_to_your_extension">Step 2b: Audit any remaining resource:// URI usage internal to your extension</h3> - -<p>If you don't need resource:// URIs for anything else, then you may be able to skip the next step. If not, see if you still can't do things any other way. As with JSMs, a chrome:// URI may be more appropriate. If you want to also make your add-on extractionless then you may need "step 3" if you're loading files with nsIFileInputStream or something similar, or a jar: URI might work. If not, a file:// URI might be fine for you. Restartless add-ons can easily get a <a href="https://developer.mozilla.org/en-US/Add-ons/Bootstrapped_extensions#Bootstrap_data">URI for their install location</a> on startup, so you should look into what you can do with that.</p> - -<h2 id="Step_3_No_more_nsIFile_access_for_files_internal_to_your_bundle">Step 3: No more <a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile">nsIFile</a> access for files internal to your bundle</h2> - -<p>For an extractionless extension, access to files internal to your bundle will not be possible using the nsIFile interface.</p> - -<p>If you need to read data, or otherwise access files within your bundle, there are two options. The first is to use the <a href="/en-US/docs/XPCOM_Interface_Reference/nsIZipReader">nsIZipReader</a> interface which permits continuing to use <a href="/en-US/docs/XPCOM_Interface_Reference/nsIInputStream">nsIInputStream</a>s, etc. The second is to re-code to use <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a>.</p> - -<p>A file:// URI to the install location, or .xpi file, is available in <code>installPath</code> property of the <a href="https://developer.mozilla.org/en-US/Add-ons/Bootstrapped_extensions#Bootstrap_data">bootstrap data structure</a> passed to the <code>startup()</code>, <code>shutdown()</code>, <code>install()</code>, and <code>uninstall()</code> functions in what will be your bootstrap.js file <em>(see below)</em>.</p> - -<p>How to get and load the data of of your add-on's files using the <a href="https://developer.mozilla.org/en-US/Add-ons/Add-on_Manager/AddonManager">Add-on Manager API</a>:</p> - -<pre class="brush: js">// This is the OLD way of getting one of your files -const myAddonID = ...; // Just store a constant with your ID -Components.utils.import("resource://gre/modules/AddonManager.jsm"); -AddonManager.getAddonByID(myAddonID,function(addon) { - var file = Services.io.newURI("resource://myAddon/filename.ext",null,null) - .QueryInterface(Components.interfaces.nsIFileURL) - .file; - var stream = Components.classes["@mozilla.org/network/file-input-stream;1"] - .createInstance(Components.interfaces.nsIFileInputStream) - .QueryInterface(Components.interfaces.nsISeekableStream); - stream.init(file, 0x01, 0444, 0); // read-only, read by owner/group/others, normal behavior - /* do stuff */ -});</pre> - -<p>This bit of code is paraphrased and probably not to be recommended as-is, but it should work. (note that the usage of an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Integers">octal integer literal</a>, while standard for handling permissions, is dangerous and deprecated; usage of use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode#Converting_mistakes_into_errors">ES5 strict mode</a> to disable this and other foot-guns is recommended) If you need to read/manipulate binary data, a <a href="/en-US/docs/XPCOM_Interface_Reference/nsIBinaryInputStream">nsIBinaryInputStream</a> instance is what you'll use on that stream (e.g. 32-bit integers, or fun stuff like <a href="https://flagfox.wordpress.com/2011/02/12/apparently-javascript-cant-do-64-bit-math/">48-bit integers</a>). Not ideal, but it works and performs more than sufficiently well. All of that code above is no longer viable if you also go extractionless (which you should).</p> - -<h3 id="Step_3a_Option_1_Use_nsIZipReader">Step 3a: Option 1: Use <a href="/en-US/docs/XPCOM_Interface_Reference/nsIZipReader">nsIZipReader</a></h3> - -<pre class="brush: js">let zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"] - .createInstance(Components.interfaces.nsIZipReader); -zipReader.open(addonData.installPath); -... -</pre> - -<p>From there you can open <a href="/en-US/docs/XPCOM_Interface_Reference/nsIInputStream">nsIInputStream</a>s, extract files, or perform some other functions. Worst case would be that you extract a file to a temporary location and then use nsIFile operations upon the extracted file.</p> - -<h3 id="Step_3b_Option_2_Use_XMLHttpRequest">Step 3b: Option 2: Use <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a></h3> - -<p>Now, how do we replace that? The answer to that question is to <strong>load your file from a chrome:// URI using XMLHttpRequest</strong>. You may now have another question: wait, what does this have to do with <a href="/en-US/docs/XML">XML</a> or <a href="/en-US/docs/Web/HTTP">HTTP</a>? The answer to that question is, of course, <em>nothing</em>. <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a> is an API created by Microsoft, adopted by Mozilla and other vendors, and hacked into a Swiss Army knife of file loading. You can use it in a web page to fetch a file from your server and you can use it in your add-on to fetch a local file from your installation. The name is a vestigial structure that just makes things confusing. It is nonetheless the "Correct" and best way to do things. It's available in the global for a window, but in JSM you'll need to fetch it from an interface:</p> - -<pre class="brush: js">const XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1", - "nsIXMLHttpRequest");</pre> - -<p>Here's how to load a file using it:</p> - -<pre class="brush: js">function loadFile(url,type,returnresult) -{ - var request = new XMLHttpRequest(); - request.open("GET", url, true); // async=true - request.responseType = type; - request.onerror = function(event) { - logErrorMessage("Error attempting to load: " + url); - returnresult(null); - }; - request.onload = function(event) { - if (request.response) - returnresult(request.response); - else - request.onerror(event); - }; - request.send(); -} -loadFile("chrome://myAddon/content/filename.ext",dataType,function(data) { - /* do stuff with data */ -});</pre> - -<p>Note: When using XMLHttpRequest to access a file:// URL the <code>request.status</code> is not properly set to <code>200</code> to indicate success. In such cases, <code>request.readyState == 4</code>, <code>request.status == 0</code> and <code>request.response</code> will evaluate to true.</p> - -<p>If your file is text, use "text" as your data type. If you're getting <a href="https://developer.mozilla.org/en-US/docs/JSON">JSON</a> this way make sure to explicitly set the type as "text" if you intend to parse it yourself. Even though it says that the default type is "text", Firefox will attempt to autodetect and fail, resulting in an error message in the console. This doesn't seem to break anything, but it is easily avoidable by being explicit with the type. <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#Properties">MDN says</a> you can set the type to "json" instead, if you prefer to have it parse things for you.</p> - -<p>If your file is not text or JSON, then you're going to want to read binary data. The new way to do this is to use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a>. Specify "arraybuffer" as your data type to get one from your XMLHttpRequest. To access that data you're going to need a data view to look at your typed array with. Data that's homogeneous might get away with using something like Uint32Array or one of the other standard typed array views, but it's probably a bad idea. <strong>The basic typed array views are not endian-safe.</strong> This is incredibly stupid. You'd think such an important new JavaScript feature made available for web content and chrome alike would at least have a way to set and keep track of <a href="https://en.wikipedia.org/wiki/Endianness">endianness</a>, but no, it doesn't. Don't use any of the <a href="https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView#Typed_array_subclasses">basic typed arrays</a> for any data you did not earlier write into them in the same program session. Also, they're not particularly helpful if your data isn't all of the exact same type (which it probably isn't).</p> - -<p>The solution to read arbitrary binary data, of various sizes, in an endian-safe way, is to use <a href="https://developer.mozilla.org/en-US/docs/Web/API/DataView">DataView</a>. The other typed array stuff is viable in Firefox 4+. This wasn't added until Firefox 15. If you were using nsIBinaryInputStream or anything similar, figuring out DataView will be fairly straightforward. Just read the docs and it's pretty simple. It will probably be notably faster than whatever you were doing before.</p> - -<p>Reportedly <a href="/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Using_XMLHttpRequest_from_JavaScript_modules_.2F_XPCOM_components">XMLHttpRequest doesn't work reliably when used in JSM under versions of Firefox less than 16</a>, however as previously mentioned, this guide should be taken as requiring Firefox 17+.</p> - -<h2 id="Step_4_Manually_handle_default_preferences">Step 4: Manually handle default preferences</h2> - -<p>Normal extensions load <a href="https://developer.mozilla.org/en-US/docs/Default_Preferences">default preferences</a> from a standardized file automatically. Restartless extensions <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=564675">don't</a> (for no good reason). This part is fairly easy to implement yourself, at least. Here are some functions to handle this:</p> - -<pre class="brush: js">function getGenericPref(branch,prefName) -{ - switch (branch.getPrefType(prefName)) - { - default: - case 0: return undefined; // PREF_INVALID - case 32: return getUCharPref(prefName,branch); // PREF_STRING - case 64: return branch.getIntPref(prefName); // PREF_INT - case 128: return branch.getBoolPref(prefName); // PREF_BOOL - } -} -function setGenericPref(branch,prefName,prefValue) -{ - switch (typeof prefValue) - { - case "string": - setUCharPref(prefName,prefValue,branch); - return; - case "number": - branch.setIntPref(prefName,prefValue); - return; - case "boolean": - branch.setBoolPref(prefName,prefValue); - return; - } -} -function setDefaultPref(prefName,prefValue) -{ - var defaultBranch = Services.prefs.getDefaultBranch(null); - setGenericPref(defaultBranch,prefName,prefValue); -} -function getUCharPref(prefName,branch) // Unicode getCharPref -{ - branch = branch ? branch : Services.prefs; - return branch.getComplexValue(prefName, Components.interfaces.nsISupportsString).data; -} -function setUCharPref(prefName,text,branch) // Unicode setCharPref -{ - var string = Components.classes["@mozilla.org/supports-string;1"] - .createInstance(Components.interfaces.nsISupportsString); - string.data = text; - branch = branch ? branch : Services.prefs; - branch.setComplexValue(prefName, Components.interfaces.nsISupportsString, string); -}</pre> - -<p>Just grab the above, move your default preferences file to your chrome mapping, and then do the following line once during your startup:</p> - -<pre class="brush: js">Services.scriptloader.loadSubScript("chrome://myAddon/content/defaultprefs.js", - {pref:setDefaultPref} ); -</pre> - -<p>That's it. Once you've got the machinery to load and save preferences without having to jump through the various pref type hoops the actual preferences API sends you through, loading the actual preferences file is one line. I'd generally still recommend using the type specific functions for each pref individually, but to load the defaults just use the generic functions above and it's quite simple. The other generic functions are provided above in case you need them. Unfortunately, the built in APIs for dealing with preferences are missing this basic stuff, and its plain text handling doesn't work with Unicode properly.</p> - -<h3 id="Step_4a_Another_way_to_handle_default_preferences">Step 4a: Another way to handle default preferences</h3> - -<p>If you want to keep your preference file in <strong>defaults/preferences/</strong>, the approach above only works as long as your extension is unpacked. For packed extensions (the default), you can either load a module similar to Firebug’s <a href="https://github.com/firebug/firebug/blob/master/extension/modules/prefLoader.js">prefLoader.js</a> or load this <a href="https://gist.github.com/oshybystyi/8cf882bc8b0c9a95a116">workaround module</a>.</p> - -<h2 id="Step_5_No_more_internal_JAR_files">Step 5: No more internal JAR files</h2> - -<p>You know how I've been mentioning extractionless add-ons every once in a while thus far? Well, you should probably consider switching to be extractionless when you go restartless. An old-style add-on installer is packaged something like this:</p> - -<pre>myAddon.xpi file (glorified ZIP) -└─ chrome.manifest -└─ install.rdf -└─ chrome folder - └─ myAddon folder - └─ content.jar file - └─ content folder (most files go here) - └─ locale folder (your locale files go here)</pre> - -<p>In versions of Firefox prior to 4.0 (Gecko 2.0), the XPI would be extracted into a folder in your profile's extensions folder. In current versions it stays unextracted as an XPI. If you were using input streams you already had to deal with this because they weren't an option without extraction. Opting-out to extractionlessness is done via the "unpack" flag in <a href="https://developer.mozilla.org/en-US/Add-ons/Install_Manifests">install.rdf</a>.</p> - -<p>Why the internal JAR? Well, two reasons:</p> - -<ol> - <li>Prior to extractionless add-ons, all of your files got extracted. Putting them in one single JAR file made all your stuff load in one file read, which was faster. Extractionless XPIs are bascially a standardization of this idea.</li> - <li>XPI files are glorified ZIPs, and ZIP compression is horrible. Doing an<em>uncompressed</em> internal JAR (aka, another ZIP) acts like a poor-man's <a href="https://en.wikipedia.org/wiki/Solid_archive">solid archive</a> and significantly boosts the overall compression ratio of the XPI, resulting in smaller installers and updates.</li> -</ol> - -<p>So, it's pretty much internal JAR<em>or</em> extractionless XPI. Well, <strong>you can't use an internal JAR anymore</strong>. Firefox aggressively caches add-on data a bit too much. Your restartless add-on won't actually reload some types of files if they are in a JAR and the add-on is updated without a restart. The big culprits are JSM files and locale files (namely property files), though in some situations this is true for dynamically loaded image files too. You're still going to have to manually clear the chrome cache on add-on shutdown to work around this, but that doesn't seem to be enough with an internal JAR. So, time to switch to extractionless, too. See <a href="https://developer.mozilla.org/en-US/Add-ons/Install_Manifests#unpack">here</a> for the list of stuff you can't have in addition to no resource:// URIs or file:// URIs to files inside your XPI.</p> - -<p>If you actually can't find a way to go fully extractionless, you could hack together some combination of internal JAR(s) and extracted files. It can be done. However, you really should go extractionless. Firefox profiles aren't the pristine environment they're supposed to be. Software that pretends to be designed to protect security or privacy that some users have installed will sometimes delete files. There have been plenty of reports of add-on franken-installs with files of two versions mixed together. This might be due to malware or a bug in Firefox. In any case, I have noticed a significant improvement in reliability by going fully extractionless. Installing and updating a single file is far more idiot-proof.</p> - -<h2 id="Step_6_No_more_XUL_overlays">Step 6: No more XUL overlays</h2> - -<p>Ok, now we're getting into some more drastic changes. You won't be able to use your chrome.manifest to load XUL overlays anymore with a restartless add-on. You could look into <a href="https://developer.mozilla.org/en-US/docs/Web/API/document.loadOverlay">dynamically loading</a> and unloading your overlay, however dynamically manipulating the DOM of your XUL window is usually the more straightforward route.</p> - -<p>Figure out what XUL elements you need to create for your add-on to add your interface, where it needs to go into a XUL window, and how to do it. Docs: <a href="https://developer.mozilla.org/en-US/docs/Web/API/document.getElementById">document.getElementByID()</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/API/document.createElement">document.createElement()</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/API/element">Element reference</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/API/Node">Node reference</a> (DOM elements are also nodes).</p> - -<p>You'll need to write two functions. One to take a XUL window object and then create and add your elements, and then another to find your elements and remove them from the window object. The former will need to be run on add-on startup and the later on add-on shutdown. Until you get your bootstrap.js running you should use a basic overlay onto the XUL window with an event listener for "load" to catch overlay load and then run your manual UI construction function.</p> - -<h3 id="Step_6a._Details_on_adding_elements_dynamically_to_chrome_XUL_window">Step 6a. Details on adding elements dynamically to chrome XUL window</h3> - -<p>There is a way that makes constructing of UI a lot similar to the way it was made with XUL overlay. It involves using <a href="https://github.com/firebug/firebug.sdk/blob/master/lib/core/xul.js">firebug.sdk</a>. The next is example of the code:</p> - -<pre class="brush: js">var overlay = - TOOLBARBUTTON(toolbarButtonAttrs, - PANEL({'id': 'thepanel', 'type': 'arrow'}, - HBOX({'align': 'start'}, - VBOX( - HBOX({'class': 'pixel-hbox'}, - DESCRIPTION({'value': this.stringBundle.GetStringFromName('firexPixel.opacity')}), - HTMLINPUT({'id': 'opacity-range', 'type': 'range', 'min': '0', 'max': '10'}) - ), - HBOX({'id': 'pixel-coords', 'class': 'pixel-hbox'}, - LABEL({'control': 'coord-x', 'value': 'X:'}), - TEXTBOX({'id': 'coord-x', 'class': 'coord-box', 'placeholder' : '0'}), - LABEL({'control': 'coord-y', 'value': 'Y:'}), - TEXTBOX({'id': 'coord-y', 'class': 'coord-box', 'placeholder': '0'}) - ... -</pre> - -<p>That way you build elements hierarchy with not much interaction with DOM, plus you can see tag properties and it children in a nice, structured way, just like in overlay.xul. You can find working example <a href="https://github.com/oshybystyi/FireX-Pixel-Perfect/blob/issue-5-make-addon-restartless/content/ui.jsm#L94">here</a>. It involves using of firebug.sdk xul.js with <a href="https://github.com/oshybystyi/FireX-Pixel-Perfect/blob/issue-5-make-addon-restartless/content/lib/xul.js">few modifications</a>.</p> - -<h2 id="Step_7_Manually_handle_global_CSS_Stylesheets">Step 7: Manually handle global CSS Stylesheets</h2> - -<p>Any Global CSS style sheets which you are using will need to be registered upon load and unregistered when your extension is unloaded. Any CSS files used in any of your own XUL files will function normally without any extra work needed.</p> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/Services.jsm"); -var styleSheets = ["chrome://myExtension/skin/myStyleSheet.css"]; - -function startup(data,reason) -{ -... - // Load stylesheets - let styleSheetService= Components.classes["@mozilla.org/content/style-sheet-service;1"] - .getService(Components.interfaces.nsIStyleSheetService); - for (let i=0,len=styleSheets.length;i<len;i++) { - let styleSheetURI = Services.io.newURI(styleSheets[i], null, null); - styleSheetService.loadAndRegisterSheet(styleSheetURI, styleSheetService.<code>AUTHOR_SHEET</code>); - } -... -} - -function shutdown(data,reason) -{ -... - // Unload stylesheets - let styleSheetService = Components.classes["@mozilla.org/content/style-sheet-service;1"] - .getService(Components.interfaces.nsIStyleSheetService); - for (let i=0,len=styleSheets.length;i<len;i++) { - let styleSheetURI = Services.io.newURI(styleSheets[i], null, null); - if (styleSheetService.sheetRegistered(styleSheetURI, styleSheetService.<code>AUTHOR_SHEET</code>)) { - styleSheetService.unregisterSheet(styleSheetURI, styleSheetService.<code>AUTHOR_SHEET</code>); - } - } -... -</pre> - -<h2 id="Step_8_Window_icons">Step 8: Window icons</h2> - -<p>Firefox does not scan the <code>chrome/icons/default</code> directory of restartless or extrationless extensions for <a href="/en-US/docs/Window_icons">window icons</a>. If you are using custom window icons, they will need to be moved to <code>%MozDir%/icons/default/</code> upon load of your extension. Removal upon unload is not required, but you must be able to handle overwriting them upon load. This is because your <code>unload()</code> will not always be called prior to an upgrade (e.g. upgrade might take place while the application is not running). Further, this is a generic location for icons and the icon may still be in use by a different profile. Thus, you will probably want to use version numbers in the icon name (the ID of the window for which the icon exists).</p> - -<h2 id="Step_9_bootstrap.js">Step 9: bootstrap.js</h2> - -<p>A <a href="/en-US/docs/Extensions/bootstrap.js">bootstrap.js</a> file in the root of your XPI, next to your chrome.manifest and install.rdf, will be the <a href="https://developer.mozilla.org/en-US/Add-ons/Bootstrapped_extensions#Bootstrap_entry_points">heart</a> of your restartless add-on. Think of it as main.c, but for JavaScript based Firefox restartless add-ons. A basic bootstrap.js file:</p> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/Services.jsm"); -function startup(data,reason) { - Components.utils.import("chrome://myAddon/content/myModule.jsm"); - myModule.startup(); // Do whatever initial startup stuff you need to do - - forEachOpenWindow(loadIntoWindow); - Services.wm.addListener(WindowListener); -} -function shutdown(data,reason) { - if (reason == APP_SHUTDOWN) - return; - - forEachOpenWindow(unloadFromWindow); - Services.wm.removeListener(WindowListener); - - myModule.shutdown(); // Do whatever shutdown stuff you need to do on addon disable - - Components.utils.unload("chrome://myAddon/content/myModule.jsm"); // Same URL as above - - // HACK WARNING: The Addon Manager does not properly clear all addon related caches on update; - // in order to fully update images and locales, their caches need clearing here - Services.obs.notifyObservers(null, "chrome-flush-caches", null); -} -function install(data,reason) { } -function uninstall(data,reason) { } -function loadIntoWindow(window) { -/* call/move your UI construction function here */ -} -function unloadFromWindow(window) { -/* call/move your UI tear down function here */ -} -function forEachOpenWindow(todo) // Apply a function to all open browser windows -{ - var windows = Services.wm.getEnumerator("navigator:browser"); - while (windows.hasMoreElements()) - todo(windows.getNext().QueryInterface(Components.interfaces.nsIDOMWindow)); -} -var WindowListener = -{ - onOpenWindow: function(xulWindow) - { - var window = xulWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor) - .getInterface(Components.interfaces.nsIDOMWindow); - function onWindowLoad() - { - window.removeEventListener("load",onWindowLoad); - if (window.document.documentElement.getAttribute("windowtype") == "navigator:browser") - loadIntoWindow(window); - } - window.addEventListener("load",onWindowLoad); - }, - onCloseWindow: function(xulWindow) { }, - onWindowTitleChange: function(xulWindow, newTitle) { } -}; -</pre> - -<p>As mentioned above, <a href="https://developer.mozilla.org/en-US/docs/Components.utils.unload">Components.utils.unload()</a> will not work properly if the JSM file it is unloading is in a JAR. Also make sure to only unload your own JSM files to avoid accidentally breaking things horribly.</p> - -<p>For tearing down and cleaning up on a per-window basis, there is another route you can take. Instead of directly calling your tear down function, make your <code>unloadFromWindow()</code> something like this:</p> - -<pre class="brush: js">function unloadFromWindow(window) -{ - var event = window.document.createEvent("Event"); - event.initEvent("myAddonName-unload",false,false); - window.dispatchEvent(event); -} -</pre> - -<p>In each window you can then register on startup to listen for your custom "myAddonName-unload" event and just tear down and clean up when that event or a regular "unload" event comes in.</p> - -<h2 id="Step_10_Bypass_cache_when_loading_properties_files">Step 10: Bypass cache when loading properties files</h2> - -<p>The above will get you a working add-on that will install without a Firefox restart. It will even get you a working add-on that will update without a Firefox restart... usually. Some parts work only if you don't look too closely; localization is one of them. As mentioned in the previous section, you'll need to clear the chrome caches on add-on shutdown, namely for chrome images and properties files. Doing this will get an update's new properties file to load, however sometimes this will instead produce an error on the next property access. It just doesn't seem that it can reliably clear the cache correctly, for whatever reason. String changes seem to be fine, however the addition or removal of strings can<em>sometimes</em> produce this error. It's not reliably reproducible, but it does happen.<em>Yes, this is a pain in the ass.</em></p> - -<p>The suggestion that seems to work is to use a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=719376#c0">hack</a> to bypass the string bundle cache. You should still be caching a reference to your string bundle on add-on startup, preferably using <a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm#defineLazyGetter%28%29">XPCOMUtils.jsm</a> to lazily load the file. For example:</p> - -<pre class="brush: js">Components.utils.import("resource://gre/modules/Services.jsm"); -Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); -XPCOMUtils.defineLazyGetter(this, "strings", function() { - return loadPropertiesFile("chrome://myAddon/locale/mystrings.properties"); -}); -function loadPropertiesFile(path) -{ - /* HACK: The string bundle cache is cleared on addon shutdown, however it doesn't appear to do so reliably. - Errors can erratically happen on next load of the same file in certain instances. (at minimum, when strings are added/removed) - The apparently accepted solution to reliably load new versions is to always create bundles with a unique URL so as to bypass the cache. - This is accomplished by passing a random number in a parameter after a '?'. (this random ID is otherwise ignored) - The loaded string bundle is still cached on startup and should still be cleared out of the cache on addon shutdown. - This just bypasses the built-in cache for repeated loads of the same path so that a newly installed update loads cleanly. */ - return Services.strings.createBundle(path + "?" + Math.random()); -} -</pre> - -<p>Just do <code>strings.GetStringFromName(stringID)</code> as you normally would. The <a href="https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm#defineLazyGetter%28%29">lazy getter magic</a> will cause the file to be automatically loaded the first time it is needed, after which point a reference to the loaded string bundle will be stored in "strings" for future accesses. You still need to clear the cache on add-on shutdown, however it will now also load cleanly on add-on updates. The old file <em>should</em> still be cleared.</p> - -<h2 id="Put_it_all_together">Put it all together</h2> - -<p>That should be all the pieces. Your chrome.manifest will have just chrome and locale (and possibly skin) mappings in it now. No resource mappings or chrome overlays. The new entry point for your add-on is via <code>bootstrap.js:startup()</code> rather than a "load" handler in a XUL overlay.</p> - -<p>Your localization handling should be unaffected by your transition to a restartless/extractionless add-on so long as you properly clear the chrome cache on add-on shutdown and load your properties files using the method listed above. Your property files and DTD files loaded from chrome:// URIs should work just as before. This is all assuming a minimum version of Firefox 17+ (or other Gecko 17+ application) which you should remember to state explicitly in your install.rdf.</p> - -<p><strong>Just remember that whatever you start you also need to have the ability to undo. In order for your add-on to reliably update without a restart it needs to be able to shutdown/disable cleanly.</strong></p> - -<p>Also note that once you do get this all up and running, your users will still have to restart Firefox once to install your first restartless update. While your new add-on may not need a restart to install, if you're updating from an old version that is not restartless then it will need a restart to<em>uninstall</em> that first.</p> - -<div class="note"> -<p>This tutorial was originally written by Dave Garrett from his experience <a href="https://flagfox.wordpress.com/2014/01/19/writing-restartless-addons/">porting the Flagfox extension</a>.</p> -</div> - -<h2 id="Further_reading">Further reading</h2> - -<ul> - <li>Author <a href="https://flagfox.wordpress.com/2014/01/19/writing-restartless-addons/">original article.</a></li> - <li>Another real-world example of porting overlay-based extension into restartless (<a href="https://github.com/oshybystyi/FireX-Pixel-Perfect/compare/v1.4...oshybystyi:issue-5-make-addon-restartless">git diff</a>).</li> - <li>Another <a href="https://github.com/firebug/pixel-perfect/blob/master/lib/pixel-perfect-popup.js#L197">example</a> of using firebug.sdk xul.js to construct ui.</li> -</ul> diff --git a/files/ru/mozilla/add-ons/overlay_extensions/index.html b/files/ru/mozilla/add-ons/overlay_extensions/index.html deleted file mode 100644 index ceac592b8d..0000000000 --- a/files/ru/mozilla/add-ons/overlay_extensions/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Overlay extensions -slug: Mozilla/Add-ons/Overlay_Extensions -tags: - - Add-ons - - Extensions - - Landing - - NeedsTranslation - - TopicStub -translation_of: Archive/Add-ons/Overlay_Extensions ---- -<p>Эта страница содержит ссылки на документы с описанием подхода к разработке расширений для приложений, работающих на движке Gecko, которые используют:</p> - -<ul> - <li>описание интерфейса на основе "XUL overlays"</li> - <li>API-интерфейсы, доступные <a href="/ru/docs/Словарь/privileged_code">привилегированному коду</a>, например модулям <a href="/en-US/docs/XUL/tabbrowser"><code>tabbrowser</code></a> и <a href="/en-US/docs/Mozilla/JavaScript_code_modules">JavaScript</a> для взаимодействия с приложениями и контентом.</li> -</ul> - -<p>До релиза Firefox 4 и до движка Gecko 2.0 это был единственный способ разработки расширений. Эта методология разработки была заменена на следующие две:<a href="/ru/Add-ons/загрузочные_расширения"> расширения, не требующие перезапуска</a>, и расширения на основе <a href="/ru/Add-ons/SDK">Add-on SDK</a>. Они обе построены поверх первой. <a href="/ru/docs/Словарь/privileged_code">Привилегированные интерфейсы</a> JavaScript API, описанные здесь могут быть также использованы в новых техниках разработки дополнений.</p> - -<h2 id="Школа_XUL">Школа XUL</h2> - -<p><a href="/ru/docs/XUL_School">Школа XUL</a> - это комплексный учебник по разработке дополнений, сфокусированный на разработке расширений для Firefox, но также подходящий для других приложений, основанных на движке Gecko.</p> - -<h2 id="Ресурсы">Ресурсы</h2> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Mozilla/Add-ons/Setting_up_extension_development_environment">Настройка среды</a></dt> - <dd>Настройка приложений для разработки расширений.</dd> - <dt><a href="/ru/docs/XUL">XUL</a></dt> - <dd>Учебники и справочники по языку программирования, используемому XUL-расширениями.</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Code_snippets">Примеры кода</a></dt> - <dd>Примеры кода, которые пригодятся.</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Installing_extensions">Установка расширений</a></dt> - <dd>Как установить расширение копированием файлов в установочный каталог.</dd> - <dt><a href="/en-US/Add-ons/Overlay_extensions/Firefox_addons_developer_guide">Руководство разработчика дополнений для Firefox</a></dt> - <dd>Руководство по разработка расширений.</dd> - <dt><a href="/en-US/docs/Mozilla/JavaScript_code_modules">JavaScript-модули, доступные разработчику</a></dt> - <dd>JavaScript-модули доступные разработчику расширений.</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Inline_Options">Настройка расширения</a></dt> -</dl> -</div> - -<div class="column-half"> -<dl> - <dd>Как добавить свойства расширения, которые появятся в менеджере дополнений (Add-ons Manager).</dd> - <dt><a href="/ru/docs/FAQ_по_расширениям">FAQ</a></dt> - <dd>Решение некоторых общих проблем.</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Extension_Packaging">Сборка и установка расширения</a></dt> - <dd>Сборка и установка.</dd> - <dt><a href="/en-US/Mozilla/Add-ons/Creating_Custom_Firefox_Extensions_with_the_Mozilla_Build_System">Создание бинарных расширений для Firefox</a></dt> - <dd>Создание бинарных расширений.</dd> - <dt><a href="/ru/docs/Building_an_Extension">Создание расширения</a></dt> - <dd>Ещё один небольшой самоучитель по созданию расширения (только на русском языке)</dd> - <dt><a href="/ru/docs/Динамически_изменяемый_пользовательский_интерфейс_на_XUL">Динамически изменяемый пользовательский интерфейс на XUL</a></dt> - <dd>В этой статье обсуждается управление <a href="https://developer.mozilla.org/ru/XUL" title="ru/XUL">XUL</a> интерфейсами с использованием <a href="https://developer.mozilla.org/ru/DOM" title="ru/DOM">DOM</a> и других API.</dd> - <dt><a href="/ru/docs/Настройка_среды_разработки_расширений">Настройка среды разработки расширений</a></dt> - <dd>В этой статье приводится несколько советов о том, как настроить ваше приложение Mozilla для удобной работы над расширениями.</dd> - <dt><a href="/ru/docs/Руководство_по_XUL">Руководство по XUL</a></dt> - <dd>Руководство по XUL</dd> -</dl> -</div> -</div> diff --git a/files/ru/mozilla/add-ons/sdk/guides/index.html b/files/ru/mozilla/add-ons/sdk/guides/index.html deleted file mode 100644 index 1eacaad55a..0000000000 --- a/files/ru/mozilla/add-ons/sdk/guides/index.html +++ /dev/null @@ -1,365 +0,0 @@ ---- -title: Guides -slug: Mozilla/Add-ons/SDK/Guides -tags: - - Add-on SDK -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/ru/mozilla/add-ons/sdk/guides/скрипты_содержимого/index.html b/files/ru/mozilla/add-ons/sdk/guides/скрипты_содержимого/index.html deleted file mode 100644 index 59832331e8..0000000000 --- a/files/ru/mozilla/add-ons/sdk/guides/скрипты_содержимого/index.html +++ /dev/null @@ -1,519 +0,0 @@ ---- -title: Скрипты Content Scripts -slug: Mozilla/Add-ons/SDK/Guides/Скрипты_содержимого -tags: - - Content script - - Дополнение -translation_of: Archive/Add-ons/Add-on_SDK/Guides/Content_Scripts ---- -<article id="wikiArticle"> -<p>{{AddonSidebar}}</p> - -<div class="blockIndicator 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> -</div> - -<p>{{LegacyAddonsNotice}}</p> - -<p>Многим дополнениям (add-on) необходим доступ к веб-страницам и возможность их изменения. Но основной код дополнения не имеет прямого доступа к веб-содержимому. Взамен, SDK-дополнений необходим способ в коде, который даст доступ к веб-содержимому в отдельных скриптах, которые называются <code>content scripts</code> (скрипты содержимого). Эта страница описывает как разрабатывать и реализовывать <code>content scripts</code>.</p> - -<p>Скрипты <code>content scripts</code>, вероятно, один из наиболее сбивающих с толку аспектов при работе с SDK, но вам они скорее всего будут нужны. Существуют пять основных принципов:</p> - -<ul> - <li>расширения основного кода, включая "main.js" и другие модули в "lib", могут использовать SDK <a href="/en-US/Add-ons/SDK/High-Level_APIs">верхнего-уровня</a> и <a href="/en-US/Add-ons/SDK/Low-Level_APIs">нижнего-уровня</a> API, но не имеют доступа к веб-содержимому напрямую;</li> - <li>скрипты <code>content scripts </code><a href="/en-US/Add-ons/SDK/Guides/Two_Types_of_Scripts#API_Access_for_Add-on_Code_and_Content_Scripts">не могут использовать API в SDK</a> (нет доступа к глобальным <code>exports</code>, <code>require</code>) но есть доступ к веб-содержимому;</li> - <li>API в SDK которые используют <code>content scripts</code>, например <a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod">page-mod</a> и <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs">tabs</a>, предоставляют функции, которые позволяют коду расширения загружать скрипты содержимого в веб-страницы;</li> - <li>скрипты <code>content scripts </code>могут быть загружены как строки, но чаще они хранятся как отдельные файлы в папке "data". jpm не создаёт каталог "data" по умолчанию, поэтому вы должны создать его и положить туда ваши скрипты;</li> - <li>API передачи сообщений позволяет основному коду и скриптам <code>content scripts </code>взаимодействовать друг с другом.</li> -</ul> - -<p>Следующее дополнение (полностью завершённое) показывает эти принципы. "main.js" прикрепляет <code>content scripts</code> к текущей вкладке, используя модуль <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs">tabs</a>. В этом случае, <code>content scripts</code> передаётся, как строка. Скрипт <code>content scripts</code> просто заменяет содержимое страницы:</p> - -<pre class="brush: js">// main.js -var tabs = require("sdk/tabs"); -var contentScriptString = 'document.body.innerHTML = "<h1>this page has been eaten</h1>";' - -tabs.activeTab.attach({ - contentScript: contentScriptString -});</pre> - -<p>Следующие высокоуровневые SDK-модули, могут использовать скрипты <code>content scripts </code>для изменения веб-страниц:</p> - -<ul> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod">page-mod</a>: позволяет вам прикреплять <code>content scripts</code> к веб-страницам, которые соответствуют заданному URL шаблону.</li> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs">tabs</a>: экспортирует объект <code>Tab</code> для работы с вкладкой браузера. <code>Tab-объект включает</code> функцию <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#attach(options)"><code>attach()</code></a>, которая позволяет прикрепить <code>content scripts</code> ко вкладке.</li> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/page-worker">page-worker</a>: позволяет вам получить страницу, без отображения её. Вы можете прикрепить <code>content scripts</code> к странице, чтобы иметь доступ и возможность изменять DOM страницы.</li> - <li><a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu">context-menu</a>: использует <code>content scripts</code> для взаимодействия со страницей, в которой вызывается меню.</li> -</ul> - -<p>В дополнение к этому, некоторые SDK компоненты пользовательского интерфейса - <code>panel, sidebar, frame</code> - заданы в помощью HTML, и необходимо использовать отдельные скрипты для взаимодействия с их контентом. В большинстве случаев они похожи на скрипты <code>content scripts</code>, но в данной статье они не описываются. Для изучения способов взаимодействия с данными модулями пользовательского интерфейса обратитесь к документации: <a href="/en-US/Add-ons/SDK/High-Level_APIs/panel">panel</a>, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_sidebar">sidebar</a>, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_frame">frame</a>.</p> - -<p>Почти все примеры дополнений, представленных в этом руководстве, доступны в полнофункциональном, но минимально необходимом, виде. На GitHub: <a href="https://github.com/mdn/addon-sdk-content-scripts">addon-sdk-content-scripts repository</a>.</p> - -<h2 id="Загрузка_content_scripts">Загрузка content scripts</h2> - -<article id="wikiArticle"> -<p>Вы можете загрузить одиночный скрипт посредством задания строкового атрибута <code>contentScript</code> или <code>contentScriptFile.</code> Атрибут<code> contentScript</code> определяет строковое значение как сам скрипт:</p> - -<pre class="brush: js">// main.js - -var pageMod = require("sdk/page-mod"); -var contentScriptValue = 'document.body.innerHTML = ' + - ' "<h1>Page matches ruleset</h1>";'; - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScript: contentScriptValue -});</pre> - -<p>Атрибут <code>contentScriptFile</code> определяет строковое значение как путь к ресурсу<code>://<em>URL-путь к скрипту, который находится в подкаталоге вашего дополнения</em>.</code> jpm не создаёт папку "data" по умолчанию, поэтому вы должны добавить её и положить внутрь файл <code>content scripts</code>.</p> - -<p>Следующее дополнение использует URL для ссылки на файл "content-script.js", находящийся в папке <code>data </code>в корне дополнения.</p> - -<pre class="brush: js">// main.js - -var data = require("sdk/self").data; -var pageMod = require("sdk/page-mod"); - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScriptFile: data.url("content-script.js") -});</pre> - -<pre class="brush: js">// content-script.js - -document.body.innerHTML = "<h1>Page matches ruleset</h1>";</pre> - -<div class="note"> -<p>Начиная с Firefox 34 и далее , вы можете использовать "./content-script.js" как синоним для self.data.url("content-script.js"). Поэтому можно переписать код main.js, указанный выше, следующим образом:</p> - -<pre class="brush: js">var pageMod = require("sdk/page-mod"); - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScriptFile: "./content-script.js" -}); -</pre> -</div> - -<div class="warning"> -<p>Настоятельно рекоммендуется использовать <code>contentScript </code>только для очень простых скриптов или статичных строк: если это не так, то могут возникнуть проблемы с принятием Вашего дополнения на AMO (<span class="st">addons.<em>mozilla</em>.org</span>).</p> - -<p>Содержите ваши скрипты в отдельном файле и загружайте их, используя <code>contentScriptFile</code>. Это сделает ваш код проще в поддержке, отладке, безопаснее, удобочитаемее.</p> -</div> - -<p>Для любого из параметров<code> contentScript</code> или <code>contentScriptFile</code> вы можете загружать несколько скриптов, передавая массив строк:</p> - -<pre class="brush: js">// main.js - -var tabs = require("sdk/tabs"); - -tabs.on('ready', function(tab) { - tab.attach({ - contentScript: ['document.body.style.border = "5px solid red";', 'window.alert("hi");'] - }); -}); -</pre> - -<pre class="brush: js">// main.js - -var data = require("sdk/self").data; -var pageMod = require("sdk/page-mod"); - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScriptFile: [data.url("jquery.min.js"), data.url("my-content-script.js")] -});</pre> - -<p>Если так сделать, то скрипты смогут взаимодействовать друг с другом, как скрипты загружаемые на одной web-странице.</p> - -<p>Можно использовать параметры <code>contentScript</code> and <code>contentScriptFile </code>одновременно. В таком случае скрипты, загружаемые <code>contentScriptFile</code> загрузятся до <code>contentScript. </code>Это похволяет загружать библиотеки JavaScript, такие как jQuery по URL, а затем использвать их в простом скрипте, загруженном через <code>contentScript</code>:</p> - -<pre class="brush: js">// main.js - -var data = require("sdk/self").data; -var pageMod = require("sdk/page-mod"); - -var contentScriptString = '$("body").html("<h1>Page matches ruleset</h1>");'; - -pageMod.PageMod({ - include: "*.mozilla.org", - contentScript: contentScriptString, - contentScriptFile: data.url("jquery.js") -});</pre> - -<div class="warning"> -<p>Настоятельно рекоммендуется использовать <code>contentScript </code>только для очень простых скриптов или статичных строк: если это не так, то могут возникнуть проблемы с принятием Вашего дополнения на AMO (<span class="st">addons.<em>mozilla</em>.org</span>).</p> - -<p>Содержите ваши скрипты в отдельном файле и загружайте их, используя <code>contentScriptFile</code>. Это сделает ваш код проще в поддержке, отладке, безопаснее, удобочитаемее.</p> -</div> - -<h3 id="Определение_момента_(времени)_подключения_скрипта">Определение момента (времени) подключения скрипта</h3> - -<p>Опция <code>contentScriptWhen </code>определяет момент, когда <code>content script</code> должен быть загружен. Возможные варианты:</p> - -<ul> - <li><code>"start"</code>: загрузить сразу после того, как элемент документа страницы вставляется в DOM. В таком случае DOM-контент ещё пока не загружен, поэтому скрипт не может работать с ним.</li> - <li><code>"ready"</code>: загрузить скрипт после того, как DOM страницы загружен: то есть в точке активации событий <a href="https://developer.mozilla.org/en/Gecko-Specific_DOM_Events">DOMContentLoaded</a>. В этот момент content scripts уже могут взаимодействовать с DOM-контентом, но загрузка внешних CSS и картинок ещё могла не завершиться.</li> - <li><code>"end"</code>: загрузить скрипт после завершения загрузки всего контента (DOM, JS, CSS, картинки), в то время, как активируется событие <a href="https://developer.mozilla.org/en/DOM/window.onload">window.onload event</a>.</li> -</ul> - -<p>Значение по умолчанию <code>"<strong>end</strong>"</code>.</p> - -<p>Обратите внимание, что <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#attach(options)"><code>tab.attach()</code></a> не имеет параметра <code>contentScriptWhen</code>, потому что он обычно вызывается после загрузки страницы.<a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs#attach(options)"><code> </code></a></p> - -<h3 id="Передача_конфигурационных_опций">Передача конфигурационных опций</h3> - -<p><code>Атрибут contentScriptOptions</code> это JSON-объект, который используется скриптом как read-only значение доступное через свойство <code><a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/self">self</a>.options</code>:</p> - -<pre class="brush: js">// main.js - -var tabs = require("sdk/tabs"); - -tabs.on('ready', function(tab) { - tab.attach({ - contentScript: 'window.alert(self.options.message);', - contentScriptOptions: {"message" : "hello world"} - }); -});</pre> - -<p>Могут быть использованы любые варианты JSON-объектов (object, array, string, etc.).</p> - -<h2 id="Доступ_к_DOM">Доступ к DOM</h2> - -<p>Скрипты <code>content scripts</code> могут иметь доступ к DOM страницы, конечно, только те скрипты, которые уже загрузились на странице. При этом скрипты content scripts изолированы от скриптов web-страницы:</p> - -<ul> - <li>content scripts не видят объектов JavaScript, добавленных скриптами web-страницы.</li> - <li>Если скриты web-страницы переопределят поведения каких-либо DOM-объектов, то скрипты <code>content script</code> обнаружат исходное поведение.</li> -</ul> - -<p>То же происходит в обратную сторону: скрипты web-страницы не увидят объектов JavaScript, добавленных скриптами <code>content scripts</code>.</p> - -<p>Например, рассмотрим страницу, где скрипты web-страницы создают переменную <code>foo </code>в объекте <code>window</code>:</p> - -<pre class="brush: html"><!DOCTYPE html"> -<html> - <head> - <script> - window.foo = "hello from page script" - </script> - </head> -</html></pre> - -<p>Другой скрипт (но тоже page-script), загруженный на страницу после этого скрипта (указанного выше), будет иметь доступ к foo. Но скрипт <code>content script</code> нет:</p> - -<pre class="brush: js">// main.js - -var tabs = require("sdk/tabs"); -var mod = require("sdk/page-mod"); -var self = require("sdk/self"); - -var pageUrl = self.data.url("page.html") - -var pageMod = mod.PageMod({ - include: pageUrl, - contentScript: "console.log(window.foo);" -}) - -tabs.open(pageUrl);</pre> - -<pre>console.log: my-addon: null -</pre> - -<p>Есть веские причины для изоляции. Во-первых, из <code>content script</code> не утекают объекты в web-страницу, что потенциально является дырой в безопасности. Во-вторых, <code>content scripts</code> могут не беспокоиться о пересечении объектов с объектами, созданных скриптами web-страницы.</p> - -<p>Такая изоляция необходима, например, в случае, если web-страница загружает библиотеку jQuery, но <code>content script</code> не увидит объектов, созданных этой библиотекой. В этом случае content script может добавить свою собственный jQuery-объект, который не пересечётся со страничным объектом.</p> - -<h3 id="Взаимодействие_со_скриптами_web-страницы">Взаимодействие со скриптами web-страницы</h3> - -<p>Обычно изоляция content scripts и page scripts (скрипты web-страницы) необходима. Но иногда вы захотите наладить такое взаимодействие: вы можете захотеть иметь общие объекты между <code>content scripts</code> и <code>page scripts</code> или передевать между ними сообщения. Если появится такая необходимость, то прочтите о <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/Interacting_with_page_scripts">взаимодействии со скриптами web-страницы</a> (<a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/Interacting_with_page_scripts">interacting with page scripts</a>).</p> - -<h3 id="Прослушивание_событий">Прослушивание событий</h3> - -<p>Вы можете прослушивать события DOM в скриптах <code>content scripts</code> также, как в обычных скриптах web-страницы. Но есть два важных отличия:</p> - -<p>Первое. Если вы определите слушатель через передачу строки в функцию<a href="https://developer.mozilla.org/en/DOM/element.setAttribute"><code> setAttribute()</code></a>, то слушатель будет вызываться в контексте web-страницы, поэтому он не будет иметь доступа ни к каким переменным, определённым в <code>content script</code>.</p> - -<p>Например, при выполнении в данном <code>content script</code> появится ошибка "theMessage is not defined":</p> - -<pre class="brush: js">var theMessage = "Hello from content script!"; -anElement.setAttribute("onclick", "alert(theMessage);");</pre> - -<p>Второе. Если вы определите слушатель напрямую через <a href="/en-US/docs/Web/API/GlobalEventHandlers">GlobalEventHandlers</a>, например на <code>onclick</code>, то такое определение может быть переопределено на web-странице. Например, здесь представлен add-on, который пытается добавить обработчик click-события при помощи присвоения <code>window.onclick</code>:</p> - -<pre class="brush: js">var myScript = "window.onclick = function() {" + - " console.log('unsafewindow.onclick: ' + window.document.title);" + - "}"; - -require("sdk/page-mod").PageMod({ - include: "*", - contentScript: myScript, - contentScriptWhen: "start" -});</pre> - -<p>Это всё будет прекрасно работать на многих страницах, но не сработает там, где также присваивается <code>onclick</code>:</p> - -<pre class="brush: html"><html> - <head> - </head> - <body> - <script> - window.onclick = function() { - window.alert("it's my click now!"); - } - </script> - </body> -</html></pre> - -<p>По этим причинам, лучший вариант для добавления слушалелей это использование <a href="https://developer.mozilla.org/en/DOM/element.addEventListener"><code>addEventListener()</code></a>, определяющем функцию:</p> - -<pre class="brush: js">var theMessage = "Hello from content script!"; - -anElement.onclick = function() { - alert(theMessage); -}; - -anotherElement.addEventListener("click", function() { - alert(theMessage); -});</pre> - -<h2 id="Взаимодействие_с_скриптом_дополнения_(add-on)">Взаимодействие с скриптом дополнения (add-on)</h2> - -<p>Для организации взаимодействия друг с другом скрипта дополнения (<code>add-on script</code>) и скрипта <code>content script</code> нужно обоим дать доступ к объекту <code>port</code>.</p> - -<ul> - <li>для отправки сообщений используется <code>port.emit()</code></li> - <li>для получения сообщений - <code>port.on()</code></li> -</ul> - -<p><img alt="" src="https://mdn.mozillademos.org/files/7873/content-scripting-overview.png" style="display: block; margin-left: auto; margin-right: auto;">Сообщения асинхронны: то есть, отправитель не ждёт ответа от получателя, а только отправляет сообщение и продолжает работать дальше.</p> - -<p>Вот пример простого дополнения, которое отправляет сообщение скрипту <code>content script, используя port</code>:</p> - -<pre class="brush: js">// main.js - -var tabs = require("sdk/tabs"); -var self = require("sdk/self"); - -tabs.on("ready", function(tab) { - var worker = tab.attach({ - contentScriptFile: self.data.url("content-script.js") - }); - worker.port.emit("alert", "Message from the add-on"); -}); - -tabs.open("http://www.mozilla.org");</pre> - -<pre class="brush: js">// content-script.js - -self.port.on("alert", function(message) { - window.alert(message); -});</pre> - -<div class="note"> -<p>Модуль <code>context-menu</code> не использует данную модель коммуникации. Для изучения варианта взаимодействия скриптов <code>content scripts</code>, загруженных с использованием <code>context-menu</code>, смотрите <a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu">context-menu documentation</a>. </p> -</div> - -<h3 id="Доступ_к_порту_в_content_script">Доступ к порту в content script</h3> - -<p>В скрипте <code>content script</code> объект <code>port </code>доступен через свойство глобального объекта <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/self"><code>self</code></a>. Чтобы послать сообщение из <code>content script</code>:</p> - -<pre class="brush: js">self.port.emit("myContentScriptMessage", myContentScriptMessagePayload);</pre> - -<p>Чтобы получить сообщение из кода дополнения:</p> - -<pre class="brush: js">self.port.on("myAddonMessage", function(myAddonMessagePayload) { - // Handle the message -});</pre> - -<div class="note"> -<p><span>Учтите, что глобальный объект <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/self"><code>self</code></a> совершенно отличается от модуля <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/self"><code>self</code> module</a>, предоставляющим API дополнению для доступа к его файлам и ID.</span></p> -</div> - -<h3 id="Доступ_к_порту_в_скрипте_дополнения_(add-on_script)">Доступ к порту в скрипте дополнения (add-on script)</h3> - -<p>В коде дополнения канал взаимодействия между дополнением и конкретным <code>content script</code> инкапсулируется посредством объекта <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/content_worker"><code>worker</code></a>. Поэтому объект <code>port </code>для для связи со скриптом content script это свойство связанного worker.</p> - -<p>Тем не менее, объект worker не расширен на код дополнения так же, как в других модулях.</p> - -<h4 id="Сообщения_из_page-worker">Сообщения из<code> page-worker</code></h4> - -<p>Объект <code>page-worker</code> интегрирует в себе <code>worker API</code>. Поэтому для получения сообщений от скрипта content script, ассоциированного с <code>page-worker нужно использовать </code><code>pageWorker.port.on()</code>:</p> - -<pre class="brush: js">// main.js - -var self = require("sdk/self"); - -var pageWorker = require("sdk/page-worker").Page({ - contentScriptFile: self.data.url("content-script.js"), - contentURL: "http://en.wikipedia.org/wiki/Internet" -}); - -pageWorker.port.on("first-para", function(firstPara) { - console.log(firstPara); -});</pre> - -<p>Для отправки пользовательских сообщений их дополнения нужно вызвать <code>pageWorker.port.emit()</code>:</p> - -<pre class="brush: js">// main.js - -var self = require("sdk/self"); - -var pageWorker = require("sdk/page-worker").Page({ - contentScriptFile: self.data.url("content-script.js"), - contentURL: "http://en.wikipedia.org/wiki/Internet" -}); - -pageWorker.port.on("first-para", function(firstPara) { - console.log(firstPara); -}); - -pageWorker.port.emit("get-first-para");</pre> - -<pre class="brush: js">// content-script.js - -self.port.on("get-first-para", getFirstPara); - -function getFirstPara() { - var paras = document.getElementsByTagName("p"); - if (paras.length > 0) { - var firstPara = paras[0].textContent; - self.port.emit("first-para", firstPara); - } -}</pre> - -<h4 id="Сообщения_из_page-mod">Сообщения из <code>page-mod</code></h4> - -<p>Один объект <code>page-mod</code> может привязать свои скрипты к нескольким страницам, каждая из них со своим контекстом, в котором запускаются <code>content scripts</code>. Поэтому для каждой страницы необходим отдельный канал (<code>worker</code>) связи.</p> - -<p><code>page-mod</code> не интегрирует в себе <code>worker API напрямую</code>. Вместо этого, когда скрипт <code>content script</code> привязывается к странице, <code>page-mod</code> бросает событие <code>attach</code> тому слушателю, который связан с worker. Создавая слушатель для события <code>attach</code>, вы можете получить доступ через объект <code>port </code>к тому скрипту <code>content scripts</code>, который связан с нужной страницей (через <code>page-mod)</code>:</p> - -<pre class="brush: js">// main.js - -var pageMods = require("sdk/page-mod"); -var self = require("sdk/self"); - -var pageMod = pageMods.PageMod({ - include: ['*'], - contentScriptFile: self.data.url("content-script.js"), - onAttach: startListening -}); - -function startListening(worker) { - worker.port.on('click', function(html) { - worker.port.emit('warning', 'Do not click this again'); - }); -}</pre> - -<pre class="brush: js">// content-script.js - -window.addEventListener('click', function(event) { - self.port.emit('click', event.target.toString()); - event.stopPropagation(); - event.preventDefault(); -}, false); - -self.port.on('warning', function(message) { - window.alert(message); -}); -</pre> - -<p>В дополнении, описанном выше, есть два сообщения:</p> - -<ul> - <li><code>click</code> отправляется из <code>page-mod</code> в дополнение, когда пользователь кликает на элемент на web-странице</li> - <li><code>warning</code> отправляет прикольную строчку обратно в объект <code>page-mod</code></li> -</ul> - -<h4 id="Сообщения_из_Tab.attach()">Сообщения из <code>Tab.attach()</code></h4> - -<p>Функция <code>Tab.attach()</code> возвращает <code>worker</code>, который можно использовать для связи со скриптом content script(s).</p> - -<p>Следующее дополнение добавляет кнопку в Firefox: когда пользователь надимает её, то дополнение привязывает скрипт <code>content script</code> к активной вкладке, отправляет этому скрипту сообщение "my-addon-message" и ждёт ответ "my-script-response":</p> - -<pre class="brush: js">//main.js - -var tabs = require("sdk/tabs"); -var buttons = require("sdk/ui/button/action"); -var self = require("sdk/self"); - -buttons.ActionButton({ - id: "attach-script", - label: "Attach the script", - icon: "./icon-16.png", - onClick: attachScript -}); - -function attachScript() { - var worker = tabs.activeTab.attach({ - contentScriptFile: self.data.url("content-script.js") - }); - worker.port.on("my-script-response", function(response) { - console.log(response); - }); - worker.port.emit("my-addon-message", "Message from the add-on"); -} -</pre> - -<pre class="brush: js">// content-script.js - -self.port.on("my-addon-message", handleMessage); - -function handleMessage(message) { - alert(message); - self.port.emit("my-script-response", "Response from content script"); -}</pre> - -<h3 id="Описание_port_API">Описание port API</h3> - -<p>Смотрите <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/port">reference page for the <code>port</code> object</a>.</p> -</article> - -<h3 id="Описание_postMessage_API">Описание postMessage API</h3> - -<p>До того, как был введён объект port, дополнения и <code>content scripts </code>общались следующим образом, используя различные API:</p> - -<ul> - <li>скрипт content script <code>вызывал self.postMessage()</code> для отправки и <code>self.on()</code> для получения</li> - <li>дополнение (add-on) вызывал <code>worker.postMessage()</code> для отправки и <code>worker.on()</code> для получения</li> -</ul> - -<p>Данный API до сих пор доступно и <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/using_postMessage">документировано</a>, но желательно использовать <code>port API</code>, описанный здесь выше. Исключением является модуль <a href="/en-US/Add-ons/SDK/High-Level_APIs/context-menu">context-menu</a>, который ещё использует <code>postMessage</code>.</p> - -<h3 id="Взаимодействие_скриптов_content_script_со_скриптами_content_script">Взаимодействие скриптов content script со скриптами content script</h3> - -<p>Скрипты <code>content scripts</code> могут взаимодействовать друг с другом напрямую если они загружены в одном контексте. Например, если один вызов <code>Tab.attach()</code> привязывает два скрипта <code>content scripts</code>, то они видят друг друга напрямую, как если два скрипта загружены на одну страницу. Но если вызвать <code>Tab.attach()</code> дважды, привязывая <code>content scripts</code> каждый раз, то они уже не будут загружены в одном контексте, и дожны взаимодействовать способами как скрипты из разных контекстов. Один из вариантом это пересылать сообщения через основной код дополнения, используя port API с передачей сообщения другим скриптам <code>context script</code>. Этои вариант будет работать независимо от контекста, в котором загружен скрипт <code>content script</code>.</p> - -<p>В отдельном случае, когда два скрипта загружены на одной странице, существует возможность для обоих скриптов <code>content scripts</code> взаимодействовать друг с другом, используя<a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/Communicating_With_Other_Scripts#Using_the_DOM_postMessage_API"> DOM postMessage() API</a> или <a href="https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent">CustomEvent</a>. Следующее дополнение показывает как скрипт <code>content script</code>, добавленный через <code>page-mod</code>, получает событие CustomEvent, отправленное из <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/SDK/High-Level_APIs/context-menu">context-menu</a>, когда элемент меню был кликнут. Скрипт <code>page-mod</code> будет отображать алерт с URL той ссылки, по которой было отображено контекстное меню. URL передан в скрипт <code>page-mod</code> с использованием CustomEvent.</p> - -<pre><code>var pageMod = require("sdk/page-mod"); -pageMod.PageMod({ - include: "*.mozilla.org", - contentScript: 'function contextMenuAlert(href) {' - + ' window.alert("The context menu was clicked on URL:\\n" + href);' - + '};' - + 'window.addEventListener("myAddonId-contextMenu-clicked",' - + ' function(event){contextMenuAlert(event.detail);});' -}); - -let cm = require("sdk/context-menu"); -cm.Item({ - label: "Alert URL", - context: [ - cm.URLContext(["*.mozilla.org"]), - cm.SelectorContext("a[href]") - ], - contentScript: 'self.on("click", function (node, data) {' - + ' var event = new CustomEvent("myAddonId-contextMenu-clicked",' - + ' {detail:node.href});' - + ' window.dispatchEvent(event);' - + '});' -});</code></pre> - -<h2 id="Междоменные_скрипты_content_script">Междоменные скрипты <code>content script</code></h2> - -<p>По умолчанию скрипты <code>content script </code>не имеют никаких междоменных привилегий. В частности, они не имеют доступа к содержимому в <code>iframe</code>, если содержимое получено из другого домена, или выполняются междоменные XMLHttpRequests.</p> - -<p>Однако, вы можете разрешить эти функции для заданных доменов, путём добавления их в <a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a> дополнения в ключе <code>"cross-domain-content"</code>, который расположен в ключе <code>"permissions"</code>. Смотрите статью <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/Cross_Domain_Content_Scripts">междоменные скрипты содержимого</a>.</p> -</article> diff --git a/files/ru/mozilla/add-ons/sdk/high-level_apis/addon-page/index.html b/files/ru/mozilla/add-ons/sdk/high-level_apis/addon-page/index.html deleted file mode 100644 index 069cb199b2..0000000000 --- a/files/ru/mozilla/add-ons/sdk/high-level_apis/addon-page/index.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Страницы дополнения -slug: Mozilla/Add-ons/SDK/High-Level_APIs/addon-page -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/addon-page ---- -<p>{{AddonSidebar}}</p> - -<p>{{obsolete_header(35)}}</p> - -<p>Создание простых страниц</p> - -<h2 id="Применеие">Применеие</h2> - -<p>С помошью Add-on SDK Вы можете представлять данные пользователю, такие как руководство по использованию вашего дополнения во вкладке браузера. Вы можете подгружать содержимое из HTML файла в "data" директории дополнения.</p> - -<div class="note"> -<p><strong>Заметка:</strong> Данный модульне влияет на браузер.</p> -</div> - -<p>Для подобных страниц, navigational elements such as the <a href="http://support.mozilla.org/en-US/kb/Location%20bar%20autocomplete">Awesome Bar</a>, <a href="http://support.mozilla.org/en-US/kb/Search%20bar">Search Bar</a>, or <a href="http://support.mozilla.org/en-US/kb/Bookmarks%20Toolbar">Bookmarks Toolbar</a> are not usually relevant and distract from the content you are presenting. The <code>addon-page</code> module provides a simple way to have a page which excludes these elements.</p> - -<p>Чтобы импортировать содержимое, используйте <code>require()</code>. После чего, данные загрузятся из "data/index.html" без элементов навигации:</p> - -<pre class="brush: js">var addontab = require("sdk/addon-page"); -var data = require("sdk/self").data; - -require("sdk/tabs").open(data.url("index.html")); -</pre> - -<p><img alt="" src="https://mdn.mozillademos.org/files/6503/addon-page.png" style="display: block; height: 722px; margin-left: auto; margin-right: auto; width: 666px;"></p> - -<p>Это влияет только на "data/index.html": остальные страницы отображаются нормально.</p> diff --git a/files/ru/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html b/files/ru/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html deleted file mode 100644 index 2d88abc734..0000000000 --- a/files/ru/mozilla/add-ons/sdk/high-level_apis/context-menu/index.html +++ /dev/null @@ -1,578 +0,0 @@ ---- -title: context-menu -slug: Mozilla/Add-ons/SDK/High-Level_APIs/context-menu -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/context-menu ---- -<div class="note"> - <p>Stable</p> -</div> -<p><span class="seoSummary">Как добавить элемент меню, подменю и разделитель в контекстное меню страницы.</span></p> -<h2 id="Использование">Использование</h2> -<p>Instead of manually adding items when particular contexts occur and then removing them when those contexts go away, you <em>bind</em> items to contexts, and the adding and removing is automatically handled for you. Items are bound to contexts in much the same way that event listeners are bound to events. When the user invokes the context menu, all of the items bound to the current context are automatically added to the menu. If no items are bound, none are added. Likewise, any items that were previously in the menu but are not bound to the current context are automatically removed from the menu. You never need to manually remove your items from the menu unless you want them to never appear again.</p> -<p>For example, if your add-on needs to add a context menu item whenever the user visits a certain page, don't create the item when that page loads, and don't remove it when the page unloads. Rather, create your item only once and supply a context that matches the target URL.</p> -<p>Context menu items are displayed in the order created or in the case of sub menus the order added to the sub menu. Menu items for each add-on will be grouped together automatically. If the total number of menu items in the main context menu from all add-ons exceeds a certain number (normally 10 but configurable with the <code>extensions.addon-sdk.context-menu.overflowThreshold</code> preference) all of the menu items will instead appear in an overflow menu to avoid making the context menu too large.</p> -<h3 id="Specifying_Contexts">Specifying Contexts</h3> -<p>As its name implies, the context menu should be reserved for the occurrence of specific contexts. Contexts can be related to page content or the page itself, but they should never be external to the page.</p> -<p>For example, a good use of the menu would be to show an "Edit Image" item when the user right-clicks an image in the page. A bad use would be to show a submenu that listed all the user's tabs, since tabs aren't related to the page or the node the user clicked to open the menu.</p> -<h4 id="The_Page_Context">The Page Context</h4> -<p>First of all, you may not need to specify a context at all. When a top-level item does not specify a context, the page context applies. An item that is in a submenu is visible unless you specify a context.</p> -<p>The <em>page context</em> occurs when the user invokes the context menu on a non-interactive portion of the page. Try right-clicking a blank spot in this page, or on text. Make sure that no text is selected. The menu that appears should contain the items "Back", "Forward", "Reload", "Stop", and so on. This is the page context.</p> -<p>The page context is appropriate when your item acts on the page as a whole. It does not occur when the user invokes the context menu on a link, image, or other non-text node, or while a selection exists.</p> -<h4 id="Declarative_Contexts">Declarative Contexts</h4> -<p>You can specify some simple, declarative contexts when you create a menu item by setting the <code>context</code> property of the options object passed to its constructor, like this:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Item({ - label: "My Menu Item", - context: cm.URLContext("*.mozilla.org") -});</pre> -<table class="standard-table"> - <tbody> - <tr> - <th>Constructor</th> - <th>Description</th> - </tr> - <tr> - <td><code>PageContext() </code></td> - <td>The page context.</td> - </tr> - <tr> - <td><code>SelectionContext() </code></td> - <td>This context occurs when the menu is invoked on a page in which the user has made a selection.</td> - </tr> - <tr> - <td><code>SelectorContext(selector) </code></td> - <td>This context occurs when the menu is invoked on a node that either matches <code>selector</code>, a CSS selector, or has an ancestor that matches. <code>selector</code> may include multiple selectors separated by commas, e.g., <code>"a[href], img"</code>.</td> - </tr> - <tr> - <td><code>URLContext(matchPattern) </code></td> - <td>This context occurs when the menu is invoked on pages with particular URLs. <code>matchPattern</code> is a match pattern string or an array of match pattern strings. When <code>matchPattern</code> is an array, the context occurs when the menu is invoked on a page whose URL matches any of the patterns. These are the same match pattern strings that you use with the <a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod"><code>page-mod</code></a> <code>include</code> property. <a href="/en-US/Add-ons/SDK/Low-Level_APIs/util_match-pattern">Read more about patterns</a>.</td> - </tr> - <tr> - <td><code>PredicateContext(predicateFunction)</code></td> - <td><code>predicateFunction</code> is called when the menu is invoked, and the context occurs when the function returns a true value. The function is passed an object with properties describing the menu invocaton context.</td> - </tr> - <tr> - <td>array</td> - <td>An array of any of the other types. This context occurs when all contexts in the array occur.</td> - </tr> - </tbody> -</table> -<p>Menu items also have a <code>context</code> property that can be used to add and remove declarative contexts after construction. For example:</p> -<pre class="brush: js">var context = require("sdk/context-menu").SelectorContext("img"); -myMenuItem.context.add(context); -myMenuItem.context.remove(context);</pre> -<p>When a menu item is bound to more than one context, it appears in the menu when all of those contexts occur.</p> -<h3 id="In_Content_Scripts">In Content Scripts</h3> -<p>The declarative contexts are handy but not very powerful. For instance, you might want your menu item to appear for any page that has at least one image, but declarative contexts won't help you there.</p> -<p>When you need more control over the context in which your menu items are shown, you can use content scripts. Like other APIs in the SDK, the <code>context-menu</code> API uses <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">content scripts</a> to let your add-on interact with pages in the browser. Each menu item you create in the top-level context menu can have a content script.</p> -<p>A special event named <code>"context"</code> is emitted in your content scripts whenever the context menu is about to be shown. If you register a listener function for this event and it returns true, the menu item associated with the listener's content script is shown in the menu.</p> -<p>For example, this item appears whenever the context menu is invoked on a page that contains at least one image:</p> -<pre class="brush: js">require("sdk/context-menu").Item({ - label: "This Page Has Images", - contentScript: 'self.on("context", function (node) {' + - ' return !!document.querySelector("img");' + - '});' -});</pre> -<p>Note that the listener function has a parameter called <code>node</code>. This is the node in the page that the user context-clicked to invoke the menu. You can use it to determine whether your item should be shown.</p> -<p>You can both specify declarative contexts and listen for contexts in a content script. In that case, the declarative contexts are evaluated first, and your item is shown only when all declarative contexts are current and your context listener returns true.</p> -<p>If any declarative contexts are not current, then your context listener is never called. This example takes advantage of that fact. The listener can be assured that <code>node</code> will always be an image:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Item({ - label: "A Mozilla Image", - context: cm.SelectorContext("img"), - contentScript: 'self.on("context", function (node) {' + - ' return /mozilla/.test(node.src);' + - '});' -});</pre> -<p>However, if you do combine <code>SelectorContext</code> and the <code>"context"</code> event, be aware that the <code>node</code> argument passed to the <code>"context"</code> event will not always match the type specified in <code>SelectorContext</code>.</p> -<p><code>SelectorContext</code> will match if the menu is invoked on the node specified <em>or any descendant of that node</em>, but the <code>"context"</code> event handler is passed <em>the actual node</em> on which the menu was invoked. The example above works because <code><IMG></code> elements can't contain other elements, but in the example below, <code>node.nodeName</code> is not guaranteed to be "P" - for example, it won't be "P" if the user context-clicked a link inside a paragraph:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Item({ - label: "A Paragraph", - context: cm.SelectorContext("p"), - contentScript: 'self.on("context", function (node) {' + - ' console.log(node.nodeName);' + - ' return true;' + - '});' -});</pre> -<p>The content script is executed for every page that a context menu is shown for. It will be executed the first time it is needed (i.e. when the context menu is first shown and all of the declarative contexts for your item are current) and then remains active until you destroy your context menu item or the page is unloaded.</p> -<h3 id="Handling_Menu_Item_Clicks">Handling Menu Item Clicks</h3> -<p>In addition to using content scripts to listen for the <code>"context"</code> event as described above, you can use content scripts to handle item clicks. When the user clicks your menu item, an event named <code>"click"</code> is emitted in the item's content script.</p> -<p>Therefore, to handle an item click, listen for the <code>"click"</code> event in that item's content script like so:</p> -<pre class="brush: js">require("sdk/context-menu").Item({ - label: "My Item", - contentScript: 'self.on("click", function (node, data) {' + - ' console.log("Item clicked!");' + - '});' -});</pre> -<p>Note that the listener function has parameters called <code>node</code> and <code>data</code>.</p> -<h4 id="The_node_Argument">The "node" Argument</h4> -<p><code>node</code> is the node that the user context-clicked to invoke the menu.</p> -<ul> - <li>If you did not use <code>SelectorContext</code> to decide whether to show the menu item, then this is the actual node clicked.</li> - <li>If you did use <code>SelectorContext</code>, then this is the node that matched your selector.</li> -</ul> -<p>For example, suppose your add-on looks like this:</p> -<pre class="brush: js">var script = "self.on('click', function (node, data) {" + - " console.log('clicked: ' + node.nodeName);" + - "});"; - -var cm = require("sdk/context-menu"); - -cm.Item({ - label: "body context", - context: cm.SelectorContext("body"), - contentScript: script -});</pre> -<p>This add-on creates a context-menu item that uses <code>SelectorContext</code> to display the item whenever the context menu is activated on any descendant of the <code><BODY></code> element. When clicked, the item just logs the <a href="https://developer.mozilla.org/en-US/docs/DOM/Node.nodeName"><code>nodeName</code></a> property for the node passed to the click handler.</p> -<p>If you run this add-on you'll see that it always logs "BODY", even if you click on a paragraph element inside the page:</p> -<pre>info: contextmenu-example: clicked: BODY</pre> -<p>By contrast, this add-on uses the <code>PageContext</code>:</p> -<pre class="brush: js">var script = "self.on('click', function (node, data) {" + - " console.log('clicked: ' + node.nodeName);" + - "});"; - -var cm = require("sdk/context-menu"); - -cm.Item({ - label: "body context", - context: cm.PageContext(), - contentScript: script -});</pre> -<p>It will log the name of the actual node clicked:</p> -<pre>info: contextmenu-example: clicked: P</pre> -<h4 id="The_data_Argument">The "data" Argument</h4> -<p><code>data</code> is the <code>data</code> property of the menu item that was clicked. Note that when you have a hierarchy of menu items the click event will be sent to the content script of the item clicked and all ancestors so be sure to verify that the <code>data</code> value passed matches the item you expect. You can use this to simplify click handling by providing just a single click listener on a <code>Menu</code> that reacts to clicks for any child items.:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Menu({ - label: "My Menu", - contentScript: 'self.on("click", function (node, data) {' + - ' console.log("You clicked " + data);' + - '});', - items: [ - cm.Item({ label: "Item 1", data: "item1" }), - cm.Item({ label: "Item 2", data: "item2" }), - cm.Item({ label: "Item 3", data: "item3" }) - ] -}); -</pre> -<h4 id="Communicating_With_the_Add-on">Communicating With the Add-on</h4> -<p>Often you will need to collect some kind of information in the click listener and perform an action unrelated to content. To communicate to the menu item associated with the content script, the content script can call the <code>postMessage</code> function attached to the global <code>self</code> object, passing it some JSON-able data. The menu item's <code>"message"</code> event listener will be called with that data.</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Item({ - label: "Edit Image", - context: cm.SelectorContext("img"), - contentScript: 'self.on("click", function (node, data) {' + - ' self.postMessage(node.src);' + - '});', - onMessage: function (imgSrc) { - openImageEditor(imgSrc); - } -});</pre> -<h3 id="Updating_a_Menu_Item's_Label">Updating a Menu Item's Label</h3> -<p>Each menu item must be created with a label, but you can change its label later using a couple of methods.</p> -<p>The simplest method is to set the menu item's <code>label</code> property. This example updates the item's label based on the number of times it's been clicked:</p> -<pre class="brush: js">var numClicks = 0; -var myItem = require("sdk/context-menu").Item({ - label: "Click Me: " + numClicks, - contentScript: 'self.on("click", self.postMessage);', - onMessage: function () { - numClicks++; - this.label = "Click Me: " + numClicks; - // Setting myItem.label is equivalent. - } -});</pre> -<p>Sometimes you might want to update the label based on the context. For instance, if your item performs a search with the user's selected text, it would be nice to display the text in the item to provide feedback to the user. In these cases you can use the second method. Recall that your content scripts can listen for the <code>"context"</code> event and if your listeners return true, the items associated with the content scripts are shown in the menu. In addition to returning true, your <code>"context"</code> listeners can also return strings. When a <code>"context"</code> listener returns a string, it becomes the item's new label.</p> -<p>This item implements the aforementioned search example:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Item({ - label: "Search Google", - context: cm.SelectionContext(), - contentScript: 'self.on("context", function () {' + - ' var text = window.getSelection().toString();' + - ' if (text.length > 20)' + - ' text = text.substr(0, 20) + "...";' + - ' return "Search Google for " + text;' + - '});' -});</pre> -<p>The <code>"context"</code> listener gets the window's current selection, truncating it if it's too long, and includes it in the returned string. When the item is shown, its label will be "Search Google for <code>text</code>", where <code>text</code> is the truncated selection.</p> -<h3 id="Private_Windows">Private Windows</h3> -<p>If your add-on has not opted into private browsing, then any menus or menu items that you add will not appear in context menus belonging to private browser windows.</p> -<p>To learn more about private windows, how to opt into private browsing, and how to support private browsing, refer to the <a href="/en-US/Add-ons/SDK/High-Level_APIs/private-browsing">documentation for the <code>private-browsing</code> module</a>.</p> -<h3 id="More_Examples">More Examples</h3> -<p>For conciseness, these examples create their content scripts as strings and use the <code>contentScript</code> property. In your own add-on, you will probably want to create your content scripts in separate files and pass their URLs using the <code>contentScriptFile</code> property. See <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Working with Content Scripts</a> for more information.</p> -<div class="warning"> - <p>Unless your content script is extremely simple and consists only of a static string, don't use <code>contentScript</code>: if you do, you may have problems getting your add-on approved on AMO.</p> - <p>Instead, keep the script in a separate file and load it using <code>contentScriptFile</code>. This makes your code easier to maintain, secure, debug and review.</p> -</div> -<p>Show an "Edit Page Source" item when the user right-clicks a non-interactive part of the page:</p> -<pre class="brush: js">require("sdk/context-menu").Item({ - label: "Edit Page Source", - contentScript: 'self.on("click", function (node, data) {' + - ' self.postMessage(document.URL);' + - '});', - onMessage: function (pageURL) { - editSource(pageURL); - } -});</pre> -<p>Show an "Edit Image" item when the menu is invoked on an image:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Item({ - label: "Edit Image", - context: cm.SelectorContext("img"), - contentScript: 'self.on("click", function (node, data) {' + - ' self.postMessage(node.src);' + - '});', - onMessage: function (imgSrc) { - openImageEditor(imgSrc); - } -});</pre> -<p>Show an "Edit Mozilla Image" item when the menu is invoked on an image in a mozilla.org or mozilla.com page:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Item({ - label: "Edit Mozilla Image", - context: [ - cm.URLContext(["*.mozilla.org", "*.mozilla.com"]), - cm.SelectorContext("img") - ], - contentScript: 'self.on("click", function (node, data) {' + - ' self.postMessage(node.src);' + - '});', - onMessage: function (imgSrc) { - openImageEditor(imgSrc); - } -});</pre> -<p>Show an "Edit Page Images" item when the page contains at least one image:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -cm.Item({ - label: "Edit Page Images", - // This ensures the item only appears during the page context. - context: cm.PageContext(), - contentScript: 'self.on("context", function (node) {' + - ' var pageHasImgs = !!document.querySelector("img");' + - ' return pageHasImgs;' + - '});' + - 'self.on("click", function (node, data) {' + - ' var imgs = document.querySelectorAll("img");' + - ' var imgSrcs = [];' + - ' for (var i = 0 ; i < imgs.length; i++)' + - ' imgSrcs.push(imgs[i].src);' + - ' self.postMessage(imgSrcs);' + - '});', - onMessage: function (imgSrcs) { - openImageEditor(imgSrcs); - } -});</pre> -<p>Show a "Search With" menu when the user right-clicks an anchor that searches Google or Wikipedia with the text contained in the anchor:</p> -<pre class="brush: js">var cm = require("sdk/context-menu"); -var googleItem = cm.Item({ - label: "Google", - data: "http://www.google.com/search?q=" -}); -var wikipediaItem = cm.Item({ - label: "Wikipedia", - data: "http://en.wikipedia.org/wiki/Special:Search?search=" -}); -var searchMenu = cm.Menu({ - label: "Search With", - context: cm.SelectorContext("a[href]"), - contentScript: 'self.on("click", function (node, data) {' + - ' var searchURL = data + node.textContent;' + - ' window.location.href = searchURL;' + - '});', - items: [googleItem, wikipediaItem] -});</pre> -<h2 id="Globals">Globals</h2> -<h3 id="Constructors">Constructors</h3> -<h4 class="addon-sdk-api-name" id="Item(options)"><code>Item(options)</code></h4> -<p>Creates a labeled menu item that can perform an action when clicked.</p> -<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>label</td> - <td>string</td> - <td> - <p>The item's label. It must either be a string or an object that implements <code>toString()</code>.</p> - </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>image</td> - <td>string</td> - <td> - <p>The item's icon, a string URL. The URL can be remote, a reference to an image in the add-on's <code>data</code> directory, or a data URI.</p> - </td> - </tr> - <tr> - <td>data</td> - <td>string</td> - <td> - <p>An optional arbitrary value to associate with the item. It must be either a string or an object that implements <code>toString()</code>. It will be passed to click listeners.</p> - </td> - </tr> - <tr> - <td>context</td> - <td>value</td> - <td> - <p>If the item is contained in the top-level context menu, this declaratively specifies the context under which the item will appear; see Specifying Contexts above.</p> - </td> - </tr> - <tr> - <td>contentScript</td> - <td>string,array</td> - <td> - <p>If the item is contained in the top-level context menu, this is the content script or an array of content scripts that the item can use to interact with the page.</p> - </td> - </tr> - <tr> - <td>contentScriptFile</td> - <td>string,array</td> - <td> - <p>If the item is contained in the top-level context menu, this is the local file URL of the content script or an array of such URLs that the item can use to interact with the page.</p> - </td> - </tr> - <tr> - <td>onMessage</td> - <td>function</td> - <td> - <p>If the item is contained in the top-level context menu, this function will be called when the content script calls <code>self.postMessage</code>. It will be passed the data that was passed to <code>postMessage</code>.</p> - </td> - </tr> - </tbody> -</table> -<h4 class="addon-sdk-api-name" id="Menu(options)"><code>Menu(options)</code></h4> -<p>Creates a labeled menu item that expands into a submenu.</p> -<h5 id="Parameters_2">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>label</td> - <td>string</td> - <td> - <p>The item's label. It must either be a string or an object that implements <code>toString()</code>.</p> - </td> - </tr> - <tr> - <td>items</td> - <td>array</td> - <td> - <p>An array of menu items that the menu will contain. Each must be an <code>Item</code>, <code>Menu</code>, or <code>Separator</code>.</p> - </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>image</td> - <td>string</td> - <td> - <p>The menu's icon, a string URL. The URL can be remote, a reference to an image in the add-on's <code>data</code> directory, or a data URI.</p> - </td> - </tr> - <tr> - <td>context</td> - <td>value</td> - <td> - <p>If the menu is contained in the top-level context menu, this declaratively specifies the context under which the menu will appear; see Specifying Contexts above.</p> - </td> - </tr> - <tr> - <td>contentScript</td> - <td>string,array</td> - <td> - <p>If the menu is contained in the top-level context menu, this is the content script or an array of content scripts that the menu can use to interact with the page.</p> - </td> - </tr> - <tr> - <td>contentScriptFile</td> - <td>string,array</td> - <td> - <p>If the menu is contained in the top-level context menu, this is the local file URL of the content script or an array of such URLs that the menu can use to interact with the page.</p> - </td> - </tr> - <tr> - <td>onMessage</td> - <td>function</td> - <td> - <p>If the menu is contained in the top-level context menu, this function will be called when the content script calls <code>self.postMessage</code>. It will be passed the data that was passed to <code>postMessage</code>.</p> - </td> - </tr> - </tbody> -</table> -<h4 class="addon-sdk-api-name" id="Separator()"><code>Separator()</code></h4> -<p>Creates a menu separator.</p> -<h4 class="addon-sdk-api-name" id="PageContext()"><code>PageContext()</code></h4> -<p>Creates a page context. See Specifying Contexts above.</p> -<h4 class="addon-sdk-api-name" id="SelectionContext()"><code>SelectionContext()</code></h4> -<p>Creates a context that occurs when a page contains a selection. See Specifying Contexts above.</p> -<h4 class="addon-sdk-api-name" id="SelectorContext(selector)"><code>SelectorContext(selector)</code></h4> -<p>Creates a context that matches a given CSS selector. See Specifying Contexts above.</p> -<h5 id="Parameters_3">Parameters</h5> -<p><strong>selector : string</strong><br> - A CSS selector.</p> -<h4 class="addon-sdk-api-name" id="URLContext(matchPattern)"><code>URLContext(matchPattern)</code></h4> -<p>Creates a context that matches pages with particular URLs. See Specifying Contexts above.</p> -<h5 id="Parameters_4">Parameters</h5> -<p><strong>matchPattern : string,array</strong><br> - A <a href="/en-US/Add-ons/SDK/Low-Level_APIs/util_match-pattern">match pattern</a> string, regexp or an array of match pattern strings or regexps.</p> -<h4 class="addon-sdk-api-name" id="PredicateContext(predicateFunction)"><code>PredicateContext(predicateFunction)</code></h4> -<div class="geckoVersionNote"> - <p>New in Firefox 29</p> -</div> -<p>Creates a context that occurs when predicateFunction returns a true value. See Specifying Contexts above.</p> -<h5 id="Parameters_5">Parameters</h5> -<p><strong>predicateFunction : function(context)</strong><br> - A function which will be called with an object argument that provide information about the invocation context. <code>context</code> object properties:</p> -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Property</th> - <th scope="col">Description</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>documentType</code></td> - <td>The MIME type of the document the menu was invoked in. E.g. <code>text/html</code> for HTML pages, <code>application/xhtml+xml</code> for XHTML, or <code>image/jpeg</code> if viewing an image directly.</td> - </tr> - <tr> - <td><code>documentURL</code></td> - <td>The URL of the document the menu was invoked in.</td> - </tr> - <tr> - <td><code>targetName</code></td> - <td>The name of the DOM element that the menu was invoked on, in lower-case.</td> - </tr> - <tr> - <td><code>targetID</code></td> - <td>The <code>id</code> attribute of the element that the menu was invoked on, or <code>null</code> if not set.</td> - </tr> - <tr> - <td><code>isEditable</code></td> - <td><code>true</code> if the menu was invoked in an editable element, and that element isn't disabled or read-only. This includes non-input elements with the <code>contenteditable</code> attribute set to <code>true</code>.</td> - </tr> - <tr> - <td><code>selectionText</code></td> - <td>The current selection as a text string, or <code>null</code>. If the menu was invoked in an input text box or area, this is the selection of that element, otherwise the selection in the contents of the window.</td> - </tr> - <tr> - <td><code>srcURL</code></td> - <td>The <code>src</code> URL of the element that the menu was invoked on, or <code>null</code> if it doesn't have one.</td> - </tr> - <tr> - <td><code>linkURL</code></td> - <td>The <code>href</code> URL of the element that the menu was invoked on, or <code>null</code> if it doesn't have one.</td> - </tr> - <tr> - <td><code>value</code></td> - <td>The current contents of a input text box or area if the menu was invoked in one, <code>null</code> otherwise.</td> - </tr> - </tbody> -</table> -<h2 id="Item">Item</h2> -<p>A labeled menu item that can perform an action when clicked.</p> -<h3 id="Methods">Methods</h3> -<h4 class="addon-sdk-api-name" id="destroy()"><code>destroy()</code></h4> -<p>Permanently removes the item from its parent menu and frees its resources. The item must not be used afterward. If you need to remove the item from its parent menu but use it afterward, call <code>removeItem()</code> on the parent menu instead.</p> -<h3 id="Properties">Properties</h3> -<h4 class="addon-sdk-api-name" id="label"><code>label</code></h4> -<p>The menu item's label. You can set this after creating the item to update its label later.</p> -<h4 class="addon-sdk-api-name" id="image"><code>image</code></h4> -<p>The item's icon, a string URL. The URL can be remote, a reference to an image in the add-on's <code>data</code> directory, or a data URI. You can set this after creating the item to update its image later. To remove the item's image, set it to <code>null</code>.</p> -<h4 class="addon-sdk-api-name" id="data"><code>data</code></h4> -<p>An optional arbitrary value to associate with the item. It must be either a string or an object that implements <code>toString()</code>. It will be passed to click listeners. You can set this after creating the item to update its data later.</p> -<h4 class="addon-sdk-api-name" id="context"><code>context</code></h4> -<p>A list of declarative contexts for which the menu item will appear in the context menu. Contexts can be added by calling <code>context.add()</code> and removed by called <code>context.remove()</code>.</p> -<h4 class="addon-sdk-api-name" id="parentMenu"><code>parentMenu</code></h4> -<p>The item's parent <code>Menu</code>, or <code>null</code> if the item is contained in the top-level context menu. This property is read-only. To add the item to a new menu, call that menu's <code>addItem()</code> method.</p> -<h4 class="addon-sdk-api-name" id="contentScript"><code>contentScript</code></h4> -<p>The content script or the array of content scripts associated with the menu item during creation.</p> -<h4 class="addon-sdk-api-name" id="contentScriptFile"><code>contentScriptFile</code></h4> -<p>The URL of a content script or the array of such URLs associated with the menu item during creation.</p> -<h3 id="Events">Events</h3> -<h4 class="addon-sdk-api-name" id="message"><code>message</code></h4> -<p>If you listen to this event you can receive message events from content scripts associated with this menu item. When a content script posts a message using <code>self.postMessage()</code>, the message is delivered to the add-on code in the menu item's <code>message</code> event.</p> -<h5 id="Arguments">Arguments</h5> -<p><strong>value</strong> : Listeners are passed a single argument which is the message posted from the content script. The message can be any <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/using_port#JSON-Serializable_Values">JSON-serializable value</a>.</p> -<h2 id="Menu">Menu</h2> -<p>A labeled menu item that expands into a submenu.</p> -<h3 id="Methods_2">Methods</h3> -<h4 class="addon-sdk-api-name" id="addItem(item)"><code>addItem(item)</code></h4> -<p>Appends a menu item to the end of the menu. If the item is already contained in another menu or in the top-level context menu, it's automatically removed first. If the item is already contained in this menu it will just be moved to the end of the menu.</p> -<h5 id="Parameters_6">Parameters</h5> -<p><strong>item : Item,Menu,Separator</strong><br> - The <code>Item</code>, <code>Menu</code>, or <code>Separator</code> to add to the menu.</p> -<h4 class="addon-sdk-api-name" id="removeItem(item)"><code>removeItem(item)</code></h4> -<p>Removes the given menu item from the menu. If the menu does not contain the item, this method does nothing.</p> -<h5 id="Parameters_7">Parameters</h5> -<p><strong>item : Item,Menu,Separator</strong><br> - The menu item to remove from the menu.</p> -<h4 class="addon-sdk-api-name" id="destroy()_2"><code>destroy()</code></h4> -<p>Permanently removes the menu from its parent menu and frees its resources. The menu must not be used afterward. If you need to remove the menu from its parent menu but use it afterward, call <code>removeItem()</code> on the parent menu instead.</p> -<h3 id="Properties_2">Properties</h3> -<h4 class="addon-sdk-api-name" id="label_2"><code>label</code></h4> -<p>The menu's label. You can set this after creating the menu to update its label later.</p> -<h4 class="addon-sdk-api-name" id="items"><code>items</code></h4> -<p>An array containing the items in the menu. The array is read-only, meaning that modifications to it will not affect the menu. However, setting this property to a new array will replace all the items currently in the menu with the items in the new array.</p> -<h4 class="addon-sdk-api-name" id="image_2"><code>image</code></h4> -<p>The menu's icon, a string URL. The URL can be remote, a reference to an image in the add-on's <code>data</code> directory, or a data URI. You can set this after creating the menu to update its image later. To remove the menu's image, set it to <code>null</code>.</p> -<h4 class="addon-sdk-api-name" id="context_2"><code>context</code></h4> -<p>A list of declarative contexts for which the menu will appear in the context menu. Contexts can be added by calling <code>context.add()</code> and removed by called <code>context.remove()</code>.</p> -<h4 class="addon-sdk-api-name" id="parentMenu_2"><code>parentMenu</code></h4> -<p>The menu's parent <code>Menu</code>, or <code>null</code> if the menu is contained in the top-level context menu. This property is read-only. To add the menu to a new menu, call that menu's <code>addItem()</code> method.</p> -<h4 class="addon-sdk-api-name" id="contentScript_2"><code>contentScript</code></h4> -<p>The content script or the array of content scripts associated with the menu during creation.</p> -<h4 class="addon-sdk-api-name" id="contentScriptFile_2"><code>contentScriptFile</code></h4> -<p>The URL of a content script or the array of such URLs associated with the menu during creation.</p> -<h3 id="Events_2">Events</h3> -<h4 class="addon-sdk-api-name" id="message_2"><code>message</code></h4> -<p>If you listen to this event you can receive message events from content scripts associated with this menu item. When a content script posts a message using <code>self.postMessage()</code>, the message is delivered to the add-on code in the menu item's <code>message</code> event.</p> -<h5 id="Arguments_2">Arguments</h5> -<p><strong>value</strong> : Listeners are passed a single argument which is the message posted from the content script. The message can be any <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts/using_port#JSON-Serializable_Values">JSON-serializable value</a>.</p> -<h2 id="Separator">Separator</h2> -<p>A menu separator. Separators can be contained only in <code>Menu</code>s, not in the top-level context menu.</p> -<h3 id="Methods_3">Methods</h3> -<h4 class="addon-sdk-api-name" id="destroy()_3"><code>destroy()</code></h4> -<p>Permanently removes the separator from its parent menu and frees its resources. The separator must not be used afterward. If you need to remove the separator from its parent menu but use it afterward, call <code>removeItem()</code> on the parent menu instead.</p> -<h3 id="Properties_3">Properties</h3> -<h4 class="addon-sdk-api-name" id="parentMenu_3"><code>parentMenu</code></h4> -<p>The separator's parent <code>Menu</code>. This property is read-only. To add the separator to a new menu, call that menu's <code>addItem()</code> method.</p> diff --git a/files/ru/mozilla/add-ons/sdk/high-level_apis/index.html b/files/ru/mozilla/add-ons/sdk/high-level_apis/index.html deleted file mode 100644 index 32b39d045b..0000000000 --- a/files/ru/mozilla/add-ons/sdk/high-level_apis/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: High-Level APIs -slug: Mozilla/Add-ons/SDK/High-Level_APIs -tags: - - 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/ru/mozilla/add-ons/sdk/high-level_apis/passwords/index.html b/files/ru/mozilla/add-ons/sdk/high-level_apis/passwords/index.html deleted file mode 100644 index 535385e895..0000000000 --- a/files/ru/mozilla/add-ons/sdk/high-level_apis/passwords/index.html +++ /dev/null @@ -1,525 +0,0 @@ ---- -title: passwords -slug: Mozilla/Add-ons/SDK/High-Level_APIs/passwords -translation_of: Archive/Add-ons/Add-on_SDK/High-Level_APIs/passwords ---- -<div class="note"> - <p>Stable</p> -</div> -<p><span class="seoSummary">Interact with Firefox's <a href="http://support.mozilla.com/en-US/kb/Remembering%20passwords">Password Manager</a> to add, retrieve and remove stored credentials.</span></p> -<h2 id="Usage">Usage</h2> -<p>A <em>credential</em> is the set of information a user supplies to authenticate herself with a service. Typically a credential consists of a username and a password.</p> -<p>Using this module you can:</p> -<ol> - <li> - <p><strong>Search</strong> for credentials which have been stored in the Password Manager. You can then use the credentials to access their related service (for example, by logging into a web site).</p> - </li> - <li> - <p><strong>Store</strong> credentials in the Password Manager. You can store different sorts of credentials, as outlined in the "Credentials" section below.</p> - </li> - <li> - <p><strong>Remove</strong> stored credentials from the Password Manager.</p> - </li> -</ol> -<h3 id="Credentials">Credentials</h3> -<p>In this API, credentials are represented by objects.</p> -<p>You create credential objects to pass into the API, and the API also returns credential objects to you. The sections below explain both the properties you should define on credential objects and the properties you can expect on credential objects returned by the API.</p> -<p>All credential objects include <code>username</code> and <code>password</code> properties. Different sorts of stored credentials include various additional properties, as outlined in this section.</p> -<p>You can use the Passwords API with three sorts of credentials:</p> -<ul> - <li>Add-on credentials</li> - <li>HTML form credentials</li> - <li>HTTP Authentication credentials</li> -</ul> -<h4 id="Add-on_Credential">Add-on Credential</h4> -<p>These are associated with your add-on rather than a particular web site. They contain the following properties:</p> -<table class="standard-table"> - <colgroup> - <col> - </colgroup> - <tbody> - <tr> - <td><code>username</code></td> - <td>The username.</td> - </tr> - <tr> - <td><code>password</code></td> - <td>The password.</td> - </tr> - <tr> - <td><code>url</code></td> - <td> - <p>For an add-on credential, this property is of the form:<br> - <code>addon:<addon-id></code>, where <code><addon-id></code> is the add-on's <a href="/en-US/Add-ons/SDK/Guides/Program_ID"> Program ID</a>.</p> - <p>You don't supply this value when storing an add-on credential: it is automatically generated for you. However, you can use it to work out which stored credentials belong to your add-on by comparing it with the <code>uri</code> property of the <a href="/en-US/Add-ons/SDK/High-Level_APIs/self"><code>self</code></a> module.</p> - </td> - </tr> - <tr> - <td><code>realm</code></td> - <td> - <p>You can use this as a name for the credential, to distinguish it from any other credentials you've stored.</p> - <p>The realm is displayed in Firefox's Password Manager, under "Site", in brackets after the URL. For example, if the realm for a credential is "User Registration", then its "Site" field will look something like:</p> - <code>addon:jid0-01mBBFyu0ZAXCFuB1JYKooSTKIc (User Registration)</code></td> - </tr> - </tbody> -</table> -<h4 id="HTML_Form_Credential">HTML Form Credential</h4> -<p>If a web service uses HTML forms to authenticate its users, then the corresponding credential is an HTML Form credential.</p> -<p>It contains the following properties:</p> -<table class="standard-table"> - <colgroup> - <col> - </colgroup> - <tbody> - <tr> - <td><code>username</code></td> - <td>The username.</td> - </tr> - <tr> - <td><code>password</code></td> - <td>The password.</td> - </tr> - <tr> - <td><code>url</code></td> - <td>The URL for the web service which requires the credential. You should omit anything after the hostname and (optional) port.</td> - </tr> - <tr> - <td><code>formSubmitURL</code></td> - <td>The value of the form's "action" attribute. You should omit anything after the hostname and (optional) port. If the form doesn't contain an "action" attribute, this property should match the <code>url</code> property.</td> - </tr> - <tr> - <td><code>usernameField</code></td> - <td>The value of the "name" attribute for the form's username field.</td> - </tr> - <tr> - <td><code>passwordField</code></td> - <td>The value of the "name" attribute for the form's password field.</td> - </tr> - </tbody> -</table> -<p>So: given a form at <code>http://www.example.com/login</code> with the following HTML:</p> -<pre class="brush: html"><form action="http://login.example.com/foo/authenticate.cgi"> - <div>Please log in.</div> - <label>Username:</label> <input type="text" name="uname"> - <label>Password:</label> <input type="password" name="pword"> -</form></pre> -<p>The corresponding values for the credential (excluding username and password) should be:</p> -<pre> url: "http://www.example.com" - formSubmitURL: "http://login.example.com" - usernameField: "uname" - passwordField: "pword" -</pre> -<p>Note that for both <code>url</code> and <code>formSubmitURL</code>, the portion of the URL after the hostname is omitted.</p> -<h4 id="HTTP_Authentication_Credential">HTTP Authentication Credential</h4> -<p>These are used to authenticate the user to a web site which uses HTTP Authentication, as detailed in <a href="http://tools.ietf.org/html/rfc2617">RFC 2617</a>. They contain the following properties:</p> -<table class="standard-table"> - <colgroup> - <col> - </colgroup> - <tbody> - <tr> - <td><code>username</code></td> - <td>The username.</td> - </tr> - <tr> - <td><code>password</code></td> - <td>The password.</td> - </tr> - <tr> - <td><code>url</code></td> - <td>The URL for the web service which requires the credential. You should omit anything after the hostname and (optional) port.</td> - </tr> - <tr> - <td><code>realm</code></td> - <td> - <p>The WWW-Authenticate response header sent by the server may include a "realm" field as detailed in <a href="http://tools.ietf.org/html/rfc2617">RFC 2617</a>. If it does, this property contains the value for the "realm" field. Otherwise, it is omitted.</p> - <p>The realm is displayed in Firefox's Password Manager, under "Site", in brackets after the URL.</p> - </td> - </tr> - </tbody> -</table> -<p>So: if a web server at <code>http://www.example.com</code> requested authentication with a response code like this:</p> -<pre> HTTP/1.0 401 Authorization Required - Server: Apache/1.3.27 - WWW-Authenticate: Basic realm="ExampleCo Login" -</pre> -<p>The corresponding values for the credential (excluding username and password) should be:</p> -<pre> url: "http://www.example.com" - realm: "ExampleCo Login" -</pre> -<h3 id="onComplete_and_onError">onComplete and onError</h3> -<p>This API is explicitly asynchronous, so all its functions take two callback functions as additional options: <code>onComplete</code> and <code>onError</code>.</p> -<p><code>onComplete</code> is called when the operation has completed successfully and <code>onError</code> is called when the function encounters an error.</p> -<p>Because the <code>search</code> function is expected to return a list of matching credentials, its <code>onComplete</code> option is mandatory. Because the other functions don't return a value in case of success their <code>onComplete</code> options are optional.</p> -<p>For all functions, <code>onError</code> is optional.</p> -<h2 id="Globals">Globals</h2> -<h3 id="Functions">Functions</h3> -<h4 class="addon-sdk-api-name" id="search(options)"><code>search(options)</code></h4> -<p>This function is used to retrieve a credential, or a list of credentials, stored in the Password Manager.</p> -<p>You pass it any subset of the possible properties a credential can contain. Credentials which match all the properties you supplied are returned as an argument to the <code>onComplete</code> callback.</p> -<p>So if you pass in an empty set of properties, all stored credentials are returned:</p> -<pre class="brush: js">function show_all_passwords() { - require("sdk/passwords").search({ - onComplete: function onComplete(credentials) { - credentials.forEach(function(credential) { - console.log(credential.username); - console.log(credential.password); - }); - } - }); - }</pre> -<p>If you pass it a single property, only credentials matching that property are returned:</p> -<pre class="brush: js">function show_passwords_for_joe() { - require("sdk/passwords").search({ - username: "joe", - onComplete: function onComplete(credentials) { - credentials.forEach(function(credential) { - console.log(credential.username); - console.log(credential.password); - }); - } - }); - }</pre> -<p>If you pass more than one property, returned credentials must match all of them:</p> -<pre class="brush: js">function show_google_password_for_joe() { - require("sdk/passwords").search({ - username: "joe", - url: "https://www.google.com", - onComplete: function onComplete(credentials) { - credentials.forEach(function(credential) { - console.log(credential.username); - console.log(credential.password); - }); - } - }); - }</pre> -<p>To retrieve only credentials associated with your add-on, use the <code>url</code> property, initialized from <code>self.uri</code>:</p> -<pre class="brush: js">function show_my_addon_passwords() { - require("sdk/passwords").search({ - url: require("sdk/self").uri, - onComplete: function onComplete(credentials) { - credentials.forEach(function(credential) { - console.log(credential.username); - console.log(credential.password); - }); - } - }); - }</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>onComplete</td> - <td>function</td> - <td> - <p>The callback function that is called once the function completes successfully. It is passed all the matching credentials as a list. This is the only mandatory option.</p> - </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>username</td> - <td>string</td> - <td> - <p>The username for the credential.</p> - </td> - </tr> - <tr> - <td>password</td> - <td>string</td> - <td> - <p>The password for the credential.</p> - </td> - </tr> - <tr> - <td>url</td> - <td>string</td> - <td> - <p>The URL associated with the credential.</p> - </td> - </tr> - <tr> - <td>formSubmitURL</td> - <td>string</td> - <td> - <p>The URL an HTML form credential is submitted to.</p> - </td> - </tr> - <tr> - <td>realm</td> - <td>string</td> - <td> - <p>For HTTP Authentication credentials, the realm for which the credential was requested. For add-on credentials, a name for the credential.</p> - </td> - </tr> - <tr> - <td>usernameField</td> - <td>string</td> - <td> - <p>The value of the <code>name</code> attribute for the user name input field in a form.</p> - </td> - </tr> - <tr> - <td>passwordField</td> - <td>string</td> - <td> - <p>The value of the <code>name</code> attribute for the password input field in a form.</p> - </td> - </tr> - <tr> - <td>onError</td> - <td>function</td> - <td> - <p>The callback function that is called if the function failed. The callback is passed an <code>error</code> containing a reason of a failure: this is an <a href="https://developer.mozilla.org/en/nsIException">nsIException</a> object.</p> - </td> - </tr> - </tbody> -</table> -<h4 class="addon-sdk-api-name" id="store(options)"><code>store(options)</code></h4> -<p>This function is used to store a credential in the Password Manager.</p> -<p>It takes an <code>options</code> object as an argument: this contains all the properties for the new credential.</p> -<p>As different sorts of credentials contain different properties, the appropriate options differ depending on the sort of credential being stored.</p> -<p>To store an add-on credential:</p> -<pre class="brush: js">require("sdk/passwords").store({ - realm: "User Registration", - username: "joe", - password: "SeCrEt123", -});</pre> -<p>To store an HTML form credential:</p> -<pre class="brush: js">require("sdk/passwords").store({ - url: "http://www.example.com", - formSubmitURL: "http://login.example.com", - username: "joe", - usernameField: "uname", - password: "SeCrEt123", - passwordField: "pword" -});</pre> -<p>To store an HTTP Authentication credential:</p> -<pre class="brush: js">require("sdk/passwords").store({ - url: "http://www.example.com", - realm: "ExampleCo Login", - username: "joe", - password: "SeCrEt123", -});</pre> -<p>See "Credentials" above for more details on how to set these properties.</p> -<p>The options parameter may also include <code>onComplete</code> and <code>onError</code> callback functions, which are called when the function has completed successfully and when it encounters an error, respectively. These options are both optional.</p> -<h5 id="Parameters_2">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>username</td> - <td>string</td> - <td> - <p>The username for the credential.</p> - </td> - </tr> - <tr> - <td>password</td> - <td>string</td> - <td> - <p>The password for the credential.</p> - </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>url</td> - <td>string</td> - <td> - <p>The URL to which the credential applies. Omitted for add-on credentials.</p> - </td> - </tr> - <tr> - <td>formSubmitURL</td> - <td>string</td> - <td> - <p>The URL a form-based credential was submitted to. Omitted for add-on credentials and HTTP Authentication credentials.</p> - </td> - </tr> - <tr> - <td>realm</td> - <td>string</td> - <td> - <p>For HTTP Authentication credentials, the realm for which the credential was requested. For add-on credentials, a name for the credential.</p> - </td> - </tr> - <tr> - <td>usernameField</td> - <td>string</td> - <td> - <p>The value of the <code>name</code> attribute for the username input in a form. Omitted for add-on credentials and HTTP Authentication credentials.</p> - </td> - </tr> - <tr> - <td>passwordField</td> - <td>string</td> - <td> - <p>The value of the <code>name</code> attribute for the password input in a form. Omitted for add-on credentials and HTTP Authentication credentials.</p> - </td> - </tr> - <tr> - <td>onComplete</td> - <td>function</td> - <td> - <p>The callback function that is called once the function completes successfully.</p> - </td> - </tr> - <tr> - <td>onError</td> - <td>function</td> - <td> - <p>The callback function that is called if the function failed. The callback is passed an <code>error</code> argument: this is an <a href="https://developer.mozilla.org/en/nsIException">nsIException</a> object.</p> - </td> - </tr> - </tbody> -</table> -<h4 class="addon-sdk-api-name" id="remove(options)"><code>remove(options)</code></h4> -<p>Removes a stored credential. You supply it all the properties of the credential to remove, along with optional <code>onComplete</code> and <code>onError</code> callbacks.</p> -<p>Because you must supply all the credential's properties, it may be convenient to call <code>search</code> first, and use its output as the input to <code>remove</code>. For example, to remove all of joe's stored credentials:</p> -<pre class="brush: js">require("sdk/passwords").search({ - username: "joe", - onComplete: function onComplete(credentials) { - credentials.forEach(require("sdk/passwords").remove); - }) -});</pre> -<p>To change an existing credential just call <code>store</code> after <code>remove</code> succeeds:</p> -<pre class="brush: js">require("sdk/passwords").remove({ - realm: "User Registration", - username: "joe", - password: "SeCrEt123" - onComplete: function onComplete() { - require("sdk/passwords").store({ - realm: "User Registration", - username: "joe", - password: "{new password}" - }) - } -});</pre> -<h5 id="Parameters_3">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>username</td> - <td>string</td> - <td> - <p>The username for the credential.</p> - </td> - </tr> - <tr> - <td>password</td> - <td>string</td> - <td> - <p>The password for the credential.</p> - </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>url</td> - <td>string</td> - <td> - <p>The URL to which the credential applies. Omitted for add-on credentials.</p> - </td> - </tr> - <tr> - <td>formSubmitURL</td> - <td>string</td> - <td> - <p>The URL a form-based credential was submitted to. Omitted for add-on credentials and HTTP Authentication credentials.</p> - </td> - </tr> - <tr> - <td>realm</td> - <td>string</td> - <td> - <p>For HTTP Authentication credentials, the realm for which the credential was requested. For add-on credentials, a name for the credential.</p> - </td> - </tr> - <tr> - <td>usernameField</td> - <td>string</td> - <td> - <p>The value of the <code>name</code> attribute for the username input in a form. Omitted for add-on credentials and HTTP Authentication credentials.</p> - </td> - </tr> - <tr> - <td>passwordField</td> - <td>string</td> - <td> - <p>The value of the <code>name</code> attribute for the password input in a form. Omitted for add-on credentials and HTTP Authentication credentials.</p> - </td> - </tr> - <tr> - <td>onComplete</td> - <td>function</td> - <td> - <p>The callback function that is called once the function has completed successfully.</p> - </td> - </tr> - <tr> - <td>onError</td> - <td>function</td> - <td> - <p>The callback function that is called if the function failed. The callback is passed an <code>error</code> argument: this is an <a href="https://developer.mozilla.org/en/nsIException">nsIException</a> object.</p> - </td> - </tr> - </tbody> -</table> -<p> </p> diff --git a/files/ru/mozilla/add-ons/sdk/index.html b/files/ru/mozilla/add-ons/sdk/index.html deleted file mode 100644 index 6c8217da66..0000000000 --- a/files/ru/mozilla/add-ons/sdk/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Add-on SDK -slug: Mozilla/Add-ons/SDK -tags: - - NeedsTranslation - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK ---- -<p><span id="result_box" lang="ru"><span class="hps">C помощью </span> <span class="hps">SDK</span> <span class="hps">вы можете создавать дополнения для</span></span><span lang="ru"> <span class="hps">Firefox</span> <span>, используя стандартные</span> <span class="atn hps">веб-</span><span>технологии</span><span>:</span> <span class="hps">JavaScript, HTML</span><span>,</span> <span class="hps">CSS</span>. <span>SDK</span> <span class="hps">включает в себя</span> <span class="hps">API-интерфейсы</span> <span class="hps">JavaScript</span><span>, которые можно использовать</span> <span class="hps">для создания</span> дополнений <span class="hps">и инструменты</span> <span class="hps">для</span> <span class="hps">создания, запуска</span><span>,</span> <span class="hps">тестирования</span> <span class="hps">и</span> <span class="hps">упаковки</span> дополнений<span class="hps">.</span></span></p> - -<hr> -<h3 id="Учебники">Учебники</h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials#getting-started">Начало</a></dt> - <dd>Как <a href="/en-US/Add-ons/SDK/Tutorials/Installation">установить SDK</a> и <a href="/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">использовать CFX</a> для разработки, тестирования и упаковки дополнений.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials#interact-with-the-browser">Взаимодействие с браузером</a></dt> - <dd><a href="/en-US/Add-ons/SDK/Tutorials/Open_a_Web_Page">Открытие веб-страниц</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Listen_For_Page_Load">прослушивание загрузки страницы</a>, и <a href="/en-US/Add-ons/SDK/Tutorials/List_Open_Tabs">список загруженных страниц</a>.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials#development-techniques">Методы разработки</a></dt> - <dd>Узнайте об распространённых методах разработки, таких как <a href="/en-US/Add-ons/SDK/Tutorials/Unit_testing">модульное тестирование</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Logging">регистрация</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Creating_Reusable_Modules">создание повторных модулей</a>, <a href="/ru/docs/%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F">локализация</a>, и <a href="/en-US/Add-ons/SDK/Tutorials/Mobile_development">мобильная разработка</a>.</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials#create-user-interfaces">Создание компонентов пользовательского интерфейса</a></dt> - <dd>Создание компонентов пользовательского интерфейса, такие как <a href="/en-US/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar">кнопки панели инструментов </a>, <a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item">контекстные меню</a>, <a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">пункты меню</a>, и <a href="/en-US/Add-ons/SDK/Tutorials/Display_a_Popup">диалоговые окна</a>.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials#modify-web-pages">Изменение веб-страниц</a></dt> - <dd>Изменение страниц, которые <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_Web_Pages_Based_on_URL">соответствуют заданному URL шаблону</a> или динамически <a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">изменить заданную вкладку</a>.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Annotator">Соединяем всё вместе</a></dt> - <dd>Обучение на примере расширения Комментатор.</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="Инструкции">Инструкции</h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Guides#contributors-guide">Руководство для разработчика НРП</a></dt> - <dd>Learn <a href="/en-US/Add-ons/SDK/Guides/Getting_Started">how to start contributing</a> to the SDK, and about the most important idioms used in the SDK code, such as <a href="/en-US/Add-ons/SDK/Guides/Modules">modules</a>, <a href="/en-US/Add-ons/SDK/Guides/Classes_and_Inheritance">classes and inheritance</a>, <a href="/en-US/Add-ons/SDK/Guides/Private_Properties">private properties</a>, and <a href="/en-US/Add-ons/SDK/Guides/Content_Processes">content processes</a>.</dd> - <dt><a href="/en-US/Add-ons/SDK/Guides#sdk-infrastructure">НРП инфраструктура</a></dt> - <dd>Aspects of the SDK's underlying technology: <a href="/en-US/Add-ons/SDK/Guides/Module_structure_of_the_SDK">modules</a>, the <a href="/en-US/Add-ons/SDK/Guides/Program_ID">Program ID</a>, and the rules defining <a href="/en-US/Add-ons/SDK/Guides/Firefox_Compatibility">Firefox compatibility</a>.</dd> - <dt><a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">Скрипты содержимого</a></dt> - <dd>A detailed guide to working with content scripts.</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Guides#sdk-idioms">Особенности НРП</a></dt> - <dd>The SDK's <a href="/en-US/Add-ons/SDK/Guides/Working_with_Events">event framework</a> and the <a href="/en-US/Add-ons/SDK/Guides/Two_Types_of_Scripts">distinction between add-on scripts and content scripts</a>.</dd> - <dt><a href="/en-US/Add-ons/SDK/Guides/XUL_Migration_Guide">XUL перемещение</a></dt> - <dd>A guide to <a href="/en-US/Add-ons/SDK/Guides/XUL_Migration_Guide">porting XUL add-ons to the SDK</a>. This guide includes a <a href="/en-US/Add-ons/SDK/Guides/XUL_vs_SDK">comparison of the two toolsets</a> and a <a href="/en-US/Add-ons/SDK/Guides/Porting_the_Library_Detector">working example</a> of porting a XUL add-on.</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="Справочник">Справочник</h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/High-Level_APIs">Высокоуровневый ИПП</a></dt> - <dd>Справочная документация для высокоуровневого ИПП в НРП.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tools">Справочник программ</a></dt> - <dd>Справочная документация для <a href="/en-US/Add-ons/SDK/Tools/cfx">cfx программы</a> используемая для разработки, тестирования, и упаковывания расширений, глобальная <a href="/en-US/Add-ons/SDK/Tools/console">console</a> используемая для протоколирования, и файл <a href="/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">Низкоуровневый ИПП</a></dt> - <dd>Справочная документация для низкоуровневого ИПП в НРП.</dd> -</dl> -</div> -</div> - -<p> </p> - -<div class="toppageup" id="js-toppageup" style="display: none;"> -<div class="toppageup-link"><span>наверх</span></div> - -<div class="toppageup-add" id="js-toppageup-add"><span>в закладки</span></div> -</div> diff --git a/files/ru/mozilla/add-ons/sdk/low-level_apis/index.html b/files/ru/mozilla/add-ons/sdk/low-level_apis/index.html deleted file mode 100644 index 8cd08458f0..0000000000 --- a/files/ru/mozilla/add-ons/sdk/low-level_apis/index.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -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/ru/mozilla/add-ons/sdk/low-level_apis/places_bookmarks/index.html b/files/ru/mozilla/add-ons/sdk/low-level_apis/places_bookmarks/index.html deleted file mode 100644 index 299e234fb2..0000000000 --- a/files/ru/mozilla/add-ons/sdk/low-level_apis/places_bookmarks/index.html +++ /dev/null @@ -1,595 +0,0 @@ ---- -title: places/bookmarks -slug: Mozilla/Add-ons/SDK/Low-Level_APIs/places_bookmarks -translation_of: Archive/Add-ons/Add-on_SDK/Low-Level_APIs/places_bookmarks ---- -<div class="note"> -<p>Unstable</p> -</div> - -<p><span class="seoSummary">Создание, изменение и удаление закладок.</span></p> - -<h2 id="Usage">Usage</h2> - -<p>Этот модуль экспортирует:</p> - -<ul> - <li>три конструктора: <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Bookmark(options)">Bookmark</a>, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Group(options)">Group</a>, and <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Separator(options)">Separator</a>, corresponding to the types of objects, referred to as <strong>bookmark items</strong>, in the Bookmarks database in Firefox</li> - <li>две дополнительные функции, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#save(bookmarkItems.2C_options)"><code>save()</code></a> для создания, обновения и удаления закладок, и <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#search(queries.2C_options)"><code>search()</code></a> для получения закладок соответствующих параметрам запроса.</li> -</ul> - -<p><code>save()</code> и <code>search()</code> асинхронные функции: they synchronously return a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#PlacesEmitter"><code>PlacesEmitter</code></a> object, which then asynchronously emits events as the operation progresses and completes.</p> - -<p>Each retrieved bookmark item represents only a snapshot of state at a specific time. The module does not automatically sync up a <code>Bookmark</code> instance with ongoing changes to that item in the database from the same add-on, other add-ons, or the user.</p> - -<h3 id="Примеры">Примеры</h3> - -<h4 id="Создание_новой_закладки">Создание новой закладки</h4> - -<pre class="brush: js">let { Bookmark, save } = require("sdk/places/bookmarks"); - -// Create a new bookmark instance, unsaved -let bookmark = Bookmark({ title: "Mozilla", url: "http://mozilla.org" }); - -// Attempt to save the bookmark instance to the Bookmarks database -// and store the emitter -let emitter = save(bookmark); - -// Listen for events -emitter.on("data", function (saved, inputItem) { - // on a "data" event, an item has been updated, passing in the - // latest snapshot from the server as `saved` (with properties - // such as `updated` and `id`), as well as the initial input - // item as `inputItem` - console.log(saved.title === inputItem.title); // true - console.log(saved !== inputItem); // true - console.log(inputItem === bookmark); // true -}).on("end", function (savedItems, inputItems) { - // Similar to "data" events, except "end" is an aggregate of - // all progress events, with ordered arrays as `savedItems` - // and `inputItems` -});</pre> - -<h4 id="Создание_нескольких_закладок_в_группе">Создание нескольких закладок в группе</h4> - -<pre class="brush: js">let { Bookmark, Group, save } = require("sdk/places/bookmarks"); - -let group = Group({ title: "Guitars" }); -let bookmarks = [ - Bookmark({ title: "Ran", url: "http://ranguitars.com", group: group }), - Bookmark({ title: "Ibanez", url: "http://ibanez.com", group: group }), - Bookmark({ title: "ESP", url: "http://espguitars.com", group: group }) -]; - -// Save `bookmarks` array -- notice we don't have `group` in the array, -// although it needs to be saved since all bookmarks are children -// of `group`. This will be saved implicitly. - -save(bookmarks).on("data", function (saved, input) { - // A data event is called once for each item saved, as well - // as implicit items, like `group` - console.log(input === group || ~bookmarks.indexOf(input)); // true -}).on("end", function (saves, inputs) { - // like the previous example, the "end" event returns an - // array of all of our updated saves. Only explicitly saved - // items are returned in this array -- the `group` won't be - // present here. - console.log(saves[0].title); // "Ran" - console.log(saves[2].group.title); // "Guitars" -});</pre> - -<h4 id="Поиск_закладок">Поиск закладок</h4> - -<p>Bookmarks can be queried with the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#search(queries.2C_options)"><code>search()</code></a> function, which accepts a query object or an array of query objects, as well as a query options object. Query properties are AND'd together within a single query object, but are OR'd together across multiple query objects.</p> - -<pre class="brush: js">let { search, UNSORTED } = require("sdk/places/bookmarks"); - -// Simple query with one object -search( - { query: "firefox" }, - { sort: "title" } -).on(end, function (results) { - // results matching any bookmark that has "firefox" - // in its URL, title or tag, sorted by title -}); - -// Multiple queries are OR'd together -search( - [{ query: "firefox" }, { group: UNSORTED, tags: ["mozilla"] }], - { sort: "title" } -).on("end", function (results) { - // Our first query is the same as the simple query above; - // all of those results are also returned here. Since multiple - // queries are OR'd together, we also get bookmarks that - // match the second query. The second query's properties - // are AND'd together, so results that are in the platform's unsorted - // bookmarks folder, AND are also tagged with 'mozilla', get returned - // as well in this query -});</pre> - -<h2 id="Globals">Globals</h2> - -<h3 id="Constructors">Constructors</h3> - -<h4 class="addon-sdk-api-name" id="Bookmark(options)"><code>Bookmark(options)</code></h4> - -<p>Creates an unsaved bookmark instance.</p> - -<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>The title for the bookmark. Required.</p> - </td> - </tr> - <tr> - <td>url</td> - <td>string</td> - <td> - <p>The URL for the bookmark. Required.</p> - </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>group</td> - <td>Group</td> - <td> - <p>The parent group that the bookmark lives under. Defaults to the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#UNSORTED">Bookmarks.UNSORTED</a> group.</p> - </td> - </tr> - <tr> - <td>index</td> - <td>number</td> - <td> - <p>The index of the bookmark within its group. Last item within the group by default.</p> - </td> - </tr> - <tr> - <td>tags</td> - <td>set</td> - <td> - <p>A set of tags to be applied to the bookmark.</p> - </td> - </tr> - </tbody> -</table> - -<h4 class="addon-sdk-api-name" id="Group(options)"><code>Group(options)</code></h4> - -<p>Creates an unsaved bookmark group instance.</p> - -<h5 id="Parameters_2">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>The title for the group. Required.</p> - </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>group</td> - <td>Group</td> - <td> - <p>The parent group that the bookmark group lives under. Defaults to the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#UNSORTED">Bookmarks.UNSORTED</a> group.</p> - </td> - </tr> - <tr> - <td>index</td> - <td>number</td> - <td> - <p>The index of the bookmark group within its parent group. Last item within the group by default.</p> - </td> - </tr> - </tbody> -</table> - -<h4 class="addon-sdk-api-name" id="Separator(options)"><code>Separator(options)</code></h4> - -<p>Creates an unsaved bookmark separator instance.</p> - -<h5 id="Parameters_3">Parameters</h5> - -<p><strong>options : object</strong><br> - 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>group</td> - <td>Group</td> - <td> - <p>The parent group that the bookmark group lives under. Defaults to the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#UNSORTED">Bookmarks.UNSORTED</a> group.</p> - </td> - </tr> - <tr> - <td>index</td> - <td>number</td> - <td> - <p>The index of the bookmark group within its parent group. Last item within the group by default.</p> - </td> - </tr> - </tbody> -</table> - -<h3 id="Functions">Functions</h3> - -<h4 class="addon-sdk-api-name" id="save(bookmarkItems_options)"><code>save(bookmarkItems, options)</code></h4> - -<p>Creating, saving, and deleting bookmarks are all done with the <code>save()</code> function. This function takes in any of:</p> - -<ul> - <li>a bookmark item (Bookmark, Group, Separator)</li> - <li>a duck-typed object (the relative properties for a bookmark item, in addition to a <code>type</code> property of <code>'bookmark'</code>, <code>'group'</code>, or <code>'separator'</code>)</li> - <li>an array of bookmark items.</li> -</ul> - -<p>All of the items passed in are pushed to the platform and are either created, updated or deleted.</p> - -<ul> - <li>adding items: if passing in freshly instantiated bookmark items or a duck-typed object, the item is created on the platform.</li> - <li>updating items: for an item referenced from a previous <code>save()</code> or from the result of a <code>search()</code> query, changing the properties and calling <code>save()</code> will update the item on the server.</li> - <li>deleting items: to delete a bookmark item, pass in a bookmark item with a property <code>remove</code> set to <code>true</code>.</li> -</ul> - -<p>The function returns a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#PlacesEmitter"><code>PlacesEmitter</code></a> that emits a <code>data</code> event for each item as it is saved, and an <code>end</code> event when all items have been saved.</p> - -<pre class="brush: js">let { Bookmark, Group } = require("sdk/places/bookmarks"); - -let myGroup = Group({ title: "My Group" }); -let myBookmark = Bookmark({ - title: "Moz", - url: "http://mozilla.com", - group: myGroup -}); - -save(myBookmark).on("data", function (item, inputItem) { - // The `data` event returns the latest snapshot from the - // host, so this is a new instance of the bookmark item, - // where `item !== myBookmark`. To match it with the input item, - // use the second argument, so `inputItem === myBookmark` - - // All explicitly saved items have data events called, as - // well as implicitly saved items. In this case, - // `myGroup` has to be saved before `myBookmark`, since - // `myBookmark` is a child of `myGroup`. `myGroup` will - // also have a `data` event called for it. -}).on("end", function (items, inputItems) { - // The `end` event returns all items that are explicitly - // saved. So `myGroup` will not be in this array, - // but `myBookmark` will be. - // `inputItems` matches the initial input as an array, - // so `inputItems[0] === myBookmark` -}); - -// Saving multiple bookmarks, as duck-types in this case - -let bookmarks = [ - { title: "mozilla", url: "http://mozilla.org", type: "bookmark" }, - { title: "firefox", url: "http://firefox.com", type: "bookmark" }, - { title: "twitter", url: "http://twitter.com", type: "bookmark" } -]; - -save(bookmarks).on("data", function (item, inputItem) { - // Each item in `bookmarks` has its own `data` event -}).on("end", function (results, inputResults) { - // `results` is an array of items saved in the same order - // as they were passed in. -});</pre> - -<h5 id="Parameters_4">Parameters</h5> - -<p><strong>bookmarkItems : bookmark|group|separator|array</strong><br> - A bookmark item (<a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Bookmark">Bookmark</a>, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Group">Group</a>, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Separator">Separator</a>), or an array of bookmark items to be saved.</p> - -<p><strong>options : object</strong><br> - 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>resolve</td> - <td>function</td> - <td> - <p>A resolution function that is invoked during an attempt to save a bookmark item that is not derived from the latest state from the platform. Invoked with two arguments, <code>mine</code> and <code>platform</code>, where <code>mine</code> is the item that is being saved, and <code>platform</code> is the current state of the item on the item. The object returned from this function is what is saved on the platform. By default, all changes on an outdated bookmark item overwrite the platform's bookmark item.</p> - </td> - </tr> - </tbody> -</table> - -<h5 id="Returns">Returns</h5> - -<p><strong>PlacesEmitter</strong> : Returns a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#PlacesEmitter">PlacesEmitter</a>.</p> - -<h4 class="addon-sdk-api-name" id="remove(items)"><code>remove(items)</code></h4> - -<p>A helper function that takes in a bookmark item, or an <code>Array</code> of several bookmark items, and sets each item's <code>remove</code> property to true. This does not remove the bookmark item from the database: it must be subsequently saved.</p> - -<pre class="brush: js">let { search, save, remove } = require("sdk/places/bookmarks"); - -search({ tags: ["php"] }).on("end", function (results) { - // The search returns us all bookmark items that are - // tagged with `"php"`. - - // We then pass `results` into the remove function to mark - // all items to be removed, which returns the new modified `Array` - // of items, which is passed into save. - save(remove(results)).on("end", function (results) { - // items tagged with `"php"` are now removed! - }); -})</pre> - -<h5 id="Parameters_5">Parameters</h5> - -<p><strong>items : Bookmark|Group|Separator|array</strong><br> - A bookmark item, or <code>Array</code> of bookmark items to be transformed to set their <code>remove</code> property to <code>true</code>.</p> - -<h5 id="Returns_2">Returns</h5> - -<p><strong>array</strong> : An array of the transformed bookmark items.</p> - -<h4 class="addon-sdk-api-name" id="search(queries_options)"><code>search(queries, options)</code></h4> - -<p>Queries can be performed on bookmark items by passing in one or more query objects, each of which is given one or more properties.</p> - -<p>Within each query object, the properties are AND'd together: so only objects matching all properties are retrieved. Across query objects, the results are OR'd together, meaning that if an item matches any of the query objects, it will be retrieved.</p> - -<p>For example, suppose we called <code>search()</code> with two query objects:</p> - -<pre class="brush: js">[{ url: "mozilla.org", tags: ["mobile"]}, -{ tags: ["firefox-os"]}]</pre> - -<p>This will return:</p> - -<ul> - <li>all bookmark items from mozilla.org that are also tagged "mobile"</li> - <li>all bookmark items that are tagged "firefox-os"</li> -</ul> - -<p>An <code>options</code> object may be used to determine overall settings such as sort order and how many objects should be returned.</p> - -<h5 id="Parameters_6">Parameters</h5> - -<p><strong>queries : object|array</strong><br> - An <code>Object</code> representing a query, or an <code>Array</code> of <code>Objects</code> representing queries. Each query object can take several properties, which are queried against the bookmarks database. Each property is AND'd together, meaning that bookmarks must match each property within a query object. Multiple query objects are then OR'd together.</p> - -<p><strong>options : object</strong><br> - 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>count</td> - <td>number</td> - <td> - <p>The number of bookmark items to return. If left undefined, no limit is set.</p> - </td> - </tr> - <tr> - <td>sort</td> - <td>string</td> - <td> - <p>A string specifying how the results should be sorted. Possible options are <code>'title'</code>, <code>'date'</code>, <code>'url'</code>, <code>'visitCount'</code>, <code>'dateAdded'</code> and <code>'lastModified'</code>.</p> - </td> - </tr> - <tr> - <td>descending</td> - <td>boolean</td> - <td> - <p>A boolean specifying whether the results should be in descending order. By default, results are in ascending order.</p> - </td> - </tr> - </tbody> -</table> - -<h3 id="Properties">Properties</h3> - -<h4 class="addon-sdk-api-name" id="MENU"><code>MENU</code></h4> - -<p>This is a constant, default <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Group"><code>Group</code></a> on the Firefox platform, the <strong>Bookmarks Menu</strong>. It can be used in queries or specifying the parent of a bookmark item, but it cannot be modified.</p> - -<h4 class="addon-sdk-api-name" id="TOOLBAR"><code>TOOLBAR</code></h4> - -<p>This is a constant, default <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Group"><code>Group</code></a> on the Firefox platform, the <strong>Bookmarks Toolbar</strong>. It can be used in queries or specifying the parent of a bookmark item, but it cannot be modified.</p> - -<h4 class="addon-sdk-api-name" id="UNSORTED"><code>UNSORTED</code></h4> - -<p>This is a constant, default <a href="/en-US/Add-ons/SDK/Low-Level_APIs/places_bookmarks#Group"><code>Group</code></a> on the Firefox platform, the <strong>Unsorted Bookmarks</strong> group. It can be used in queries or specifying the parent of a bookmark item, but it cannot be modified.</p> - -<h2 id="Bookmark">Bookmark</h2> - -<h3 id="Properties_2">Properties</h3> - -<h4 class="addon-sdk-api-name" id="title"><code>title</code></h4> - -<p>The bookmark's title.</p> - -<h4 class="addon-sdk-api-name" id="url"><code>url</code></h4> - -<p>The bookmark's URL.</p> - -<h4 class="addon-sdk-api-name" id="group"><code>group</code></h4> - -<p>The group instance that the bookmark lives under.</p> - -<h4 class="addon-sdk-api-name" id="index"><code>index</code></h4> - -<p>The index of the bookmark within its group.</p> - -<h4 class="addon-sdk-api-name" id="updated"><code>updated</code></h4> - -<p>A Unix timestamp indicating when the bookmark was last updated on the platform.</p> - -<h4 class="addon-sdk-api-name" id="tags"><code>tags</code></h4> - -<p>A <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set">Set</a> of tags that the bookmark is tagged with.</p> - -<h2 id="Group">Group</h2> - -<h3 id="Properties_3">Properties</h3> - -<h4 class="addon-sdk-api-name" id="title_2"><code>title</code></h4> - -<p>The bookmark group's title.</p> - -<h4 class="addon-sdk-api-name" id="group_2"><code>group</code></h4> - -<p>The group instance that the bookmark group lives under.</p> - -<h4 class="addon-sdk-api-name" id="index_2"><code>index</code></h4> - -<p>The index of the bookmark group within its group.</p> - -<h4 class="addon-sdk-api-name" id="updated_2"><code>updated</code></h4> - -<p>A Unix timestamp indicating when the bookmark was last updated on the platform.</p> - -<h2 id="Separator">Separator</h2> - -<h3 id="Properties_4">Properties</h3> - -<h4 class="addon-sdk-api-name" id="group_3"><code>group</code></h4> - -<p>The group instance that the bookmark group lives under.</p> - -<h4 class="addon-sdk-api-name" id="index_3"><code>index</code></h4> - -<p>The index of the bookmark group within its group.</p> - -<h4 class="addon-sdk-api-name" id="updated_3"><code>updated</code></h4> - -<p>A Unix timestamp indicating when the bookmark was last updated on the platform.</p> - -<h2 id="PlacesEmitter">PlacesEmitter</h2> - -<p>The <code>PlacesEmitter</code> is not exported from the module, but returned from the <code>save</code> and <code>search</code> functions. The <code>PlacesEmitter</code> inherits from <a href="/en-US/Add-ons/SDK/Low-Level_APIs/event_target"><code>event/target</code></a>, and emits <code>data</code>, <code>error</code>, and <code>end</code>.</p> - -<p><code>data</code> events are emitted for every individual operation (such as: each item saved, or each item found by a search query), whereas <code>end</code> events are emitted as the aggregate of an operation, passing an array of objects into the handler.</p> - -<h3 id="Events">Events</h3> - -<h4 class="addon-sdk-api-name" id="data"><code>data</code></h4> - -<p>The <code>data</code> event is emitted when a bookmark item that was passed into the <code>save</code> method has been saved to the platform. This includes implicit saves that are dependencies of the explicit items saved. For example, when creating a new bookmark group with two bookmark items as its children, and explicitly saving the two bookmark children, the unsaved parent group will also emit a <code>data</code> event.</p> - -<pre class="brush: js">let { Bookmark, Group, save } = require("sdk/places/bookmarks"); - -let group = Group({ title: "my group" }); -let bookmarks = [ - Bookmark({ title: "mozilla", url: "http://mozilla.com", group: group }), - Bookmark({ title: "w3", url: "http://w3.org", group: group }) -]; - -save(bookmarks).on("data", function (item) { - // This function will be called three times: - // once for each bookmark saved - // once for the new group specified implicitly - // as the parent of the two items -});</pre> - -<p>The <code>data</code> event is also called for <code>search</code> requests, with each result being passed individually into its own <code>data</code> event.</p> - -<pre class="brush: js">let { search } = require("sdk/places/bookmarks"); - -search({ query: "firefox" }).on("data", function (item) { - // each bookmark item that matches the query will - // be called in this function -});</pre> - -<h5 id="Arguments">Arguments</h5> - -<p><strong>Bookmark|Group|Separator</strong> : For the <code>save</code> function, this is the saved, latest snapshot of the bookmark item. For <code>search</code>, this is a snapshot of a bookmark returned from the search query.</p> - -<p><strong>Bookmark|Group|Separator|object</strong> : Only in <code>save</code> data events. The initial instance of the item that was used for the save request.</p> - -<h4 class="addon-sdk-api-name" id="error"><code>error</code></h4> - -<p>The <code>error</code> event is emitted whenever a bookmark item's save could not be completed.</p> - -<h5 id="Arguments_2">Arguments</h5> - -<p><strong>string</strong> : A string indicating the error that occurred.</p> - -<p><strong>Bookmark|Group|Separator|object</strong> : Only in <code>save</code> error events. The initial instance of the item that was used for the save request.</p> - -<h4 class="addon-sdk-api-name" id="end"><code>end</code></h4> - -<p>The <code>end</code> event is called when all bookmark items and dependencies have been saved, or an aggregate of all items returned from a search query.</p> - -<h5 id="Arguments_3">Arguments</h5> - -<p><strong>array</strong> : The array is an ordered list of the input bookmark items, replaced with their updated, latest snapshot instances (the first argument in the <code>data</code> handler), or in the case of an error, the initial instance of the item that was used for the save request (the second argument in the <code>data</code> or <code>error</code> handler).</p> diff --git a/files/ru/mozilla/add-ons/sdk/tools/console/index.html b/files/ru/mozilla/add-ons/sdk/tools/console/index.html deleted file mode 100644 index d28b31d127..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tools/console/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: console -slug: Mozilla/Add-ons/SDK/Tools/console -translation_of: Archive/Add-ons/Add-on_SDK/Tools/console ---- -<p><span class="seoSummary">Enables your add-on to log error, warning or informational messages.</span> If you have started Firefox for your add-on from the command line with <code>cfx run</code> or <code>cfx test</code> then these messages appear in the command shell you used. If the add-on has been installed in Firefox, then the messages appear in the <a href="/en-US/docs/Tools/Browser_Console">Browser Console</a>.</p> -<p>If you're developing your add-on using the <a href="https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/">Extension Auto-installer</a>, then the add-on is installed in Firefox, meaning that messages will appear in the Browser Console. But see the discussion of <a href="/en-US/Add-ons/SDK/Tools/console#Logging_Levels">logging levels</a>: by default, messages logged using <code>log()</code>, <code>info()</code>, <code>trace()</code>, or <code>warn()</code> won't be logged in these situations.</p> -<h2 id="Console_Methods">Console Methods</h2> -<p>All console methods except <code>exception()</code> and <code>trace()</code> accept one or more JavaScript objects as arguments and log them to the console. Depending on the console's underlying implementation and user interface, you may be able to examine the properties of non-primitive objects that are logged.</p> -<h3 id="console.debug(object_object_...)"><code>console.debug(<em>object</em>[, <em>object</em>, ...])</code></h3> -<p>Logs the arguments to the console, preceded by "debug:" and the name of your add-on:</p> -<pre class="brush: js">console.debug("This is a debug message");</pre> -<pre>debug: my-addon: This is a debug message -</pre> -<h3 id="console.error(object_object_...)"><code>console.error(<em>object</em>[, <em>object</em>, ...])</code></h3> -<p>Logs the arguments to the console, preceded by "error:" and the name of your add-on:<code> </code></p> -<pre class="brush: js">console.error("This is an error message");</pre> -<pre>error: my-addon: This is an error message -</pre> -<h3 id="console.exception(exception)"><code>console.exception(<em>exception</em>)</code></h3> -<p>Logs the given exception instance as an error, outputting information about the exception's stack traceback if one is available.</p> -<pre class="brush: js">try { - doThing(); -} catch (e) { - console.exception(e); -} - -function UserException(message) { - this.message = message; - this.name = "UserException"; -} - -function doThing() { - throw new UserException("Thing could not be done!"); -}</pre> -<pre>error: my-addon: An exception occurred. -UserException: Thing could not be done! -</pre> -<h3 id="console.info(object_object_...)"><code>console.info(<em>object</em>[, <em>object</em>, ...])</code></h3> -<p>A synonym for <code>console.log()</code>.</p> -<h3 id="console.log(object_object_...)"><code>console.log(<em>object</em>[, <em>object</em>, ...])</code></h3> -<p>Logs the arguments to the console, preceded by "info:" and the name of your add-on:</p> -<pre class="brush: js">console.log("This is an informational message");</pre> -<pre>info: my-addon: This is an informational message -</pre> -<h3 id="console.time(name)"><code>console.time(name)</code></h3> -<p>Starts a timer with a name specified as an input parameter. Up to 10,000 simultaneous timers can run on a given page.</p> -<h3 id="console.timeEnd(name)"><code>console.timeEnd(name)</code></h3> -<p>Stops the specified timer and logs the elapsed time in seconds since its start. See <a href="https://developer.mozilla.org/en-US/docs/Web/API/console#Timers">Timers</a>.</p> -<h3 id="console.trace()"><code>console.trace()</code></h3> -<p>Logs a stack trace at the point the function is called.</p> -<h3 id="console.warn(object_object_...)"><code>console.warn(<em>object</em>[, <em>object</em>, ...])</code></h3> -<p>Logs the arguments to the console, preceded by "warn:" and the name of your add-on:<code> </code></p> -<pre class="brush: js"><code>console.warn("This is a warning message");</code></pre> -<pre>warn: my-addon: This is a warning message -</pre> -<h2 id="Logging_Levels">Logging Levels</h2> -<p>Logging's useful, of course, especially during development. But the more logging there is, the more noise you see in the console output. Especially when debug logging shows up in a production environment, the noise can make it harder, not easier, to debug issues.</p> -<p>This is the problem that logging levels are designed to fix. The console defines a number of logging levels, from "more verbose" to "less verbose", and a number of different logging functions that correspond to these levels, which are arranged in order of "severity" from informational messages, through warnings, to errors.</p> -<p>At a given logging level, only calls to the corresponding functions and functions with a higher severity will have any effect.</p> -<p>For example, if the logging level is set to "info", then calls to <code>info()</code>, <code>log()</code>, <code>warn()</code>, and <code>error()</code> will all result in output being written. But if the logging level is "warn" then only calls to <code>warn()</code> and <code>error()</code> have any effect, and calls to <code>info()</code> and <code>log()</code> are simply discarded.</p> -<p>This means that the same code can be more verbose in a development environment than in a production environment - you just need to arrange for the appropriate logging level to be set.</p> -<p>The complete set of logging levels is given in the table below, along with the set of functions that will result in output at each level:</p> -<table class="standard-table"> - <tbody> - <tr> - <th>Level</th> - <th>Will log calls to:</th> - </tr> - <tr> - <td>all</td> - <td>Any console method</td> - </tr> - <tr> - <td>debug</td> - <td><code>debug(), error(), exception(), info(), log(), time(), timeEnd(), trace(), warn()</code></td> - </tr> - <tr> - <td>info</td> - <td><code>error(), exception(), info(), log(), time(), timeEnd(), trace(), warn()</code></td> - </tr> - <tr> - <td>warn</td> - <td><code>error(), exception(), warn()</code></td> - </tr> - <tr> - <td>error</td> - <td><code>error(), exception()</code></td> - </tr> - <tr> - <td>off</td> - <td>Nothing</td> - </tr> - </tbody> -</table> -<h3 id="Setting_the_Logging_Level">Setting the Logging Level</h3> -<p>The logging level defaults to "error".</p> -<p>There are two system preferences that can be used to override this default:</p> -<ul> - <li> - <p><strong>extensions.sdk.console.logLevel</strong>: if set, this determines the logging level for all installed SDK-based add-ons.</p> - </li> - <li> - <p><strong>extensions.</strong><em>extensionID</em><strong>.sdk.console.logLevel</strong>, where <em>extensionID</em> is an add-on's <a href="/en-US/Add-ons/SDK/Guides/Program_ID">Program ID</a>. If set, this determines the logging level for the specified add-on. This overrides the global preference if both preferences are set.</p> - </li> -</ul> -<p>Both these preferences can be set programmatically using the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/preferences_service"><code>preferences/service</code></a> API, or manually using <a href="http://kb.mozillazine.org/About:config">about:config</a>. The value for each preference is the desired logging level, given as a string.</p> -<p>When you run your add-on using <code>cfx run</code> or <code>cfx test</code>, the global <strong>extensions.sdk.console.logLevel</strong> preference is automatically set to "info". This means that calls to <code>console.log()</code> will appear in the console output.</p> -<p>When you install an add-on into Firefox, the logging level will be "error" by default (that is, unless you have set one of the two preferences). This means that messages written using <code>debug()</code>, <code>log()</code>, <code>info()</code>, <code>trace()</code>, and <code>warn()</code> will not appear in the console.</p> -<p>This includes add-ons being developed using the <a href="https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/">Extension Auto-installer</a>.</p> diff --git a/files/ru/mozilla/add-ons/sdk/tools/index.html b/files/ru/mozilla/add-ons/sdk/tools/index.html deleted file mode 100644 index b55c672f17..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tools/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Tools -slug: Mozilla/Add-ons/SDK/Tools -tags: - - NeedsTranslation - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/Tools ---- -<p>Articles listed here provide a reference for the SDK's tools:</p> -<p>{{ LandingPageListSubpages ("/en-US/Add-ons/SDK/Tools", 5) }}</p> diff --git a/files/ru/mozilla/add-ons/sdk/tools/jpm/index.html b/files/ru/mozilla/add-ons/sdk/tools/jpm/index.html deleted file mode 100644 index dbfacde500..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tools/jpm/index.html +++ /dev/null @@ -1,497 +0,0 @@ ---- -title: jpm -slug: Mozilla/Add-ons/SDK/Tools/jpm -translation_of: Archive/Add-ons/Add-on_SDK/Tools/jpm ---- -<div class="note"> -<p>Вы можете использовать <code>jpm</code> для Firefox 38 или более поздних версий.</p> - -<p>Данный материал относится только для jpm.</p> -</div> - -<p><span class="seoSummary">Это Node-ориентированная замена устаревшего <a href="/en-US/Add-ons/SDK/Tools/cfx">cfx</a>. Позволяет тестировать, запускать и создавать дополнения для Firefox.</span></p> - -<p>Смотри также <a href="/en-US/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29">jpm tutorial</a>.</p> - -<p>jpm вызывается через:</p> - -<pre class="brush: bash">jpm [command] [options] -</pre> - -<p>jpm поддерживает следующие глобальные опции:</p> - -<pre class="brush: bash">-h, --help - show a help message and exit --V, --version - print the jpm version number -</pre> - -<h2 id="Установка">Установка</h2> - -<p>jpm распространяется с помощью менеджера пакетов <a class="external external-icon" href="https://www.npmjs.org/package/jpm">npm</a>, поэтому чтобы установить jpm, вам необходимо предварительно установить менеджер пакетов npm, если вы этого ещё не сделали. npm входит в Node.js, поэтому чтобы установить npm - посетите <a class="external external-icon" href="http://nodejs.org/">nodejs.org</a> и нажмите кнопку INSTALL.</p> - -<p>После этого вы можете установить jpm, как и любой другой npm пакет:</p> - -<pre>npm install jpm -g</pre> - -<p>В зависимости от настроек и операционной системы, вам может потребоваться запустить его с правами администратора (Linux: Debian, Ubuntu, и т.п.):</p> - -<pre class="brush: bash">sudo npm install jpm -g</pre> - -<p>После установки введите в командной строке:</p> - -<pre class="brush: bash">jpm</pre> - -<p>Вы должны увидеть краткое описание доступных команд. Обратите внимание, что в отличие от cfx, jpm доступно из любой запущенной командной строки, в случае, если при установке jpm использовался флаг -g.</p> - -<h3 id="Проблемы">Проблемы?</h3> - -<p>Если у вас возникли проблемы, то обратитесь за помощью. Пользователи SDK и участники проекта готовы обсудить и предложения в <a class="external external-icon" href="http://groups.google.com/group/mozilla-labs-jetpack/topics">project mailing list</a>. Попробуйте поискать там, возможно похожий вопрос уже обсуждался там. Вы также можете обратиться к пользователям SDK в <a class="external external-icon" href="http://mibbit.com/?channel=%23jetpack&server=irc.mozilla.org">#jetpack</a> на <a class="external external-icon" href="http://irc.mozilla.org/">Mozilla's IRC network</a>.</p> - -<h2 id="Справочник_команд">Справочник команд</h2> - -<p>В jpm доступно шесть команд:</p> - -<table class="fullwidth-table standard-table"> - <tbody> - <tr> - <td style="width: 20%;"><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_init"><code>jpm init</code></a></td> - <td>Создать каркас дополнения в качестве отправной точки для создания вашего дополнения.</td> - </tr> - <tr> - <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_run"><code>jpm run</code></a></td> - <td>Запустить копию Firefox с установленным дополнением.</td> - </tr> - <tr> - <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_test"><code>jpm test</code></a></td> - <td>Запуск тестирования модуля вашего дополнения.</td> - </tr> - <tr> - <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_xpi"><code>jpm xpi</code></a></td> - <td>Упаковать дополнение в <a href="https://developer.mozilla.org/en/XPI">XPI</a> пакет, формат файла установки для дополнений Firefox.</td> - </tr> - <tr> - <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_post"><code>jpm post</code></a></td> - <td>Упаковать дополнение в пакет <a href="https://developer.mozilla.org/en/XPI">XPI</a> и отправить на URL.</td> - </tr> - <tr> - <td><a href="/en-US/Add-ons/SDK/Tools/jpm#jpm_watchpost"><code>jpm watchpost</code></a></td> - <td>Упаковывать дополнение в пакет <a href="https://developer.mozilla.org/en/XPI">XPI</a> и отправлять на URL при каждом изменении файла.</td> - </tr> - </tbody> -</table> - -<h3 id="jpm_init">jpm init</h3> - -<p>Данная команда инициализирует новое дополнение, с нуля.</p> - -<p>Для этого создайте новый каталог, перейдите в него и запустите <code>jpm init</code>.</p> - -<pre class="brush: bash">mkdir my-addon -cd my-addon -jpm init</pre> - -<p>Вам будет предложено указать некоторую информацию о вашем дополнении: данная информация будет использована для создания файла настроек дополнения <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json">package.json</a>.</p> - -<ul> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#title">title</a></li> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#name">name</a>: По умолчанию это имя каталога, в котором была запущена команда jpm init. За исключнием случаев, когда заполненно поле <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#id"><code>id</code></a> в файле package.json, тогда jpm добавит указатель "@" перед именем и использует в качестве него значение поля <a href="https://developer.mozilla.org/en-US/Add-ons/Install_Manifests#id"><code>id</code> field in the add-on's install manifest</a>.</li> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#version">version</a></li> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#description">description</a></li> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#main">entry point</a> (which maps to "main" in package.json)</li> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#author">author</a></li> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#engines">engines</a> (supported applications)</li> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json#license">license</a></li> -</ul> - -<p>Большинство из этих полей имеют значения по умолчанию, который указан в скобках после вопроса. Если вы просто нажмите Enter, то в настройках будет указано значение по умолчанию.</p> - -<p>После того как вы укажете значения или выберите значение по умолчанию для этих свойств, вам будет показано полное содержание "package.json" и предложено принять его.</p> - -<p>После jpm создаст каркас дополнения в качестве отправной точки для разрабатываемого вами дополнения, со следующей структурой файлов:</p> - -<ul class="directory-tree"> - <li>my-addon - <ul> - <li>index.js</li> - <li>package.json</li> - <li>test - <ul> - <li>test-index.js</li> - </ul> - </li> - </ul> - </li> -</ul> - -<h3 id="jpm_run">jpm run</h3> - -<p>Эта команда запускает новый экземпляр Firefox с подключенным дополнением:</p> - -<pre class="brush: bash">jpm run</pre> - -<p><code>jpm run</code> принимает следующие значения:</p> - -<table class="fullwidth-table standard-table"> - <tbody> - <tr> - <td style="width: 30%;"><code>-b --binary BINARY</code></td> - <td> - <p>Use the version of Firefox specified in BINARY. BINARY may be specified as a full path or as a path relative to the current directory.</p> - - <pre class="brush: bash"> -jpm run -b /path/to/Firefox/Nightly</pre> - See <a href="/en-US/Add-ons/SDK/Tools/jpm#Selecting_a_browser_version">Selecting a browser version</a>.</td> - </tr> - <tr> - <td><code>--binary-args CMDARGS</code></td> - <td> - <p>Pass <a href="/en-US/docs/Mozilla/Command_Line_Options">extra arguments</a> to Firefox.</p> - - <p>For example, to pass the <code>-jsconsole</code> argument to Firefox, which will launch the <a href="/en-US/docs/Tools/Browser_Console">Browser Console</a>, try the following:</p> - - <pre class="brush: bash"> -jpm run --binary-args -jsconsole</pre> - - <p>To pass multiple arguments, or arguments containing spaces, quote them:</p> - - <pre class="brush: bash"> -jpm run --binary-args '-url mzl.la -jsconsole'</pre> - </td> - </tr> - <tr> - <td><code>--debug</code></td> - <td>Run the <a href="/en-US/Add-ons/Add-on_Debugger">add-on debugger</a> attached to the add-on.</td> - </tr> - <tr> - <td><code>-o --overload PATH</code></td> - <td> - <p>Rather than use the SDK modules built into Firefox, use the modules found at PATH. If <code>-o</code> is specified and PATH is omitted, jpm will look for the JETPACK_ROOT environment variable and use its value as the path.</p> - - <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Overloading_the_built-in_modules">Overloading the built-in modules</a> for more information.</p> - </td> - </tr> - <tr> - <td><code>-p --profile=<code> PROFILE</code></code></td> - <td> - <p>By default, jpm uses a clean temporary Firefox <a href="http://support.mozilla.com/en-US/kb/profiles">profile</a> each time you call jpm run. Use the <code>--profile</code> option to instruct jpm to launch Firefox with an existing profile.</p> - - <p>The PROFILE value may be a profile name or the path to the profile.</p> - - <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Using_profiles">Using profiles</a> for more information.</p> - </td> - </tr> - <tr> - <td><code>-v --verbose</code></td> - <td>Verbose operation.</td> - </tr> - <tr> - <td><code>--no-copy</code></td> - <td> - <div class="warning">Use with caution because <code>jpm run|test</code> changes many preferences, never use with your main profile.</div> - - <div class="note">This only applies when <code>--profile</code> is used.</div> - Disables the copying of the profile used, which allows one to reuse a profile.</td> - <td> </td> - </tr> - </tbody> -</table> - -<h3 id="jpm_test">jpm test</h3> - -<p>Команда запускает тестирование дополнения. Происходит следующее:</p> - -<ul> - <li>Обзор каталога с именем "test" в корневом каталоге дополнения</li> - <li>Открывается каждый файл, имя которого начинается с "test-" в этом каталоге (обратите внимание на дефис после слова "test" в имени jpm файла - в тест будет включён файл вида "test-myCode.js", но исключены файлы вида "test_myCode.js" или "testMyCode.js"</li> - <li>Вызываются все функции, извлечённые из файла, имя которого начинается с "test"</li> -</ul> - -<pre class="brush: bash">jpm test -</pre> - -<p>See the <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Unit_testing">tutorial on unit testing</a> and the <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/test_assert">reference documentation for the <code>assert</code> module</a> for more details on this.</p> - -<p><code>jpm test</code> accepts the following options:</p> - -<table class="fullwidth-table standard-table"> - <tbody> - <tr> - <td><code>-b --binary BINARY</code></td> - <td> - <p>Use the version of Firefox specified in BINARY. BINARY may be specified as a full path or as a path relative to the current directory.</p> - - <pre class="brush: bash"> -jpm test -b /path/to/Firefox/Nightly</pre> - - <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Selecting_a_browser_version">Selecting a browser version</a>.</p> - </td> - </tr> - <tr> - <td><code>--binary-args CMDARGS</code></td> - <td> - <p>Pass <a href="http://kb.mozillazine.org/Command_line_arguments">extra arguments</a> to Firefox.</p> - - <p>For example, to pass the <code>-jsconsole</code> argument to Firefox, which will launch the <a href="/en-US/docs/Tools/Browser_Console">Browser Console</a>, try the following:</p> - - <pre class="brush: bash"> -jpm test --binary-args -jsconsole</pre> - - <p>To pass multiple arguments, or arguments containing spaces, quote them:</p> - - <pre class="brush: bash"> -jpm test --binary-args '-url mzl.la -jsconsole'</pre> - </td> - </tr> - <tr> - <td><code>--debug</code></td> - <td>Run the <a href="/en-US/Add-ons/Add-on_Debugger">add-on debugger</a> attached to the add-on.</td> - </tr> - <tr> - <td style="width: 30%;"><code>-f --filter FILE[:TEST]</code></td> - <td> - <p>Only run tests whose filenames match FILE and optionally match TEST, both regexps.</p> - - <pre class="brush: bash"> -jpm test --filter base64:btoa</pre> - - <p>The above command only runs tests in files whose names contain "base64", and in those files only runs tests whose names contain "btoa".</p> - </td> - </tr> - <tr> - <td style="width: 30%;"><code>-o --overload PATH</code></td> - <td> - <p>Rather than use the SDK modules built into Firefox, use the modules found at PATH. If <code>-o</code> is specified and PATH is omitted, jpm will look for the JETPACK_ROOT environment variable and use its value as the path.</p> - - <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Overloading_the_built-in_modules">Overloading the built-in modules</a> for more information.</p> - </td> - </tr> - <tr> - <td style="width: 30%;"><code>-p --profile<code> PROFILE</code></code></td> - <td> - <p>By default, jpm uses a clean temporary Firefox <a href="http://support.mozilla.com/en-US/kb/profiles">profile</a> each time you call jpm run. Use the <code>--profile</code> option to instruct jpm to launch Firefox with an existing profile.</p> - - <p>The PROFILE value may be a profile name or the path to the profile.</p> - - <p>See <a href="/en-US/Add-ons/SDK/Tools/jpm#Using_profiles">Using profiles</a> for more information.</p> - </td> - </tr> - <tr> - <td><code>--stop-on-error</code></td> - <td> - <p>By default jpm test keeps running tests even after tests fail. Specify <code>--stop-on-error</code> to stop running tests after the first failure:</p> - - <pre class="brush: bash"> -jpm test --stop-on-error</pre> - </td> - </tr> - <tr> - <td><code>--tbpl</code></td> - <td>Print test output in <a href="https://treeherder.mozilla.org/">Treeherder</a> format</td> - </tr> - <tr> - <td><code>--times NUMBER</code></td> - <td> - <p>Run tests NUMBER of times:</p> - - <pre class="brush: bash"> -jpm test --times 2</pre> - </td> - </tr> - <tr> - <td><code>-v --verbose</code></td> - <td>Verbose operation.</td> - </tr> - <tr> - <td><code>--no-copy</code></td> - <td> - <div class="warning">Use with caution because <code>jpm run|test</code> changes many preferences, never use with your main profile.</div> - - <div class="note">This only applies when <code>--profile</code> is used.</div> - Disables the copying of the profile used, which allows one to reuse a profile.</td> - </tr> - </tbody> -</table> - -<h3 id="jpm_xpi">jpm xpi</h3> - -<p>Эта команда собирает дополнение в пакет XPI. Это формат дополнений, которые можно легко установить Mozilla.</p> - -<pre class="brush: bash">jpm xpi</pre> - -<p>It looks for a file called <code>package.json</code> in the current directory and creates the corresponding XPI file. It ignores any ZIPs or XPIs in the add-on's root, and any test files.</p> - -<p>Once you have built an XPI file you can distribute your add-on by submitting it to <a href="http://addons.mozilla.org">addons.mozilla.org</a>.</p> - -<p><code>jpm xpi</code> accepts the following option:</p> - -<table class="fullwidth-table standard-table"> - <tbody> - <tr> - <td><code>-v --verbose</code></td> - <td> - <p>Verbose operation:</p> - - <pre class="brush: bash"> -jpm xpi -v</pre> - </td> - </tr> - </tbody> -</table> - -<h3 id="jpm_post">jpm post</h3> - -<p>This command packages the add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file, the posts it to some url.</p> - -<pre class="brush: bash">jpm post</pre> - -<p>It looks for a file called <code>package.json</code> in the current directory and creates a XPI file with which to post to the <code>--post-url</code>.</p> - -<p><code>jpm post</code> accepts the following options:</p> - -<table class="fullwidth-table standard-table"> - <tbody> - <tr> - <td><code>--post-url URL</code></td> - <td> - <p>The url to post the extension to after creating a XPI.</p> - - <pre class="brush: bash"> -jpm post --post-url http://localhost:8888/</pre> - - <p>See <a href="https://www.npmjs.com/package/jpm#using-post-and-watchpost">Using Post and Watchpost</a> for more information.</p> - </td> - </tr> - <tr> - <td><code>-v --verbose</code></td> - <td> - <p>Verbose operation:</p> - - <pre class="brush: bash"> -jpm post --post-url http://localhost:8888/ -v</pre> - </td> - </tr> - </tbody> -</table> - -<h3 id="jpm_watchpost">jpm watchpost</h3> - -<p>This command packages the add-on as an <a href="https://developer.mozilla.org/en/XPI">XPI</a> file, the posts it to some url whenever a file in the current working directory changes.</p> - -<pre class="brush: bash">jpm watchpost</pre> - -<p>Creates a XPI whenever a file in the current working directory changes and posts that to the <code>--post-url</code>.</p> - -<p><code>jpm watchpost</code> accepts the following options:</p> - -<table class="fullwidth-table standard-table"> - <tbody> - <tr> - <td><code>--post-url URL</code></td> - <td> - <p>The url to post the extension to after creating a XPI.</p> - - <pre class="brush: bash"> -jpm watchpost --post-url http://localhost:8888/</pre> - - <p>See <a href="https://www.npmjs.com/package/jpm#using-post-and-watchpost">Using Post and Watchpost</a> for more information.</p> - </td> - </tr> - <tr> - <td><code>-v --verbose</code></td> - <td> - <p>Verbose operation:</p> - - <pre class="brush: bash"> -jpm watchpost --post-url http://localhost:8888/ -v</pre> - </td> - </tr> - </tbody> -</table> - -<h2 id="Techniques">Techniques</h2> - -<h3 id="Selecting_a_browser_version">Selecting a browser version</h3> - -<p>By default, <code>jpm run</code> and <code>jpm test</code> will run the release version of Firefox. You can instruct jpm to use a different version in one of two ways:</p> - -<ul> - <li> - <p>you can use the <code>-b</code> or <code>--binary</code> option to instruct jpm to run a different version of Firefox. You can supply a path to a specific binary:</p> - - <pre class="brush: bash">jpm run -b /path/to/Firefox/Nightly</pre> - - <p>As a shorthand for this, you can pass "nightly", "aurora", "beta", or "firefox" and jpm will look in the default location for these Firefox versions:</p> - - <pre class="brush: bash">jpm run -b nightly</pre> - </li> - <li> - <p>you can set the <code>JPM_FIREFOX_BINARY</code> environment variable with the path to the version of Firefox you want to run. When you invoke <code>jpm run</code> or <code>jpm test</code> without the <code>-b</code> option, jpm will first check <code>JPM_FIREFOX_BINARY</code>, and use this as the path if it is set.</p> - </li> -</ul> - -<h3 id="Using_.jpmignore_to_ignore_files">Using <code>.jpmignore</code> to ignore files</h3> - -<p>Using <code>.jpmignore</code> is similar to using <code>.gitignore</code> with <code>git</code>, <code>.hgignore</code> with Mercurial, or <code>.npmignore</code> with <code>npm</code>. By using this file you can let <code>jpm</code> know which files you would like it to ignore when building a <code>.xpi</code> file with <code>jpm xpi</code>.</p> - -<p>Here is an example:</p> - -<pre class="brush: bash"># Ignore .DS_Store files created by mac -.DS_Store - -# Ignore any zip or xpi files -*.zip -*.xpi -</pre> - -<p>A <code>.jpmignore</code> file with the above contents would ignore all zip files and <code>.DS_Store</code> files from the xpi generated by <code>jpm xpi</code>.</p> - -<h3 id="Using_profiles_2"><a name="Using_profiles">Using profiles</a></h3> - -<p>By default, <code>jpm run</code> uses a new profile each time it is executed. This means that any profile-specific data entered from one run of <code>jpm</code> will not, by default, be available in the next run.</p> - -<p>This includes, for example, any extra add-ons you installed, or your history, or any data stored using the <a href="/en-US/Add-ons/SDK/High-Level_APIs/simple-storage">simple-storage</a> API.</p> - -<p>To make <code>jpm</code> use a specific profile, pass the <code>--profile</code> option, specifying the name of the profile you wish to use, or the path to the profile.</p> - -<pre class="brush: bash">jpm run --profile boogaloo -</pre> - -<pre class="brush: bash">jpm run --profile path/to/boogaloo</pre> - -<p>If you supply <code>--profile</code> but its argument is not the name of or path to an existing profile, jpm will open the <a href="https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles">profile manager</a>, enabling you to select and existing profile or create a new one:</p> - -<pre class="brush: bash">jpm run --profile i-dont-exist</pre> - -<h3 id="Developing_without_browser_restarts">Developing without browser restarts</h3> - -<p>Because <code>jpm run</code> restarts the browser each time you invoke it, it can be a little cumbersome if you are making very frequent changes to an add-on. An alternative development model is to use the <a href="https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/" rel="noreferrer">Extension Auto-Installer</a> add-on: this listens for new XPI files on a specified port and installs them automatically. That way you can test new changes without needing to restart the browser:</p> - -<ul> - <li>make a change to your add-on</li> - <li>run <code>jpm post --post-url http://localhost:8888/</code>, to make a xpi and post it.</li> -</ul> - -<p>You could even automate this workflow with a simple script. For example:</p> - -<pre class="brush: bash">jpm watchpost --post-url http://localhost:8888/ -</pre> - -<p>Note that the logging level defined for the console is different when you use this method, compared to the logging level used when an add-on is run using <code>jpm run</code>. This means that if you want to see output from <a href="/en-US/Add-ons/SDK/Tutorials/Logging" rel="noreferrer"><code>console.log()</code></a> messages, you'll have to tweak a setting. See the documentation on <a href="/en-US/Add-ons/SDK/Tools/console#Logging_Levels" rel="noreferrer">logging levels</a> for the details on this.</p> - -<h3 id="Overloading_the_built-in_modules">Overloading the built-in modules</h3> - -<p>The SDK modules you use to implement your add-on are built into Firefox. When you run or package an add-on using <code>jpm run</code> or <code>jpm xpi</code>, the add-on will use the versions of the modules in the version of Firefox that hosts it.</p> - -<p>As an add-on developer, this is usually what you want. But if you're developing the SDK modules themselves, of course, it isn't. In this case you need to:</p> - -<ul> - <li>get a local copy of the SDK modules that you want: this usually means checking out the SDK from its <a href="https://github.com/mozilla/addon-sdk" rel="noreferrer">GitHub repo</a></li> - <li>set the <code>JETPACK_ROOT</code> environment variable to your local copy</li> - <li>pass the <code>-o</code> option to <code>jpm run</code> or <code>jpm xpi</code>:</li> -</ul> - -<pre>jpm run -o -</pre> - -<p>This instructs jpm to use the local copies of the SDK modules, not the ones in Firefox. If you don't want to set the <code>JETPACK_ROOT</code> environment variable, you can pass the location of your copy of the SDK modules along with <code>-o</code>:</p> - -<pre>jpm run -o "/path/to/SDK/"</pre> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html deleted file mode 100644 index d9453e9767..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/getting_started_(jpm)/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Создание простого Add-on (jpm) -slug: Mozilla/Add-ons/SDK/Tutorials/Getting_Started_(jpm) -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Getting_Started_(jpm) ---- -<div class="note"> -<p>The Add-on SDK includes a command-line tool that you use to initialize, run, test, and package add-ons. The current tool is called jpm, and is based on <a href="http://nodejs.org/">Node.js</a>. It replaces the old cfx tool.</p> - -<p>You can use jpm from Firefox 38 onwards.</p> - -<p>This article describes how to develop using jpm.</p> -</div> - -<p>This tutorial walks through creating a simple add-on using the SDK.</p> - -<h2 id="Prerequisites">Prerequisites</h2> - -<p>To create add-ons for Firefox using the SDK, you'll need:</p> - -<ul> - <li>Firefox version 38 or later. If you need to work with earlier versions of Firefox, you'll need to use the old cfx tool. See instructions for <a href="/en-US/Add-ons/SDK/Tutorials/Getting_started">getting started with cfx</a>.</li> - <li>the command-line jpm tool. See the instructions for <a href="/en-US/Add-ons/SDK/Tools/jpm#Installation">installing jpm</a>. Once you've done that, you'll be looking at a command prompt.</li> -</ul> - -<h2 id="Initializing_an_empty_add-on">Initializing an empty add-on</h2> - -<p>In the command prompt, create a new directory. Navigate to it, type <code>jpm init</code>, and hit enter:</p> - -<pre>mkdir my-addon -cd my-addon -jpm init -</pre> - -<p>You'll then be asked to supply some information about your add-on: this will be used to create your add-on's <a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a> file. For now, just press Enter to accept the default for each property. For more information on <code>jpm init</code>, see the <a href="/en-US/Add-ons/SDK/Tools/jpm#Command_reference">jpm command reference</a>.</p> - -<p>Once you've supplied a value or accepted the default for these properties, you'll be shown the complete contents of "package.json" and asked to accept it.</p> - -<h2 id="Implementing_the_add-on">Implementing the add-on</h2> - -<p>Now you can write the add-on's code. Unless you've changed the value of "entry point" ("<a href="/en-US/Add-ons/SDK/Tools/package_json#main">main</a>" in package.json), this goes in "index.js" file in the root of your add-on. This file was created for you in the previous step. Open it and add the following code:</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 that "entry point" defaults to "index.js" in jpm, meaning that your main file is "index.js", and it is found directly in your add-on's root.</p> - -<p>In cfx, the entry point defaults to "main.js", and is located in the "lib" directory under the add-on's root.</p> -</div> - -<p>Save the file.</p> - -<p>Next, create a directory called "data" in your add-on's root, and save these three icon files to the "data" directory:</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>Back at the command prompt, type:</p> - -<pre>jpm run</pre> - -<p>This is the jpm command to run a new instance of Firefox with your add-on installed.</p> - -<p>If Firefox can not be located, you may need to provide the path to it (example in Ubuntu):</p> - - -<pre>jpm run -b /usr/bin/firefox</pre> - -<p>When Firefox launches, in the top-right corner of the browser you'll see an icon with the Firefox logo. Click the icon, and a new tab will open with <a href="http://www.mozilla.org/" rel="noreferrer">http://www.mozilla.org/</a> loaded into it.</p> - -<p>That's all this add-on does. It uses two SDK modules: the <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> module, which enables you to add buttons to the browser, and the <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a> module, which enables you to perform basic operations with tabs. In this case, we've created a button whose icon is the Firefox icon, and added a click handler that loads the Mozilla home page in a new 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;">Try editing this file. For example, we could change the page that gets loaded:</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>At the command prompt, execute <code>jpm run</code> again. This time clicking it takes you to <a href="https://developer.mozilla.org/">https://developer.mozilla.org/</a>.</p> - -<h2 id="Packaging_the_add-on">Packaging the add-on</h2> - -<p>When you've finished the add-on and are ready to distribute it, you'll need to package it as an XPI file. This is the installable file format for Firefox add-ons. You can distribute XPI files yourself or publish them to <a href="https://addons.mozilla.org" rel="noreferrer">https://addons.mozilla.org</a> so other users can download and install them.</p> - -<p>To build an XPI, just execute the command <code>jpm xpi</code> from the add-on's directory:</p> - -<pre>jpm xpi -</pre> - -<p>You should see a message like:</p> - -<pre>JPM info Successfully created xpi at /path/to/getting-started/@getting-started.xpi -</pre> - -<p>To test that this worked, try installing the XPI file in your own Firefox installation. You can do this by pressing the Ctrl+O key combination (Cmd+O on Mac) from within Firefox, or selecting the "Open" item from Firefox's "File" menu. This will bring up a file selection dialog: navigate to the "@getting-started.xpi" file, open it and follow the prompts to install the add-on.</p> - -<h2 id="Summary">Summary</h2> - -<p>In this tutorial we've built and packaged an add-on using three commands:</p> - -<ul> - <li><code>jpm init</code> to initialize an empty add-on template</li> - <li><code>jpm run</code> to run a new instance of Firefox with the add-on installed, so we can try it out</li> - <li><code>jpm xpi</code> to package the add-on into an XPI file for distribution</li> -</ul> - -<p>These are the three main commands you'll use when developing SDK add-ons. There's comprehensive <a href="/en-US/Add-ons/SDK/Tools/jpm" rel="noreferrer">reference documentation</a> covering all the commands you can use and all the options they take.</p> - -<p>The add-on code itself uses two SDK modules, <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> and <a href="/en-US/Add-ons/SDK/High-Level_APIs/tabs" rel="noreferrer">tabs</a>. There's reference documentation for all the <a href="/en-US/Add-ons/SDK/High-Level_APIs" rel="noreferrer">high-level</a> and <a href="/en-US/Add-ons/SDK/Low-Level_APIs" rel="noreferrer">low-level</a> APIs in the SDK.</p> - -<h2 id="What's_next">What's next?</h2> - -<p>To get a feel for some of the things you can do with the SDK APIs, try working through some of the <a href="/en-US/Add-ons/SDK/Tutorials" rel="noreferrer">tutorials</a>.</p> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/index.html deleted file mode 100644 index 277c5573d9..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/index.html +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Tutorials -slug: Mozilla/Add-ons/SDK/Tutorials -tags: - - NeedsTranslation - - TopicStub -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials ---- -<p>Эта страница содержит практические статьи о том как выполнять конкретные задачи используя SDK.</p> - -<hr> -<h3 id="Начало_работы"><a name="getting-started">Начало работы</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Installation">Установка </a></dt> - <dd>Скачивание, установка и инициализация <span class="_Tgc">комплекта средств разработки</span> (SDK) для Windows, OS X и Linux.</dd> -</dl> - -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Troubleshooting">Исправление проблем </a></dt> - <dd>Несколько указаний для фиксации общих пролбем и получение дополнительной помощи.</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Getting_started_with_cfx">Создание простого дополнения (Add-on) </a></dt> - <dd>Пошаговое руководство по созданию простого дополнения при помощи SDK и jpm.</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="Создание_пользовательского_интерфейса"><a name="create-user-interfaces">Создание пользовательского интерфейса</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Adding_a_Button_to_the_Toolbar">Добавление кнопи панели инструментов </a></dt> - <dd>Прикрепление кнопки к панели инструментов дополнений Firefox.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">Добавление элементов меню Firefox </a></dt> - <dd>Добавление элементов в основные меню Firefox.</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Display_a_Popup">Отображение высплывающего окна (popup) </a></dt> - <dd>Отображение всплывающего диалогового окна и его реализация с помощью HTML и JavaScript.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Context_Menu_Item">Добавление элемента контекстного меню</a></dt> - <dd>Добавление элементов контекстных меню Firefox.</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="Взаимодействие_с_браузером"><a name="interact-with-the-browser">Взаимодействие с браузером</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Open_a_Web_Page">Загрузка вебстраниц</a></dt> - <dd>Загрузка вебстраниц в новой вкладке или новом окне с использованием модуля вкладок (tabs module), и доступ к их содержимому.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Listen_for_Page_Load">Отслеживание загрузки страниц </a></dt> - <dd>Использование модуля вкладок (tabs module) для получения оповещений о загрузке новых вебстраниц и доступа к их содержимому.</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/List_Open_Tabs">Получение списка открытых вкладок</a></dt> - <dd>Использование модуля вкладок (tabs module) для перебора открытых вкладок и доступа к их содержимому.</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="Изменение_вебстраниц"><a name="modify-web-pages">Изменение вебстраниц</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">Изменение вебстраниц на основе URL </a></dt> - <dd>Создание фильтров для вебстраниц на основе их URL: всякий раз, когда загрузится вебстраница, чей URL соответствует фильтру, на ней выполнится заданный сценарий.</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Modifying_the_Page_Hosted_by_a_Tab">Изменение активной вебстраницы </a></dt> - <dd>Динамическая загрузка сценария на текущую активную вебстраницу.</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="Техники_разработки"><a name="development-techniques">Техники разработки</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Logging">Логгирование </a></dt> - <dd>Вывод сообщений в консоль для диагностики.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Creating_reusable_modules">Создание повторно используемых модулей </a></dt> - <dd>Структурирование дополнения в отдельные модули, чтобы упростить разработку, отладку и поддержку. Создание повторно используемых пакетов, содержащих ваши модули, чтобы другие разработчики могли их использовать.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Unit_testing">Модульное тестирование </a></dt> - <dd>Написание и запуск модульных тестов с использованием тестовой среды SDK.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Chrome_authority">Полномочия Chrome </a></dt> - <dd>Получение доступа к объекту Components, позволит вашему дополнению загружать и использовать любой объект XPCOM.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Creating_event_targets">Создание целей события </a></dt> - <dd>Включение объектов вашего определения для выпуска собственных событий.</dd> -</dl> -</div> - -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Listening_for_load_and_unload">Отслеживание загрузки и выгрузки </a></dt> - <dd>Получение уведомлений, когда Firefox загрузил или выгрузил ваше дополнение и передача аргументов вашему дополнению из командной строки.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Add_a_Menu_Item_to_Firefox">Использование сторонних модулей </a></dt> - <dd>Установка и использование дополнительных модулей не входящих в SDK.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/l10n">Локализация </a></dt> - <dd>Написание локализуемого кода.</dd> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Mobile_development">Мобильная разработка </a></dt> - <dd><span class="short_text" id="result_box" lang="ru"><span class="alt-edited">Разработка дополнений для Firefox Mobile на Android.</span></span></dd> - <dt><a href="/en-US/Add-ons/Add-on_Debugger">Отладчик дополнения</a></dt> - <dd>Отладка JavaScript вашего дополнения.</dd> -</dl> -</div> -</div> - -<hr> -<h3 id="Объединение"><a name="putting-it-together">Объединение</a></h3> - -<div class="column-container"> -<div class="column-half"> -<dl> - <dt><a href="/en-US/Add-ons/SDK/Tutorials/Annotator">Аннотация дополнения </a></dt> - <dd><span id="result_box" lang="ru"><span>Пошаговое руководство относительно сложного дополнения.</span></span></dd> -</dl> -</div> -</div> - -<p> </p> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/installation/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/installation/index.html deleted file mode 100644 index 48b8923923..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/installation/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Installation -slug: Mozilla/Add-ons/SDK/Tutorials/Installation -translation_of: Mozilla/Add-ons/SDK/Tools/jpm#Installation ---- -<h2 id="Prerequisites">Prerequisites</h2> -<p>To develop with the Add-on SDK, you'll need:</p> -<ul> - <li><a href="http://www.python.org/">Python</a> 2.5, 2.6 or 2.7. Note that versions 3.x of Python are not supported on any platform. Make sure that Python is in your path.</li> - <li>Firefox.</li> - <li>The SDK itself: you can obtain the latest stable version of the SDK as a <a href="https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/jetpack-sdk-latest.tar.gz">tarball</a> or a <a href="https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/jetpack-sdk-latest.zip">zip file</a>.</li> -</ul> -<p>Alternatively, if you use Firefox Nightly, you can get the latest development version from its <a href="https://github.com/mozilla/addon-sdk">GitHub repository</a>.</p> -<h2 id="Installation_on_Mac_OS_X_Linux">Installation on Mac OS X / Linux</h2> -<p>Extract the file contents wherever you choose, and navigate to the root directory of the SDK with a shell/command prompt. For example:</p> -<pre>tar -xf addon-sdk.tar.gz -cd addon-sdk -</pre> -<p>Then run if you're a Bash user (most people are):</p> -<pre>source bin/activate -</pre> -<p>And if you're a non-Bash user, you should run:</p> -<pre>bash bin/activate -</pre> -<p>Your command prompt should now have a new prefix containing the name of the SDK's root directory:</p> -<pre>(addon-sdk)~/mozilla/addon-sdk > -</pre> -<h2 id="Installation_on_Mac_using_Homebrew">Installation on Mac using Homebrew</h2> -<p>If you're a Mac user, you can instead choose to use <a href="http://brew.sh/">Homebrew</a> to install the SDK, using the following command:</p> -<pre>brew install mozilla-addon-sdk</pre> -<p>Once this has completed successfully, you can use the <code>cfx</code> program at your command line at any time: you don't need to run bin/activate.</p> -<h2 id="Installation_on_Windows">Installation on Windows</h2> -<p>Extract the file contents wherever you choose, and navigate to the root directory of the SDK with a shell/command prompt. For example:</p> -<pre>7z.exe x addon-sdk.zip -cd addon-sdk -</pre> -<p>Then run:</p> -<pre>bin\activate -</pre> -<p>Your command prompt should now have a new prefix containing the full path to the SDK's root directory:</p> -<pre>(C:\Users\mozilla\sdk\addon-sdk) C:\Users\Work\sdk\addon-sdk> -</pre> -<h2 id="activate">activate</h2> -<p>The activate command sets some environment variables that are needed for the SDK. It sets the variables for the current command prompt only. If you open a new command prompt, the SDK will not be active in the new prompt. until you type <code>activate</code> again.</p> -<p>This means that you can have multiple copies of the SDK in different locations on disk and switch between them, or even have them both activated in different command prompts at the same time.</p> -<h3 id="Making_activate_permanent">Making <code>activate</code> permanent</h3> -<p>By setting these variables permanently in your environment so every new command prompt reads them, you can make activation permanent. Then you don't need to type <code>activate</code> every time you open up a new command prompt.</p> -<p>Because the exact set of variables may change with new releases of the SDK, it's best to refer to the activation scripts to determine which variables need to be set. Activation uses different scripts and sets different variables for bash environments (Linux and Mac OS X) and for Windows environments.</p> -<h4 id="Windows">Windows</h4> -<p>On Windows, <code>bin\activate</code> uses <code>activate.bat</code>, and you can make activation permanent using the command line <code>setx</code> tool or the Control Panel.</p> -<h4 id="LinuxMac_OS_X">Linux/Mac OS X</h4> -<p>On Linux and Mac OS X, <code>source bin/activate</code> uses the <code>activate</code> bash script, and you can make activation permanent using your <code>~/.bashrc</code> (on Linux) or <code>~/.bashprofile</code> (on Mac OS X).</p> -<p>As an alternative to this, you can create a symbolic link to the <code>cfx</code> program in your <code>~/bin</code> directory:</p> -<pre>ln -s PATH_TO_SDK/bin/cfx ~/bin/cfx -</pre> -<p>If you used Homebrew to install the SDK, the environment variables are already set permanently for you.</p> -<h2 id="Sanity_check">Sanity check</h2> -<p>Run this at your shell prompt:</p> -<pre>cfx -</pre> -<p>It should produce output whose first line looks something like this, followed by many lines of usage information:</p> -<pre>Usage: cfx [options] [command] -</pre> -<p>This is the <a href="/en-US/Add-ons/SDK/Tools/cfx"><code>cfx</code> command-line program</a>. It's your primary interface to the Add-on SDK. You use it to launch Firefox and test your add-on, package your add-on for distribution, view documentation, and run unit tests.</p> -<h2 id="Problems">Problems?</h2> -<p>Try the <a href="/en-US/Add-ons/SDK/Tutorials/Troubleshooting">Troubleshooting</a> page.</p> -<h2 id="Next_Steps">Next Steps</h2> -<p>Next, take a look at the <a href="/en-US/Add-ons/SDK/Tutorials/Getting_Started_With_cfx">Getting Started With cfx</a> tutorial, which explains how to create add-ons using the <code>cfx</code> tool.</p> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/creating_annotations/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/creating_annotations/index.html deleted file mode 100644 index 07cecddaf5..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/creating_annotations/index.html +++ /dev/null @@ -1,221 +0,0 @@ ---- -title: Добавление заметок -slug: Mozilla/Add-ons/SDK/Tutorials/Аннотатор/Creating_annotations -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Annotator/Creating_annotations ---- -<p>Мы будем использовать два объекта для создания заметок: модификатор страницы - чтобы найти элементы, для которых пользователь может оставить заметку и панель для ввода текста заметки.</p> -<h2 id="Селектор_модификации_страницы">Селектор модификации страницы</h2> -<h3 id="Селектор_контент-скриптов">Селектор контент-скриптов</h3> -<p>Контент-скрипт для селекторамодификации страницы будет ипользовать <a href="http://jquery.com/">jQuery</a> для поиска элементов и манипуляций над ними.</p> -<p>Эго главная задача - обработка "подходящего элемента": это элемент страницы, который подходит для добавления заметки на него. Подходящий элемент будет подсвечен и будет иметь обработчик событий, который будет отправлять сообщения основному коду расширения.</p> -<p>Селектор модификации страницы может быть активирован или деактивирован используя сообщение от основного кода расширения. По-умолчанию он деактивирован:</p> -<pre class="brush: js">var matchedElement = null; -var originalBgColor = null; -var active = false; - -function resetMatchedElement() { - if (matchedElement) { - (matchedElement).css('background-color', originalBgColor); - (matchedElement).unbind('click.annotator'); - } -} - -self.on('message', function onMessage(activation) { - active = activation; - if (!active) { - resetMatchedElement(); - } -});</pre> -<p>Данный селектор ожидает вхождения события <a href="http://api.jquery.com/mouseenter/">jQuery mouseenter</a>.</p> -<p> When a mouseenter event is triggered the selector checks whether the element is eligible for annotation. An element is eligible if it, or one of its ancestors in the DOM tree, has an attribute named <code>"id"</code>. The idea here is to make it more likely that the annotator will be able to identify annotated elements correctly later on.</p> -<p>If the page element is eligible for annotation, then the selector highlights that element and binds a click handler to it. The click handler sends a message called <code>show</code> back to the main add-on code. The <code>show</code> message contains: the URL for the page, the ID attribute value, and the text content of the page element.</p> -<pre class="brush: js">$('*').mouseenter(function() { - if (!active || $(this).hasClass('annotated')) { - return; - } - resetMatchedElement(); - ancestor = $(this).closest("[id]"); - matchedElement = $(this).first(); - originalBgColor = $(matchedElement).css('background-color'); - $(matchedElement).css('background-color', 'yellow'); - $(matchedElement).bind('click.annotator', function(event) { - event.stopPropagation(); - event.preventDefault(); - self.port.emit('show', - [ - document.location.toString(), - $(ancestor).attr("id"), - $(matchedElement).text() - ] - ); - }); -});</pre> -<p>Conversely, the add-on resets the matched element on <a href="http://api.jquery.com/mouseout/">mouseout</a>:</p> -<pre class="brush: js">$('*').mouseout(function() { - resetMatchedElement(); -});</pre> -<p>Save this code in a new file called <code>selector.js</code> in your add-on's <code>data</code> directory.</p> -<p>Because this code uses jQuery, you'll need to <a href="http://docs.jquery.com/Downloading_jQuery">download</a> that as well, and save it in <code>data</code>.</p> -<h3 id="Updating_main.js">Updating main.js</h3> -<p>Go back to <code>main.js</code> and add the code to create the selector into the <code>main</code> function:</p> -<pre class="brush: js">var selector = pageMod.PageMod({ - include: ['*'], - contentScriptWhen: 'ready', - contentScriptFile: [data.url('jquery-1.4.2.min.js'), - data.url('selector.js')], - onAttach: function(worker) { - worker.postMessage(annotatorIsOn); - selectors.push(worker); - worker.port.on('show', function(data) { - console.log(data); - }); - worker.on('detach', function () { - detachWorker(this, selectors); - }); - } -});</pre> -<p>Make sure the name you use to load jQuery matches the name of the jQuery version you downloaded.</p> -<p>The page-mod matches all pages, so each time the user loads a page the page-mod emits the <code>attach</code> event, which will call the listener function we've assigned to <code>onAttach</code>. The handler is passed a <a href="/en-US/Add-ons/SDK/Low-Level_APIs/content_worker">worker</a> object. Each worker represents a channel of communication between the add-on code and any content scripts running in that particular page context. For a more detailed discussion of the way <code>page-mod</code> uses workers, see the <a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod">page-mod documentation</a>.</p> -<p>In the attach handler we do three things:</p> -<ul> - <li>send the content script a message with the current activation status</li> - <li>add the worker to an array called <code>selectors</code> so we can send it messages later on</li> - <li>assign a message handler for messages from this worker. If the message is <code>show</code> we will just log the content for the time being. If the message is <code>detach</code> we remove the worker from the <code>selectors</code> array.</li> -</ul> -<p>At the top of the file import the <code>page-mod</code> module and declare an array for the workers:</p> -<pre class="brush: js">var pageMod = require('sdk/page-mod'); -var selectors = [];</pre> -<p>Add <code>detachWorker</code>:</p> -<pre class="brush: js">function detachWorker(worker, workerArray) { - var index = workerArray.indexOf(worker); - if(index != -1) { - workerArray.splice(index, 1); - } -}</pre> -<p>Edit <code>toggleActivation</code> to notify the workers of a change in activation state:</p> -<pre class="brush: js">function activateSelectors() { - selectors.forEach( - function (selector) { - selector.postMessage(annotatorIsOn); - }); -} - -function toggleActivation() { - annotatorIsOn = !annotatorIsOn; - activateSelectors(); - return annotatorIsOn; -}</pre> -<p><span class="aside">We'll be using this URL in all our screenshots. Because <code>cfx run</code> doesn't preserve browsing history, if you want to play along it's worth taking a note of the URL.</span></p> -<p>Save the file and execute <code>cfx run</code> again. Activate the annotator by clicking the widget and load a page: the screenshot below uses <a href="http://blog.mozilla.com/addons/2011/02/04/overview-amo-review-process/">http://blog.mozilla.com/addons/2011/02/04/ overview-amo-review-process/</a>. You should see the highlight appearing when you move the mouse over certain elements:</p> -<p><img alt="" src="https://mdn.mozillademos.org/files/6681/highlight.png" style="display: block; margin-left: auto; margin-right: auto;">Click on the highlight and you should see something like this in the console output:</p> -<pre> info: show - info: http://blog.mozilla.com/addons/2011/02/04/overview-amo-review-process/, - post-2249,When you submit a new add-on, you will have to choose between 2 - review tracks: Full Review and Preliminary Review. -</pre> -<h2 id="Annotation_Editor_Panel">Annotation Editor Panel</h2> -<p>So far we have a page-mod that can highlight elements and send information about them to the main add-on code. Next we will create the editor panel, which enables the user to enter an annotation associated with the selected element.</p> -<p>We will supply the panel's content as an HTML file, and will also supply a content script to execute in the panel's context.</p> -<p>So create a subdirectory under <code>data</code> called <code>editor</code>. This will contain two files: the HTML content, and the content script.</p> -<h3 id="Annotation_Editor_HTML">Annotation Editor HTML</h3> -<p>The HTML is very simple:</p> -<pre class="brush: html"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> -<head> - <title>Annotation</title> - <style type="text/css" media="all"> - body { - font: 100% arial, helvetica, sans-serif; - background-color: #F5F5F5; - } - textarea { - width: 180px; - height: 180px; - margin: 10px; - padding: 0px; - } - </style> - -</head> - -<body> - -<textarea rows='10' cols='20' id='annotation-box'> -</textarea> - -</body> - -</html></pre> -<p>Save this inside <code>data/editor</code> as <code>annotation-editor.html</code>.</p> -<h3 id="Annotation_Editor_Content_Script">Annotation Editor Content Script</h3> -<p>In the corresponding content script we do two things:</p> -<ul> - <li>handle a message from the add-on code by giving the text area focus</li> - <li>listen for the return key and when it is pressed, send the contents of the text area to the add-on.</li> -</ul> -<p>Here's the code:</p> -<pre class="brush: js">var textArea = document.getElementById('annotation-box'); - -textArea.onkeyup = function(event) { - if (event.keyCode == 13) { - self.postMessage(textArea.value); - textArea.value = ''; - } -}; - -self.on('message', function() { - var textArea = document.getElementById('annotation-box'); - textArea.value = ''; - textArea.focus(); -});</pre> -<p>Save this inside <code>data/editor</code> as <code>annotation-editor.js</code>.</p> -<h3 id="Updating_main.js_Again">Updating main.js Again</h3> -<p>Now we'll update <code>main.js</code> again to create the editor and use it.</p> -<p>First, import the <code>panel</code> module:</p> -<pre class="brush: js">var panels = require('sdk/panel');</pre> -<p>Then add the following code to the <code>main</code> function:</p> -<pre class="brush: js">var annotationEditor = panels.Panel({ - width: 220, - height: 220, - contentURL: data.url('editor/annotation-editor.html'), - contentScriptFile: data.url('editor/annotation-editor.js'), - onMessage: function(annotationText) { - if (annotationText) { - console.log(this.annotationAnchor); - console.log(annotationText); - } - annotationEditor.hide(); - }, - onShow: function() { - this.postMessage('focus'); - } -});</pre> -<p>We create the editor panel but don't show it. We will send the editor panel the <code>focus</code> message when it is shown, so it will give the text area focus. When the editor panel sends us its message we log the message and hide the panel.</p> -<p>The only thing left is to link the editor to the selector. So edit the message handler assigned to the selector so that on receiving the <code>show</code> message we assign the content of the message to the panel using a new property "annotationAnchor", and show the panel:</p> -<pre class="brush: js">var selector = pageMod.PageMod({ - include: ['*'], - contentScriptWhen: 'ready', - contentScriptFile: [data.url('jquery-1.4.2.min.js'), - data.url('selector.js')], - onAttach: function(worker) { - worker.postMessage(annotatorIsOn); - selectors.push(worker); - worker.port.on('show', function(data) { - annotationEditor.annotationAnchor = data; - annotationEditor.show(); - }); - worker.on('detach', function () { - detachWorker(this, selectors); - }); - } -});</pre> -<p>Execute <code>cfx run</code> again, activate the annotator, move your mouse over an element and click the element when it is highlighted. You should see a panel with a text area for a note:</p> -<p><img alt="" src="https://mdn.mozillademos.org/files/6683/editor-panel.png" style="display: block; margin-left: auto; margin-right: auto;">Enter the note and press the return key: you should see console output like this:</p> -<pre> info: http://blog.mozilla.com/addons/2011/02/04/overview-amo-review-process/, - post-2249,When you submit a new add-on, you will have to choose between 2 - review tracks: Full Review and Preliminary Review. - info: We should ask for Full Review if possible. -</pre> -<p>That's a complete annotation, and in the next section we'll deal with <a href="/en-US/Add-ons/SDK/Tutorials/Annotator/Storing_annotations">storing it</a>.</p> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/implementing_the_widget/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/implementing_the_widget/index.html deleted file mode 100644 index ef43991658..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/implementing_the_widget/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Реализация Виджета -slug: Mozilla/Add-ons/SDK/Tutorials/Аннотатор/Implementing_the_widget -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Annotator/Implementing_the_widget ---- -<p>Мы хотим, чтобы виджет выполнял две вещи:</p> -<ul> - <li>При клике левой кнопкой мыши, Виджет должен активировать или деактивировать Аннотатор;</li> - <li>При клике правой кнопкой, Виджет должен отобразить список всех заметок, созданных пользователем.</li> -</ul> -<p>Так как событие <code>click</code> не различает левую и правую кнопки мыши, мы будем использовать контент-скрипт для захвата событий клика мышью и отправлять соответствующее сообщение назад, нашему расширению.</p> -<p>Виджет должен иметь две иконки: одна для активного состояния, вторая для неактивного.</p> -<p>В итоге нам понадобится создать три файла: контент-скрипт для Виджета и две иконки.</p> -<p>Внутри папки <code>data</code> создайте папку с именем <code>widget</code>. В этой папке мы будем хранить файлы Виджета. (Вам не обязательно создавать отдельную папку, можете просто хранить файлы Виджета в папке <code>data</code>. Но в нашем случае, расширение будет хорошо структурировано.)</p> -<h2 id="Контент-скрипт_Виджета">Контент-скрипт Виджета</h2> -<p>Контент-скрипт Виджета просто следит за нажатиями левой и правой кнопок мыши и отправляет соответствующее сообщение коду расширения:</p> -<pre class="brush: js">this.addEventListener('click', function(event) { - if(event.button == 0 && event.shiftKey == false) - self.port.emit('left-click'); - - if(event.button == 2 || (event.button == 0 && event.shiftKey == true)) - self.port.emit('right-click'); - event.preventDefault(); -}, true);</pre> -<p>Сохраните этот файл в папку <code>data/widget</code> под названием <code>widget.js</code>.</p> -<h2 id="Иконки_Виджета">Иконки Виджета</h2> -<p>Вы можете скопировать эти иконки:</p> -<p><img alt="" src="https://mdn.mozillademos.org/files/6673/pencil-off.png"><img alt="" src="https://mdn.mozillademos.org/files/6675/pencil-on.png" style="width: 32px; height: 32px;"></p> -<p>(Вы также можете создать свои собственные иконки, если чуствуете, что вас поситила муза.) Сохраните их в папку <code>data/widget</code>.</p> -<h2 id="main.js">main.js</h2> -<p>Теперь, в папке <code>lib</code> откройте <code>main.js</code> и добавьте следующий код:</p> -<pre class="brush: js">var widgets = require('sdk/widget'); -var data = require('sdk/self').data; - -var annotatorIsOn = false; - -function toggleActivation() { - annotatorIsOn = !annotatorIsOn; - return annotatorIsOn; -} - -exports.main = function() { - - var widget = widgets.Widget({ - id: 'toggle-switch', - label: 'Annotator', - contentURL: data.url('widget/pencil-off.png'), - contentScriptWhen: 'ready', - contentScriptFile: data.url('widget/widget.js') - }); - - widget.port.on('left-click', function() { - console.log('activate/deactivate'); - widget.contentURL = toggleActivation() ? - data.url('widget/pencil-on.png') : - data.url('widget/pencil-off.png'); - }); - - widget.port.on('right-click', function() { - console.log('show annotation list'); - }); -}</pre> -<p>Аннотатор по-умолчанию отключен. Этот скрипт создает Виджет и реагирует на сообщения контент-скрипта, путем переключения состояния Виджета. Внимание: согласно багу<span class="aside"> <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=626326">bug 626326</a>, контекстное меню панели дополнений будет отображаться вне зависимости от вызова <code>event.preventDefault()</code> в контент-скрипте Виджета.</span> Так как мы пока не имеем кода для отображения заметок, мы просто выведем в консоль событие нажатия правой кнопки.</p> -<p>Теперь, перейдя в папку <code>annotator</code> выполните команду <code>cfx run</code>. Вы должны увидеть Виджет в панели дополнений:</p> -<p><img alt="" src="https://mdn.mozillademos.org/files/6679/widget-icon.png" style="width: 405px; height: 166px; display: block; margin-left: auto; margin-right: auto;"></p> -<p>Левый и правый клики должы выводить соответсвующие сообщения в консоль, и левый клик также должен менять иконку для отображения состояния активности Виджета.</p> -<p> </p> -<p>Далее мы добавим реализацию функции <a href="/en-US/Add-ons/SDK/Tutorials/Annotator/Creating_annotations">создания аннотаций</a>.</p> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/index.html deleted file mode 100644 index eab37823c0..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Комментатор -slug: Mozilla/Add-ons/SDK/Tutorials/Аннотатор -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Annotator ---- -<p>{{AddonSidebar}}</p> - -<div class="warning"> -<p>Запрещено в Firefox 29 и удалено в Firefox 38.</p> - -<p>Предупреждение: это руководство пологается на впоследствии удалённый Widget API и больше не работает с Firefox.</p> - -<p>The widget API is deprecated from Firefox 29 onwards. Please see the <a href="/en-US/Add-ons/SDK/High-Level_APIs/ui">ui module</a> for replacements. In particular, for a simple button, try the <a href="/en-US/Add-ons/SDK/High-Level_APIs/ui#ActionButton">action button</a> or <a href="/en-US/Add-ons/SDK/High-Level_APIs/ui#ToggleButton">toggle button</a> APIs, and for a more complex widget try the <a href="/en-US/Add-ons/SDK/High-Level_APIs/ui#Toolbar">toolbar</a> or <a href="/en-US/Add-ons/SDK/High-Level_APIs/ui#Sidebar">sidebar</a> APIs.</p> -</div> - -<p>В этом уроке мы создадим расширение, которое использует множество различных компонентов <a href="/en-US/Add-ons/SDK/High-Level_APIs">высокоуровнего API</a>.</p> - -<p>Это расширение (Аннотатор) позволит пользователю выделять элементы веб-страниц и добавлять к ним заметки (аннотации). Аннотатор будет сохранять заметки, добавленные пользователем. Когда пользователь посещает веб-страницу, содержащую элементы с прикрепленными к ним заметками - эти элементы подсвечиваются. Если пользователь наведет курсор на такой элемент страницы, то будет отображена заметка, ассоциированная с этим элементом.</p> - -<p>Далее мы кратко рассмотрим архитектуру Аннотатора и поэтапно пройдемся по реализации разных частей расширения.</p> - -<p>Завершенное расширение вы можете найти в <a href="https://github.com/mozilla/addon-sdk/tree/master/examples/annotator">папке <code>examples</code> из SDK</a>.</p> - -<ul> - <li><a href="/ru/docs/Mozilla/Add-ons/SDK/Tutorials/%D0%90%D0%BD%D0%BD%D0%BE%D1%82%D0%B0%D1%82%D0%BE%D1%80/Overview">Краткий обзор архитектуры</a><br> - </li> - <li><a href="/ru/docs/Mozilla/Add-ons/SDK/Tutorials/%D0%90%D0%BD%D0%BD%D0%BE%D1%82%D0%B0%D1%82%D0%BE%D1%80/Implementing_the_widget">Реализация Виджета</a><br> - </li> - <li><a href="/ru/docs/Mozilla/Add-ons/SDK/Tutorials/%D0%90%D0%BD%D0%BD%D0%BE%D1%82%D0%B0%D1%82%D0%BE%D1%80/Creating_annotations">Добавление заметок</a><br> - </li> - <li><a href="/en-US/Add-ons/SDK/Tutorials/Annotator/Storing_annotations">Хранение заметок</a><br> - </li> - <li><a href="/en-US/Add-ons/SDK/Tutorials/Annotator/Displaying_annotations">Отображение заметок</a></li> -</ul> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/overview/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/overview/index.html deleted file mode 100644 index 08e4713b33..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/аннотатор/overview/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Краткий обзор -slug: Mozilla/Add-ons/SDK/Tutorials/Аннотатор/Overview -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Annotator/Overview ---- -<p>Аннотатор использует контент-скрипты для реализации пользовательских интерфейсов, получения ввода, и для работы со страницами, посещаемыми пользователем.</p> -<p>Модуль <code>main</code> содержит логику приложения и производит операции между различными объектами SDK.</p> -<p>Операции между модулем <code>main</code> и различными контент-скриптами можно изобразить следующим образом:</p> -<p><img alt="" src="https://mdn.mozillademos.org/files/6671/annotator-design.png" style="display: block; margin-left: auto; margin-right: auto;"></p> -<h2 id="Пользовательский_интерфейс">Пользовательский интерфейс</h2> -<p>Основной пользовательский интерфейс состоит из Виджета и трех панелей:</p> -<ul> - <li>Виджет (<code><a href="/en-US/Add-ons/SDK/High-Level_APIs/widget">widget</a></code>) используется для активации Аннотатора и для отображения списка всех сохраненных заметок;</li> - <li>Панель (<code><a href="/en-US/Add-ons/SDK/High-Level_APIs/panel">panel</a></code>) <strong>annotation-editor</strong> позволит пользователю добавить новую заметку;</li> - <li>Панель <strong>annotation-list</strong> будет отображать список всех сохраненных заметок;</li> - <li>Панель <strong>annotation</strong> будет отображать одну заметку.</li> -</ul> -<p>В дополнении, мы будем использовать модуль Оповещений (<a href="/en-US/Add-ons/SDK/High-Level_APIs/notifications"><code>notifications</code></a>), чтобы сообщать пользователю, когда в хранилище закончилось свободное место.</p> -<h2 id="Работаем_с_DOM">Работаем с DOM</h2> -<p>Мы будем использовать два объекта <a href="/en-US/Add-ons/SDK/High-Level_APIs/page-mod"><code>page-mods</code></a> для произведения операций над DOM веб-страниц, которые посещает пользователь:</p> -<ul> - <li> - <p>Объект <strong>selector</strong> позволит пользователю выбрать элемент для добавления заметки к нему. Он идентифицирует элементы страницы, которые подходят для заметок, подсвечивает их при наведении курсора мыши и сообщает основному коду расширения когда пользователь кликает по подсвеченному элементу;</p> - </li> - <li> - <p>Объект <strong>matcher</strong> отвечает за поиск элементов с заметками: он инициализируется со списком заметок и осуществляет поиск веб-сраниц с элементами, ассоциированными с этими заметками. Он также подсвечивает все элементы, ассоциированные с заметками. Когда пользователь наводит курсор мыши на элемент с заметкой, matcher сообщает основному коду расширения, который, в свою очередь, отображает панель с одной заметкой.</p> - </li> -</ul> -<h2 id="Обработка_данных">Обработка данных</h2> -<p>Мы будем использовать модуль <a href="/en-US/Add-ons/SDK/High-Level_APIs/simple-storage"><code>simple-storage</code></a> для хранения заметок.</p> -<p>Поскольку мы сохраняем потенциально секретную информацию, мы хотим оградить пользователя от создания заметок в приватном режиме браузера. Простейший способ решения этой проблемы, это удаление ключа <a href="/en-US/Add-ons/SDK/Tools/package_json#permissions"><code>"private-browsing"</code></a> из файла "package.json" расширения. Если мы удалим этот ключ, то расширение не получит доступ к окнам в режиме приватного просмотра и Виджет Аннотатора не будет отображаться в приватных окнах.</p> -<h2 id="Приступаем_к_работе">Приступаем к работе</h2> -<p>Давайте начнем с создания папки, с именем "annotator". Перейдите в эту папку и введите <code>cfx init</code>.</p> -<p>Далее мы <a href="/en-US/Add-ons/SDK/Tutorials/Annotator/Implementing_the_widget">разработаем Виджет</a>.</p> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/добавление_кнопки_на_панель_инструментов/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/добавление_кнопки_на_панель_инструментов/index.html deleted file mode 100644 index 7b6e8bf507..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/добавление_кнопки_на_панель_инструментов/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Добавление кнопки на панель инструментов -slug: Mozilla/Add-ons/SDK/Tutorials/Добавление_кнопки_на_панель_инструментов -tags: - - Add-on SDK - - Дополнение -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Adding_a_Button_to_the_Toolbar ---- -<div class="blockIndicator 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> -</div> - -<p>{{LegacyAddonsNotice}}{{AddonSidebar}}</p> - -<div class="note"> -<p><span>Для понимания этого руководства необходимо изучить статью <a href="/en-US/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29">basics of <code>jpm (основы jpm)</code></a>. </span></p> -</div> - -<p>Для добавления кнопки на панель инструментов (toolbar, тулбар) используются модули <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button</a> или <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">toggle button</a>.</p> - -<p>Создайте новую папку, перейдите в неё и запустите <code>jpm init</code>, приняв всё по умолчанию.</p> - -<p>Создайте папку <strong>"data"</strong></p> - -<pre>mkdir data</pre> - -<p>и сохраните три файла иконок в этой папке:</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>После, откройте файл "index.js", расположенный в корне каталога дополнения, и допишите этот код:</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>Запустите дополнение через <code>jpm run</code>. Кнопка будет добавлена на тулбар (ищите сверху в окне браузера):</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;">Вы не сможете установить место первоначального появления кнопки, но пользователь сможет её переместить, используя настройки браузера. Атрибут <code>id</code> является обязательным. Он используется, в частности, для запоминания позиции кнопки на панели, поэтому в следующих версиях своего дополнения вы его не сможете изменить.</p> - -<p>Нажатие кнопки откроет в новой вкладке сайт <a href="https://www.mozilla.org/en-US/">https://www.mozilla.org/</a> .</p> - -<h2 id="Задание_иконки">Задание иконки</h2> - -<p>Свойство icon может содержать одну иконку или набор (различных размеров, как в примере выше). Если указать набор иконок разных размеров, то браузер будет автоматически выбирать размер в зависимости от разрешения экрана и расположения на экране. <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#ActionButton(options)">Более подробная информация о иконках</a>.</p> - -<p>Файл с иконкой должен быть внутри дополнения. Недопустимы ссылки на внешние фалы.</p> - -<p>Вы можете изменить иконку в любое время через установку свойства <code>icon</code> кнопки. Также можно изменить иконку и другие свойства состояния глобально для окна брайзера или только для вкладки. <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action#Updating_state">Узнать об этом можно в статье</a>.</p> - -<h2 id="Привязка_панели">Привязка панели</h2> - -<p>Если необходимо привязать к кнопке панель, то используйте <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">toggle button</a> API. Этот API такой же как action button API, кроме того, что добавлено булево свтйство <code>checked, </code>которое переключается, когда нажимается конпка. Для связи в панелью нужнопередать кнопку в функцию <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel#show(options)"><code>show()</code></a> панели. Для уточнения деталей, изучите документацию <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle#Attaching_panels_to_buttons">toggle button's documentation</a>.</p> - -<h2 id="Вывод_сложного_контента">Вывод сложного контента</h2> - -<p>Для созлания более сложного пользовательского интерфейса, чем доступен через кнопку, используйте <a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_toolbar">toolbar</a> API. С этим API вы получите доступ к полным гризонтальным полосам тулбара. Можно добавлять кнопки на панель, и фреймы (<a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_frame">frames</a>), которые могут содержать HTML, CSS и JavaScript.</p> - -<h2 id="Материал_для_изучения">Материал для изучения</h2> - -<ul> - <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_action">action button reference</a></li> - <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_button_toggle">toggle button reference</a></li> - <li><a href="/en-US/Add-ons/SDK/Low-Level_APIs/ui_toolbar">toolbar reference</a></li> -</ul> diff --git a/files/ru/mozilla/add-ons/sdk/tutorials/протоколирование/index.html b/files/ru/mozilla/add-ons/sdk/tutorials/протоколирование/index.html deleted file mode 100644 index d0ab8d6f79..0000000000 --- a/files/ru/mozilla/add-ons/sdk/tutorials/протоколирование/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Протоколирование (Логирование) -slug: Mozilla/Add-ons/SDK/Tutorials/Протоколирование -tags: - - Логирование - - Протоколирование -translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Logging ---- -<div class="blockIndicator 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> -</div> - -<p>{{LegacyAddonsNotice}}{{AddonSidebar}}</p> - -<div class="note"><span>Перед использованием, вам нужно изучить <a href="/en-US/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29">основы <code>jpm</code></a>. </span></div> - -<p><a href="https://developer.mozilla.org/en/DOM/console">Консоль для DOM-объекта</a> полезна для отладки JavaScript. Так как DOM-объекты недоступны для главного кода дополнения (add-on), то SDK предоставляет свой собственный глобальный <code>объект</code> <code>"консоль" (console)</code> с большинством таких же методов, как и у DOM-<code>консоли</code>, включая методы для протоколирвоания ошибок (error), предупреждений (warning) или информационных сообщений. Для доступа к консоли не нужно получать что-либо, используя <code>require()</code>. Она уже доступна автоматически.</p> - -<p>Метод <code>console.log()</code> выводит информационное сообщение:</p> - -<pre class="brush: js">console.log("Hello World"); -</pre> - -<p>Попробуйте:</p> - -<ul> - <li>создайте новую папку и перейдите в неё</li> - <li>выполните jpm init со значениями по умолчанию</li> - <li>откройте "index.js" и добавьте строку, указанную в примере выше</li> - <li>выполните <code>jpm run</code></li> -</ul> - -<p>Firefox запустится, и в терминале, где вы ввели <code>jpm run</code>, появится следующая строка:</p> - -<pre>info: Hello World! -</pre> - -<h2 id="Консоль_в_скриптах_Content_Scripts"><code>Консоль</code> в скриптах <code>Content Scripts</code></h2> - -<p>Вы можете использовать консоль в скриптах <code><a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">content scripts</a></code> так же, как и вашем главном коде дополнения. Следующий аддон (add-on) выведет в лог HTML-содержимое каждой закладки, загруженной пользователем, используя <code>console.log()</code> изнутри скрипта <code>content script</code>:</p> - -<pre class="brush: js">require("sdk/tabs").on("ready", function(tab) { - tab.attach({ - contentScript: "console.log(document.body.innerHTML);" - }); -}); -</pre> - -<h2 id="Консоль_Output">Консоль Output</h2> - -<p>Если вы запускаете дополнение из терминала (например, выполня <code>jpm run</code> или <code>jpm test</code>), тогда сообщения консоли появятся в этом же терминале.</p> - -<p>Если вы установили расширение в Firefox тогде сообщения появятся в <a href="/en-US/docs/Tools/Browser_Console">консоли браузера</a> Firefox.</p> - -<p>Но обратите внимание, что <strong>по умолчанию вызовы <code>console.log()</code> не отобразят ничего в Error Console для любых установленных дополнений</strong>. Это правило работает и для дополнений, установленных с использованием Add-on Builder, и для установленных с помощью утилит, таких как <a href="https://addons.mozilla.org/en-US/firefox/addon/autoinstaller/">Extension Auto-installer</a>.</p> - -<p>Смотрите <a href="/en-US/Add-ons/SDK/Tools/console#Logging_Levels">"Уровни логирования"</a> в справочной документации для более подробной информации.</p> - -<h2 id="Дальнейшее_изучение">Дальнейшее изучение</h2> - -<p>Полное <code>API консоли</code> смотри в <a href="/en-US/Add-ons/SDK/Tools/console">API-справочнике</a>.</p> diff --git a/files/ru/mozilla/add-ons/sdk/проба/index.html b/files/ru/mozilla/add-ons/sdk/проба/index.html deleted file mode 100644 index 987a420410..0000000000 --- a/files/ru/mozilla/add-ons/sdk/проба/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Builder -slug: Mozilla/Add-ons/SDK/проба -translation_of: Archive/Add-ons/Add-on_SDK/Builder ---- -<p>The Add-on Builder was a web-based development environment that allowed developers to create add-ons using the SDK APIs, but without needing to use the <code>cfx</code> command line tool. It was retired on April 1, 2014, and the "builder.addons.mozilla.org" domain now redirects to this page.<br> - <br> - If you have only used the SDK through the Builder, you already know most of what you need to know to develop using just the SDK. The <a href="/en-US/Add-ons/SDK/High-Level_APIs">high-level</a> and <a href="/en-US/Add-ons/SDK/Low-Level_APIs">low-level</a> APIs used for Builder add-ons are exactly the same for Builder and SDK. To switch to the SDK:</p> - -<ul> - <li><a href="/en-US/Add-ons/SDK/Tutorials/Installation">install the SDK locally</a></li> - <li>get to know the cfx command line tool, with this <a href="/en-US/Add-ons/SDK/Tutorials/Getting_started">introductory walkthrough</a> and the <a href="/en-US/Add-ons/SDK/Tools/cfx">detailed <code>cfx</code> reference</a></li> - <li>get to know the <a href="/en-US/Add-ons/SDK/Tools/package_json">package.json</a> file used to configure attributes of your add-on</li> -</ul> diff --git a/files/ru/mozilla/add-ons/загрузочные_расширения/index.html b/files/ru/mozilla/add-ons/загрузочные_расширения/index.html deleted file mode 100644 index 934e40e904..0000000000 --- a/files/ru/mozilla/add-ons/загрузочные_расширения/index.html +++ /dev/null @@ -1,353 +0,0 @@ ---- -title: Загружаемые расширения -slug: Mozilla/Add-ons/загрузочные_расширения -tags: - - Bootstrapped - - Extensions - - add-on - - Дополнения -translation_of: Archive/Add-ons/Bootstrapped_extensions ---- -<div class="blockIndicator 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> -</div> - -<p>{{LegacyAddonsNotice}}{{AddonSidebar}}</p> - -<p>{{ gecko_minversion_header("2.0") }}</p> - -<p>К традиционным расширениям относятся оверлеи (<strong>overlays</strong>), в их случае приложение может загрузить XUL из пакета расширения и автоматически применить их на верхнем слое своего UI (интерфейса пользователя). При этом создаются расширения, которые добавляются в пользовательский интерфейс относительно легко, но в этом случае обновление, установка или отмена действия расширения требуют перезагрузку приложения.</p> - -<p>Движок Gecko 2.0 {{ geckoRelease("2.0") }} вводит <strong>загружаемые расширения</strong> (<strong>bootstrapped extensions</strong>). Это специальные расширения, которые вместо использования наложения на интерфейс, сами програмно добавляют себя в приложение. Это делается запуском специального скрипта из файла, который включен в расширение и содержит функции, вызываемые браузером, для того чтобы установить, удалить, загрузить, выгрузить.</p> - -<p>Приложение делает вызовы из из этого файла со скриптом; расширение ответственно за добавление и удаление своего интерфейса пользователя и обработку любых других установок и завершения задач, которые требовались в процессе работы.</p> - -<p>Эта статья поясняет как работают загружаемые расширения. Изучите следующее <a href="/en-US/Add-ons/How_to_convert_an_overlay_extension_to_restartless">руководство по преобразованию приложений-оверлеев (overlay) в приложения, не требующие перезагрузки (restartless, то есть bootstrapped)</a>, для получения пошагового руководства по переходу.</p> - -<h2 id="The_startup_and_shutdown_process">The startup and shutdown process</h2> - -<p>A key feature of bootstrapped extensions is that they must be able to start up and shut down on demand by the application. When the extension's <code>startup()</code> function is called, it must manually inject its user interface and other behavior into the application. Similarly, when its <code>shutdown()</code> function is called, it must remove anything that it has added to the application, as well as all references to any of its objects.</p> - -<p>There are several scenarios in which the <code>startup()</code> function may be called; for example:</p> - -<ul> - <li>When the extension is first installed, assuming that it's both compatible with the application and is enabled.</li> - <li>When the extension becomes enabled using the add-ons manager window.</li> - <li>When the application is started up, if the extension is enabled and compatible with the application.</li> -</ul> - -<p>Some examples of when the <code>shutdown()</code> function may be called:</p> - -<ul> - <li>When the extension is uninstalled, if it's currently enabled.</li> - <li>When the extension becomes disabled.</li> - <li>When the user quits the application, if the extension is enabled.</li> -</ul> - -<h2 id="Notes_on_modifying_the_application_user_interface">Notes on modifying the application user interface</h2> - -<h3 id="chrome.manifest_in_bootstrapped_add-ons">chrome.manifest in bootstrapped add-ons</h3> - -<p>You can use a <a href="/en-US/docs/Chrome_Registration"><code>chrome.manifest</code></a> file in bootstrapped add-ons to:</p> - -<ul> - <li>Make your add-on's content available via a <code>chrome://</code> URL (using the <code>content</code>, <code>locale</code>, and <code>skin</code> instructions in the manifest).</li> - <li>Replace existing <code>chrome://</code> URIs with your content (using the <code>override</code> instruction).</li> -</ul> - -<p>Not all <code>chrome.manifest</code> instructions are supported in bootstrapped add-ons, for example you still cannot register <a href="/en-US/docs/XUL_Overlays">XUL Overlays</a> from a bootstrapped add-on. See the <a href="/en-US/docs/Chrome_Registration"><code>chrome.manifest</code></a> documentation for details.</p> - -<p>In Firefox 10 and later the <code>chrome.manifest</code> file located in the root of the add-on's XPI (i.e. a sibling of the <code>install.rdf</code>) is loaded automatically. In Firefox 8 and 9 you had to load/unload the manifest manually using {{ ifmethod("nsIComponentManager", "addBootstrappedManifestLocation") }} and {{ ifmethod("nsIComponentManager", "removeBootstrappedManifestLocation") }}. This feature was unavailable in Firefox versions before 8.</p> - -<h3 id="Adding_user_interface_manually">Adding user interface manually</h3> - -<p>If you decide to go ahead and try to develop a bootstrapped extension that modifies the application's user interface, here are a few suggestions to get you started.</p> - -<p>You need to look up the relevant application UI elements by their ID by calling {{ domxref("document.getElementById()") }}, then manipulate them to inject your UI. For example, you can get access to the menu bar in Firefox with <code>document.getElementById("main-menubar")</code>.</p> - -<p>Be sure that at shutdown time, you remove any user interface you've added.</p> - -<h2 id="Creating_a_bootstrapped_extension">Creating a bootstrapped extension</h2> - -<p>To mark an extension as bootstrappable, you need to add the following element to its <a href="/en-US/docs/Install_Manifests">install manifest</a>:</p> - -<pre><code><em:bootstrap>true</em:bootstrap></code></pre> - -<p>Then you need to add a <a href="/en-US/docs/Extensions/bootstrap.js"><code><strong>bootstrap.js</strong></code> file</a> that contains the required functions; this should be alongside the <a href="/en-US/docs/Install_Manifests"><code>install.rdf</code> file</a> in the extension's package.</p> - -<h3 id="Backward_compatibility">Backward compatibility</h3> - -<p>Because older versions of Firefox don't know about the <code>bootstrap</code> property or <code>bootstrap.js</code> file, it's not overly difficult to create an XPI that will work on both as a bootstrappable extension and as a traditional extension. Create your extension as a bootstrappable extension, then add the traditional overlays as well. Newer versions of Firefox will use the <code>bootstrap.js</code> script, ignoring the components and overlays, while older versions will use the overlays.</p> - -<h2 id="Bootstrap_entry_points">Bootstrap entry points</h2> - -<p>The <code>bootstrap.js</code> script should contain several specific functions, which are called by the browser to manage the extension. The script gets executed in a privileged sandbox, which is cached until the extension is shut down.</p> - -<h3 id="startup">startup</h3> - -<p>Called when the extension needs to start itself up. This happens at application launch time, when the extension is enabled after being disabled or after it has been shut down in order to install an update. As such, this can be called many times during the lifetime of the application.</p> - -<p>This is when your add-on should inject its UI, start up any tasks it may need running and so forth.</p> - -<pre>void startup( - data, - reason -); -</pre> - -<h6 id="Parameters">Parameters</h6> - -<dl> - <dt><code>data</code></dt> - <dd>A <a href="#Bootstrap_data">bootstrap data structure</a>.</dd> - <dt><code>reason</code></dt> - <dd>One of the <a href="#Reason_constants">reason constants</a>, indicating why the extension is being started up. This will be one of <code>APP_STARTUP</code>, <code>ADDON_ENABLE</code>, <code>ADDON_INSTALL</code>, <code>ADDON_UPGRADE</code>, or <code>ADDON_DOWNGRADE</code>.</dd> -</dl> - -<h3 id="shutdown">shutdown</h3> - -<p>Called when the extension needs to shut itself down, such as when the application is quitting or when the extension is about to be upgraded or disabled. Any user interface that has been injected must be removed, tasks shut down, and objects disposed of.</p> - -<pre>void shutdown( - data, - reason -); -</pre> - -<h6 id="Parameters_2">Parameters</h6> - -<dl> - <dt><code>data</code></dt> - <dd>A <a href="#Bootstrap_data">bootstrap data structure</a>.</dd> - <dt><code>reason</code></dt> - <dd>One of the <a href="#Reason_constants">reason constants</a>, indicating why the extension is being shut down. This will be one of <code>APP_SHUTDOWN</code>, <code>ADDON_DISABLE</code>, <code>ADDON_UNINSTALL</code>, <code>ADDON_UPGRADE</code>, or <code>ADDON_DOWNGRADE</code>.</dd> -</dl> - -<h3 id="install">install</h3> - -<p>Your bootstrap script must include an <code>install()</code> function, which the application calls before the first call to <code>startup()</code> after the extension is installed, upgraded, or downgraded.</p> - -<pre>void install( - data, - reason -); -</pre> - -<h6 id="Parameters_3">Parameters</h6> - -<dl> - <dt><code>data</code></dt> - <dd>A <a href="#Bootstrap_data">bootstrap data structure</a>.</dd> - <dt><code>reason</code></dt> - <dd>One of the <a href="#Reason_constants">reason constants</a>, indicating why the extension is being installed. This will be one of <code>ADDON_INSTALL</code>, <code>ADDON_UPGRADE</code>, or <code>ADDON_DOWNGRADE</code>.</dd> -</dl> - -<h3 id="uninstall">uninstall</h3> - -<p>This function is called after the last call to <code>shutdown()</code> before a particular version of an extension is uninstalled.</p> - -<div class="note"><strong>Note:</strong> If you open the add-on manager and then click "Remove" on an add-on, it will not call uninstall function right away. This is a soft uninstall because of the available "Undo" option. If the add-on manager is closed or another event takes place such that the "Undo" option becomes unavailable, then the hard uninstall takes place and the uninstall function is called.</div> - -<div class="note"><strong>Note:</strong> The uninstall function fires on downgrade and upgrade as well so you should make sure it is an uninstall by doing this:<br> -<code>function uninstall(aData, aReason) {</code><br> -<code>if (aReason == ADDON_UNINSTALL) {</code><br> -<code>console.log('really uninstalling');</code><br> -<code>} else {</code><br> -<code>console.log('not a permanent uninstall, likely an upgrade or downgrade');</code><br> -<code>}</code><br> -<code>}</code></div> - -<pre>void uninstall( - data, - reason -); -</pre> - -<h6 id="Parameters_4">Parameters</h6> - -<dl> - <dt><code>data</code></dt> - <dd>A <a href="#Bootstrap_data">bootstrap data structure</a>.</dd> - <dt><code>reason</code></dt> - <dd>One of the <a href="#Reason_constants">reason constants</a>, indicating why the extension is being uninstalled. This will be one of <code>ADDON_UNINSTALL</code>, <code>ADDON_UPGRADE</code>, or <code>ADDON_DOWNGRADE</code>.</dd> -</dl> - -<h2 id="Reason_constants">Reason constants</h2> - -<p>The bootstrap functions accept a <code>reason</code> parameter, which explains to the extension why it's being called. The reason constants are:</p> - -<table class="standard-table"> - <tbody> - <tr> - <td class="header">Constant</td> - <td class="header">Value</td> - <td class="header">Description</td> - </tr> - <tr> - <td><code>APP_STARTUP</code></td> - <td>1</td> - <td>The application is starting up.</td> - </tr> - <tr> - <td><code>APP_SHUTDOWN</code></td> - <td>2</td> - <td>The application is shutting down.</td> - </tr> - <tr> - <td><code>ADDON_ENABLE</code></td> - <td>3</td> - <td>The add-on is being enabled.</td> - </tr> - <tr> - <td><code>ADDON_DISABLE</code></td> - <td>4</td> - <td>The add-on is being disabled. (Also <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=620541">sent during uninstallation</a>)</td> - </tr> - <tr> - <td><code>ADDON_INSTALL</code></td> - <td>5</td> - <td>The add-on is being installed.</td> - </tr> - <tr> - <td><code>ADDON_UNINSTALL</code></td> - <td>6</td> - <td>The add-on is being uninstalled.</td> - </tr> - <tr> - <td><code>ADDON_UPGRADE</code></td> - <td>7</td> - <td>The add-on is being upgraded.</td> - </tr> - <tr> - <td><code>ADDON_DOWNGRADE</code></td> - <td>8</td> - <td>The add-on is being downgraded.</td> - </tr> - </tbody> -</table> - -<h2 id="Bootstrap_data">Bootstrap data</h2> - -<p>Each of the entry points is passed a simple data structure containing some useful information about the add-on being bootstrapped. More information about the add-on can be obtained by calling <code><a href="/en-US/docs/Addons/Add-on_Manager/AddonManager#getAddonByID()">AddonManager.getAddonByID()</a></code>. The data is a simple JavaScript object with the following properties:</p> - -<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>id</code></td> - <td><code>string</code></td> - <td>The ID of the add-on being bootstrapped.</td> - </tr> - <tr> - <td><code>version</code></td> - <td><code>string</code></td> - <td>The version of the add-on being bootstrapped.</td> - </tr> - <tr> - <td><code>installPath</code></td> - <td><code>nsIFile</code></td> - <td>The installation location of the add-on being bootstrapped. This may be a directory or an XPI file depending on whether the add-on is installed unpacked or not.</td> - </tr> - <tr> - <td><code>resourceURI</code></td> - <td><code>nsIURI</code></td> - <td>A URI pointing at the root of the add-ons files, this may be a <code>jar:</code> or <code>file:</code> URI depending on whether the add-on is installed unpacked or not. {{ gecko_minversion_inline("7.0") }}</td> - </tr> - <tr> - <td><code>oldVersion</code></td> - <td><code>string</code></td> - <td>The previously installed version, if the reason is <code>ADDON_UPGRADE</code> or <code>ADDON_DOWNGRADE</code>, and the method is <code>install</code> or <code>startup</code>. {{ gecko_minversion_inline("22.0") }}</td> - </tr> - <tr> - <td><code>newVersion</code></td> - <td><code>string</code></td> - <td>The version to be installed, if the reason is <code>ADDON_UPGRADE</code> or <code>ADDON_DOWNGRADE</code>, and the method is <code>shutdown</code> or <code>uninstall</code>. {{ gecko_minversion_inline("22.0") }}</td> - </tr> - </tbody> -</table> - -<div class="note"> -<p><strong>Note:</strong> An add-on may be upgraded/downgraded at application startup, in this case the <code>startup</code> method reason is <code>APP_STARTUP</code>, and the <code>oldVersion</code> property is not set. Also be aware that in some circumstances an add-on upgrade/downgrade may occur without the <code>uninstall</code> method being called.</p> -</div> - -<h2 id="Add-on_debugger">Add-on debugger</h2> - -<p>From Firefox 31 onwards, you can use the <a href="/en-US/Add-ons/Add-on_Debugger">Add-on Debugger</a> to debug bootstrapped add-ons.</p> - -<h2 id="Localization_(L10n)">Localization (L10n)</h2> - -<p>Localizing bootstrapped add-ons is very much the same since Firefox 7, as that is when chrome.manifest compatibility landed.</p> - -<h3 id="JS_and_JSM_Files_-_Using_Property_Files">JS and JSM Files - Using Property Files</h3> - -<p>To localize your .js and .jsm files you have to use <a href="/en-US/docs/XUL/Tutorial/Property_Files">property files</a>.</p> - -<p>The absolute minimum needed here is:</p> - -<ol> - <li>File: install.rdf</li> - <li>File: chrome.manifest</li> - <li>File: bootstrap.js</li> - <li>Folder: locale - <ol> - <li>Folder: VALID_LOCALE_HERE - <ol> - <li>File: ANYTHING.properties</li> - </ol> - </li> - </ol> - </li> -</ol> - -<p>In the locale folder you must have folders for each of the languages you want to provide; each folder must be named a valid locale (ex: en-US). Inside this folder must be a property file. Inside the chrome.manifest file these locale must be defined. For example if you had a subfolder of en-US in locale folder your chrome.manifest file will have to contain: <code>locale NAME_OF_YOUR_ADDON en-US locale/en-US/</code></p> - -<p>Here is an example: <a href="https://github.com/Noitidart/l10n/tree/properties">GitHub :: l10n-properties</a> - on startup of this add-on it will show a prompt saying USA or Great Britain, which ever it deems closest to your locale. You can test different locale by going to about:config and changing preference of general.useragent.locale to en-US and then to en-GB and disabling then re-enabling the add-on.</p> - -<h3 id="XUL_and_HTML_Files_-_Using_Entities_from_DTD_Files">XUL and HTML Files - Using Entities from DTD Files</h3> - -<p>Many times HTML pages are used, however they cannot be localized with DTD files. There are three changes you must make:</p> - -<ol> - <li>You have to change the HTML file's extension to be <code>.xhtml</code></li> - <li>The doctype must be defined point to a DTD file in your locale folder such as: <code><!DOCTYPE html SYSTEM <span class="pl-s1">"chrome://l10n/locale/mozilla.dtd"</span>></code></li> - <li>Must add xmlns attribute to html tag for example: <code><<span class="pl-ent">html</span> <span class="pl-e">xmlns</span>=<span class="pl-s1"><span class="pl-pds">"</span>http://www.w3.org/1999/xhtml<span class="pl-pds">"</span></span>></code></li> - <li>If you have multiple DTD files read on here: <a href="/en-US/docs/Using_multiple_DTDs">Using multiple DTDs</a></li> -</ol> - -<p>The bare minimum needed is:</p> - -<ol> - <li>File: install.rdf</li> - <li>File: chrome.manifest</li> - <li>File: bootstrap.js</li> - <li>Folder: locale - <ol> - <li>Folder: VALID_LOCALE_HERE - <ol> - <li>File: ANYTHING.dtd</li> - </ol> - </li> - </ol> - </li> -</ol> - -<p>The chrome.manifest file must include a definition for content for example: <code>content NAME_OF_YOUR_ADDON ./</code></p> - -<p>The chrome.manifest file must also include a line pointing to the locale, just like in the above property section, if you had a folder named en-US in locale, the chrome.manifest file should contain: <code>locale NAME_OF_YOUR_ADDON en-US locale/en-US/</code></p> - -<p>Here is an example add-on that opens an HTML page and a XUL page on install: <a href="https://github.com/Noitidart/l10n/tree/c456cc82a8a66b6d552cd8c2299cd2babc383af0">GitHub :: l10n-xhtml-xul</a>. Here is an example showing how to use a localized HTML page as an options page: <a href="https://github.com/Noitidart/l10n/tree/html-options">GitHub :: l10n-html-options</a>. You can go to about:config and change the value of the preference <code>general.useragent.locale </code>to <code>en-US</code> and then to <code>en-GB</code> and then reload the open pages to see the localization change.</p> - -<h2 id="Further_reading">Further reading</h2> - -<ul> - <li><a href="https://developer.mozilla.org/en-US/Add-ons/How_to_convert_an_overlay_extension_to_restartless">How to convert an overlay extension to restartless</a> a step by step guide. Some code samples are provided. The page is based on and expanded from Dave Garrett's step-by-step guide to <a class="external" href="https://flagfox.wordpress.com/2014/01/19/writing-restartless-addons/">convert an old overlay based extension into a restartless addon</a>.</li> - <li>Dave Townsend provides a basic code base to <a class="external" href="http://www.oxymoronical.com/blog/2011/01/Playing-with-windows-in-restartless-bootstrapped-extensions">load UI for each opened window</a> in a bootstrapped extension.</li> - <li>Mark Finkle provides some simple example code for <a class="external" href="http://starkravingfinkle.org/blog/2011/01/bootstrap-jones-adventures-in-restartless-add-ons/">restartless add-ons in mobile Firefox</a>, <a class="external" href="http://starkravingfinkle.org/blog/2011/01/restartless-add-ons-more-resources/">adding resources (like the options window)</a> to bootstrapped extensions and <a class="external" href="http://starkravingfinkle.org/blog/2011/01/restartless-add-ons-%e2%80%93-default-preferences/">using default preferences</a> without a <code>default/preferences/prefs.js</code> file.</li> - <li>Kris Maglione writes about <a class="external" href="http://maglione-k.users.sourceforge.net/bootstrapped.xhtml">the requirements for the cleanup procedures</a> in bootstrapped extensions.</li> - <li>Edward Lee shows off some <a class="external" href="http://ed.agadak.net/2011/01/restartless-add-on-example-code">helpful coding patterns and examples</a> you can use in your bootstrapped add-on.</li> - <li>Documentation for <a href="/en-US/docs/Extensions/Inline_Options">Inline Options</a> in Firefox 7 and later.</li> -</ul> diff --git a/files/ru/mozilla/add-ons/рекомендации_по_повышению_производительности_расширений/index.html b/files/ru/mozilla/add-ons/рекомендации_по_повышению_производительности_расширений/index.html deleted file mode 100644 index 4442856118..0000000000 --- a/files/ru/mozilla/add-ons/рекомендации_по_повышению_производительности_расширений/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Рекомендации по повышению производительности расширений -slug: Mozilla/Add-ons/Рекомендации_по_повышению_производительности_расширений -tags: - - Быстродействие - - Лучшие практики - - Плагины - - Производительность - - Расширения - - Руководство -translation_of: Archive/Add-ons/Performance_best_practices_in_extensions ---- -<p>Одно из самых значительных преимуществ браузера Firefox заключается в его чрезвычайной расширяемости. Благодаря дополнениям можно сделать практически что угодно. Есть и обратная сторона медали: плохо написанные расширения могут оказывать серьезное влияние на просмотр сайтов, в том числе и на производительность браузера Firefox в целом. Эта статья предлагает вашему вниманию лучшие практики и рекомендации, которые позволят повысить производительность и быстродействие не только вашего расширения, но также и самого браузера Firefox.</p> - -<h2 id="Увеличиваем_скорость_запуска">Увеличиваем скорость запуска</h2> - -<p>Расширения загружаются и выполняются всякий раз, когда открывается новое окно браузера. Это значит, что при каждом открытии окна ваше расширение может задерживать вывод желаемого контента на экран. Есть несколько способов уменьшения времени задержки вывода пользовательского контента.</p> - -<h3 id="Загружайте_только_то_что_вам_действительно_требуется">Загружайте только то, что вам действительно требуется</h3> - -<p>В момент запуска плагина не следует загружать то, что понадобится только после нажатия пользователем на кнопку, или то, что понадобится только при включенной опции, если сейчас она выключена. Если ваше расширение предоставляет функции, доступные только после авторизации пользователя в сервисе, не следует загружать ресурсы для этих функций до тех пор, пока пользователь фактически не пройдет процедуру авторизации.</p> - -<h3 id="Используйте_модули_JavaScript">Используйте модули JavaScript</h3> - -<p>Вы можете создать собственный <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Using" title="/en-US/docs/Mozilla/JavaScript_code_modules/Using">модуль JavaScript</a>, объединив набор функций, которые нужны только в определенных ситуациях. Это упростит загрузку блоков кода вашего расширения на лету, вместо загрузки всего сразу.</p> - -<p>Несмотря на то, что модули JavaScript могут быть чрезвычайно полезны и давать прирост производительности, они должны применяться разумно. Загрузка модулей все же несет небольшие затраты, поэтому разбивка кода на ненужные уровни может привести к негативным результатам. Код должен быть разбит на модули так, чтобы от этого улучшалась его понятность, а загрузка крупных или требующих больших затрат блоков кода могла быть значительно отсрочена.</p> - -<h3 id="Отсрочивайте_все_что_возможно">Отсрочивайте все, что возможно</h3> - -<p>У большинства расширений есть обработчик события загрузки в главном оверлее, который выполняет функцию при запуске браузера. Выполняйте в этой функции как можно меньше кода. Окно браузера зависает до тех пор, пока обработчик загрузки вашего плагина полностью не выполнится, поэтому чем больше в нем осуществляется действий, тем медленнее Firefox кажется пользователю.</p> - -<p>Если что-то можно сделать пусть даже на долю секунды позже, используйте методы {{ interface("nsITimer") }} или {{ domxref("window.setTimeout()") }} для того, чтобы отложить это действие на потом. Даже короткая отсрочка может иметь большое влияние на быстродействие.</p> - -<h2 id="Общие_вопросы_производительности">Общие вопросы производительности</h2> - -<h3 id="Избегайте_утечек_памяти">Избегайте утечек памяти</h3> - -<p>Утечки памяти вынуждают сборщик мусора и сборщик циклических ссылок (cycle collector) выполнять больший объем работы, а это в значительной мере сказывается на быстродействии.</p> - -<p>Зомби-ячейки (zombie compartments) - это особый вид утечки памяти, который можно легко выявить. Загляните на страницу<a href="/en/Zombie_compartments" title="en/Zombie_compartments"> </a><a href="/en/Zombie_compartments" title="en/Zombie_compartments">Зомби-ячейки</a>, особенно раздел <a href="/en/Zombie_compartments#Proactive_checking_of_add-ons" title="en/Zombie_compartments#Proactive_checking_of_add-ons">Проактивная проверка плагинов</a>.</p> - -<p>Ознакомьтесь с разделом <a href="/en/Extensions/Common_causes_of_memory_leaks_in_extensions" title="en/Extensions/Common_causes_of_zombie_compartments_in_extensions">Распространенные причины утечек памяти в расширениях</a>, чтобы узнать, как избежать возникновения зомби-ячеек и других видов утечек.</p> - -<p>Помимо поиска различных видов утечек памяти, стоит также проверить функционал вашего расширения и содержимое вкладки about:memory на предмет избыточного потребления памяти. Например, <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=719601" title="https://bugzilla.mozilla.org/show_bug.cgi?id=719601">ошибка 719601</a> приводила к тому, что ячейка JavaScript содержала сотни мегабайт памяти, что гораздо больше, чем обычно.</p> - -<h3 id="Избегайте_написания_медленных_таблиц_стилей_CSS">Избегайте написания медленных таблиц стилей CSS</h3> - -<ul> - <li>Прочитайте руководство <a href="/en/CSS/Writing_Efficient_CSS" title="en/CSS/Writing_Efficient_CSS">"Разработка эффективных таблиц стилей CSS"</a>.</li> - <li>Помните, что каждый селектор в вашем правиле, который может совпадать с множеством различных узлов - это источник снижения производительности при поиске совпадения или выполнении динамического обновления элемента. Это особенно плохо, если селектор может динамически запускать и останавливать поиск совпадений. Остерегайтесь использования псевдо-класса ":hover".</li> -</ul> - -<h3 id="Избегайте_использования_технологии_DOM_Mutation_Events">Избегайте использования технологии DOM Mutation Events</h3> - -<p>Технология прослушивания изменений DOM чрезвычайно затратна по ресурсам, ее использование приводит к значительному ухудшению быстродействия. Так как она официально признана нерекомендуемой для применения, при этом имеется <a href="/en-US/Add-ons/Overlay_Extensions/XUL_School/Appendix_F:_Monitoring_DOM_changes">множество аналогов</a>, ее следует всячески избегать.</p> - -<h3 id="Используйте_методы_ленивой_загрузки">Используйте методы ленивой загрузки</h3> - -<p><a href="/en/JavaScript_code_modules/XPCOMUtils.jsm#Methods" title="en/JavaScript_code_modules/XPCOMUtils.jsm#Methods">JavaScript-модуль XPCOMUtils</a> предоставляет два метрода ленивой (отложенной) загрузки:</p> - -<ul> - <li><code>defineLazyGetter()</code> определяет для указанного объекта функцию, которая действует как метод доступа get, возвращающий объект, который будет создан в момент первого обращения к нему. <a class="external" href="http://mxr.mozilla.org/mozilla-central/search?string=defineLazyGetter">Подробнее см. примеры</a>.</li> - <li><code>defineLazyServiceGetter()</code> определяет для указанного объекта функцию, которая действует как метод доступа get для сервиса. Сервис не будет получен до первого его использования. Например, {{ LXRSearch("ident", "string", "defineLazyServiceGetter", "Look through the source") }}.</li> -</ul> - -<p>Множество распространенных сервисов уже закэшированы для вас в модуле <a href="/en-US/JavaScript_code_modules/Services.jsm">Services.jsm</a>.</p> - -<h3 id="Используйте_ассинхронный_вводвывод">Используйте ассинхронный ввод/вывод</h3> - -<p>Это следует подчеркнуть: никогда не выполняйте синхронный ввод/вывод в главном потоке.</p> - -<p>Любой ввод/вывод в главном потоке, будь то активность жесткого диска или сетевая активность, может стать причиной серьезных проблем с временем отклика интерфейса пользователя.</p> - -<ul> - <li>Никогда не используйте синхронные запросы XMLHttpRequests.</li> - <li>Используйте модуль <a href="/en-US/JavaScript_code_modules/NetUtil.jsm">NetUtils.jsm</a>, который предоставляет возможность асинхронного чтения и копирования файлов.</li> - <li>Никогда не работайте с базами данных SQLite синхронно. Вместо этого используйте <a href="/en-US/Storage#Asynchronously">асинхронный API</a>.</li> - <li>Выполняясь одна за другой, асинхронные операции зачастую можно значительно упростить, используя объект <a href="/en-US/Add-ons/Techniques/Promises">Promises</a>.</li> -</ul> - -<h3 id="Избегайте_событий_перемещения_мыши">Избегайте событий перемещения мыши</h3> - -<p>Избегайте использования обработчиков событий мыши, включая такие события, как mouseover, mouseout, mouseenter, mouseexit, и особенно mousemove. Они возникают довольно часто, поэтому их обработчики способны в значительной мере повысить нагрузку на процессор.</p> - -<p>Когда без них обойтись не получается, во время обработки события должен выполняться минимум вычислений, а существенная работа приостановлена. Обработчики должны добавляться к наиболее вероятному элементу, и удаляться, если непосредственно не требуются в данный момент.</p> - -<h3 id="Избегайте_анимированных_изображений">Избегайте анимированных изображений</h3> - -<p>Анимированные изображения значительно более ресурсозатратны, чем считалось ранее, особенно когда используются в элементах {{ XULElem("tree") }}.</p> - -<h3 id="Рассмотрите_возможность_применения_Chrome_Workers">Рассмотрите возможность применения Chrome Workers</h3> - -<p>Вы можете использовать {{ domxref("ChromeWorker") }} для выполнения длительных задач или обработки данных.</p> - -<h2 id="Смотрите_также">Смотрите также</h2> - -<ul> - <li><a href="/en/Performance/Measuring_add-on_startup_performance" title="en/Measuring Add-on Startup Performance">Измерение скорости запуска дополнения</a></li> - <li><a class="external" href="http://blog.mozilla.com/addons/2010/06/14/improve-extension-startup-performance/" title="http://blog.mozilla.com/addons/2010/06/14/improve-extension-startup-performance/">How to Improve Extension Startup Performance</a></li> - <li><a href="/en-US/docs/Performance">Общая информация об измерении и повышении производительности</a></li> -</ul> diff --git a/files/ru/mozilla/bugzilla/index.html b/files/ru/mozilla/bugzilla/index.html deleted file mode 100644 index d5ed0cb163..0000000000 --- a/files/ru/mozilla/bugzilla/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Bugzilla -slug: Mozilla/Bugzilla -tags: - - Bugzilla - - QA - - Разработка Mozilla - - 'Разработка Mozilla:Инструменты' - - инструменты -translation_of: Mozilla/Bugzilla ---- -<p><a class="link-https" href="https://bugzilla.mozilla.org/">bugzilla.mozilla.org</a> (часто используются аббревиатуры b.m.o и bmo) — это система отслеживания багов Mozilla.org. Это по сути база данных для учета багов и запросов по улучшению Firefox, Thunderbird, SeaMonkey, Camino, и других проектов mozilla.org.</p> - -<div class="row topicpage-table"> -<div class="section"> -<h2 class="Documentation" id="Documentation" name="Documentation">Документация к 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">Что можно, а что нельзя делать в Bugzilla</a> [en]</dt> - <dd>Советы, как использовать Bugzilla, а также вещи которых следует избегать на b.m.o. [en]</dd> - <dt><a class="link-https" href="https://bugzilla.mozilla.org/page.cgi?id=etiquette.html">Этикет Bugzilla</a> [en]</dt> - <dd>Руководство по этикету. Оно поможет Вам понять как следует вести себя на b.m.o., что такое хорошие манеры и вежливость и как это позволит решить Вашу проблему быстрее.</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">Как понять, не был ли баг уже зарегистрирован</a> [en]</dt> - <dd>Полезно (но не обязательно) проверить, не зарегистровал ли уже кто-нибудь проблему, о которой Вы собираетесь сообщить. И здесь можно узнать как это сделать.</dd> - <dt><a href="/en-US/docs/Mozilla/QA" title="/en-US/docs/Mozilla/QA">Контроль качества</a> [en]</dt> - <dd>Документация касательно контроля качества в Mozilla.</dd> - <dt><a href="/en-US/docs/Mozilla/QA/Bug_writing_guidelines" title="/en-US/docs/Mozilla/QA/Bug_writing_guidelines">Руководство по описанию багов</a> [en]</dt> - <dd>Как правильно, и понятно для других описать баг, чтобы команда разработки могла быстро приступить к его исправлению или отслеживанию.</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">Как отправить исправление/патч</a> [en]</dt> - <dd>Если Вы исправили баг, или реализовали новую функцию, то нужно внести Ваше исправление в дерево проекта, чтобы он стал частью продукта. Как это сделать, можно узнать здесь.</dd> -</dl> - -<p><span class="alllinks"><a href="/en-US/docs/tag/Bugzilla" title="/en-US/docs/tag/CSS">Смотреть остальное…</a> [en]</span></p> -</div> - -<div class="section"> -<h2 id="Другие_материалы">Другие материалы</h2> - -<ul> - <li><a class="external" href="http://www.bugzilla.org/about/">Введение в Bugzilla</a></li> - <li><a class="external" href="http://blog.johnath.com/2010/02/04/bugzilla-for-humans">Bugzilla for humans</a></li> - <li><a class="external" href="http://www.squarefree.com/bugzilla/quicksearch-help.html">Bugzilla QuickSearch help page</a> [en]. QuickSearch это быстрый, легкий и очень эффективный способ запросов к bugzilla.</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> [en] — расширение для управления тестами</li> - <li><a class="external" href="http://www.bugzilla.org">bugzilla.org</a> - сайт проекта</li> - <li>{{ interwiki('wikipedia', 'Bugzilla', 'wikipedia:Bugzilla') }} - общее описание Bugzilla (not specific to Mozilla projects)</li> -</ul> - -<h2 class="Tools" id="Tools" name="Tools">Инструменты</h2> - -<ul> - <li><a href="http://harthur.github.io/bugzilla-todos/" title="http://harthur.github.io/bugzilla-todos/">Bugzilla Todos</a> lists review and flag requests, patches to check in, unfulfilled requests you made of other people, and assigned bugs.</li> -</ul> -</div> -</div> diff --git a/files/ru/mozilla/chrome_registration/index.html b/files/ru/mozilla/chrome_registration/index.html deleted file mode 100644 index 7bf9bfb843..0000000000 --- a/files/ru/mozilla/chrome_registration/index.html +++ /dev/null @@ -1,358 +0,0 @@ ---- -title: Chrome registration -slug: Mozilla/Chrome_Registration -translation_of: Mozilla/Chrome_Registration ---- -<h2 id="What_is_Chrome.3F" name="What_is_Chrome.3F">Что такое chrome?</h2> - -<p><a href="/en/Chrome" title="en/Chrome">Chrome</a> — это набор всех элементов UI в окне приложения, за исключением самого контента web-страницы. Панели инструментов, строки меню, индикаторы загрузки и панели заголовков окон — все это примеры элементов, которые обычно являются частью chrome.</p> - -<p>Mozilla находит и считывает корневой <code>chrome.manifest</code> файл в поисках расширений и тем оформления.</p> - -<div class="note"> -<p><strong>Примечание:</strong> В версии {{Gecko("1.9.2")}} и старше Mozilla считывает <code>chrome/*.manifest</code> файлы из приложений. Начиная с {{Gecko("2.0")}}, корневой <code>chrome.manifest</code> — <em>единственный</em> используемый манифест; добавить дополнительные манифесты можно с помощью команды <a href="/en/Chrome_Registration#manifest" title="en/Chrome Registration#manifest"><code>manifest</code></a>, прописанной в корневом манифесте.</p> -</div> - -<h2 id="Chrome_Providers" name="Chrome_Providers">Chrome-провайдеры</h2> - -<p>Источник chrome для определенного типа окон (например, для окна браузера) называется chrome-провайдером (<em>англ. provider — поставщик</em>). Провайдеры, или поставщики, работают совместно, чтобы обеспечить полный набор элементов chrome для каждого конкретного окна, начиная от иконок на панелях инструментов, заканчивая файлами описания текста, контента и внешнего вида окна как такового.</p> - -<p>Существует три основных вида ресурсов chrome:</p> - -<dl> - <dt>Content</dt> - <dd>Главный исходный файл для описания окна исходит от провайдера <strong>content</strong>, он может быть любого типа, который сможеть обработать Mozilla. Скорее всего это будет XUL-файл, поскольку XUL спроектирован для описания содержимого окон и диалогов. JavaScript файлы, описывающие UI, также приведены в пакетах провайдера <strong>content</strong>, равно как и большинство XBL файлов сборки.</dd> - <dt>Locale</dt> - <dd>Локализуемые приложения содержат все переводы и связанную с локализацией информацию в провайдере <strong>locale</strong>. Такой подход позволяет переводчикам переводить только сами chrome-пакеты, не затрагивая основной исходный код. Два основных типа файлов локализации: DTD файлы и Java-подобные файлы свойств.</dd> - <dt>Skin</dt> - <dd>Провайдер <strong>skin</strong> отвечает за предоставление полного набора файлов, описывающих внешний вид chrome. Обычно это CSS файлы и изображения.</dd> -</dl> - -<div class="note"> -<p><strong>Примечание:</strong> Скрипты (включая те, которые найдены в <a href="/en/XBL" title="en/XBL">XBL</a>), загруженные из провайдера skin, не будут запущены на исполнение.</p> -</div> - -<h2 id="The_Chrome_Registry" name="The_Chrome_Registry">Реестр chrome</h2> - -<p>Среда Gecko предоставляет сервис, известный как <em>реестр chrome</em>. Этот сервис обеспечивает преобразование имен из chrome-пакетов в физическое расположение этих пакетов на диске.</p> - -<p>Реестр chrome настраиваем и имеет строгую структуру, поэтому пользователь может устанавливать сторонние провайдеры chrome, и, таким образом, изменять внешний вид и локализацию. <span id="result_box" lang="ru"><span class="hps">Это делается при помощи</span> <span class="hps">XPInstall</span> <span class="hps">и</span> <span class="hps">менеджера расширений</span><span>.</span></span></p> - -<p>Для того, чтобы сообщить реестру о новом доступном chrome, используется текстовый манифест: файл <code>chrome.manifest</code> в корне расширения, темы, или приложения XULRunner.</p> - -<p>Текстовый манифест использует простую строчную разметку: каждая строка парсится отдельно. Если строка определяется реестром как валидная, то он выполняет действие или команду, описываемые этой строкой. Иначе строка игнорируется, а в консоль выводится сообщение об ошибке.</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>Примечание:</strong> В названии пакета недопустимо использование символов @ # ; : ? /</p> -</div> - -<p></p><div class="warning">Firefox 2, Thunderbird 2 и SeaMonkey 1.1 не увидят chrome, если <code>packagename</code> содержит название, состоящее из букв разных регистров. Если пример выше содержит <code>packagename</code> <strong>C</strong>amel<strong>C</strong>ase<strong>P</strong>ackage, возникнет ошибка, примерное содержание: "No chrome registered for chrome://<strong>c</strong>amel<strong>c</strong>ase<strong>p</strong>ackage/path/to/files". Firefox 3, Thunderbird 3 и SeaMonkey 2 поддерживают название из букв разного регистра. Баг разрешен в Mozilla 1.9; см. {{bug(132183)}}.</div><p></p> - -<h2 id="Manifest_Instructions" name="Manifest_Instructions">Инструкции в манифесте</h2> - -<h3 id="comments" name="comments">Комментарии</h3> - -<p>Комментарием считается любая строчка, начинающаяся с символа решётки ('#'). Всё написанное в комментарии игнорируется.</p> - -<pre class="eval" style="white-space: pre-wrap;"># эта строчка - комментарий. здесь можно писать что угодно -</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>Эта инструкция загрузит вспомогательный манифест. Это может быть полезно для разделения компонента и инструкции регистрации chrome, или разделения регистрационных данных, зависящих от платформы.</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>Даёт Mozilla указание к регистрации и использованию бинарного компонента. Эта инструкция должны комбинироваться с флагом abi (<em>двоичного интерфейса приложений</em>), так как бинарные компоненты зависят от ABI. Вплоть <a href="/en/XPCOM/XPCOM_changes_in_Gecko_2.0" title="en/XPCOM/XPCOM changes in Gecko 2.0">до Firefox 4</a> файлы в директориях компонентов регистрировались автоматически.</p> - -<h3 id="interfaces">interfaces</h3> - -<p>{{ gecko_minversion_inline("2.0b2") }}</p> - -<pre>interfaces <em>component/mycomponent.xpt [flags]</em> -</pre> - -<p>Даёт указание загрузить информацию об интерфейсе из typelib-файла, созданного XPIDL.</p> - -<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">до Firefox 4</a> файлы в директориях компонентов регистрировались автоматически.</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>Даёт Mozilla CID компонента, реализованного компонентом XPCOM на JavaScript или любом другом поддерживаемом языке. ClassID {0000...} должен совпадать с ClassID компонента. Для генерации уникального ClassID, можно возпользоваться любым UUID генератором.</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>Сопостовляет читабельный ID договора с ClassID для точной реализации. <span id="result_box" lang="ru"><span class="hps">Обычно</span> <span class="hps">ID</span> <span class="hps">договора работает в паре</span> <span class="hps">с</span> объявлением <span class="hps">компонента</span><span>, указанным непосредственно перед записью <strong>contract</strong>.</span></span></p> - -<h3 id="category">category</h3> - -<p>{{ gecko_minversion_inline("2.0b2") }}</p> - -<pre>category <em>category entry-name value [flags]</em> -</pre> - -<p>Регистрирует запись в <a href="/en/XPCOM_Interface_Reference/nsICategoryManager" title="en/XPCOM Interface Reference/nsICategoryManager">менеджер категорий</a>. Особенности формата и значения записей категорий зависят от категории.</p> - -<h3 id="content" name="content" style="min-height: 0;">content</h3> - -<p>Пакет <strong>content</strong> регистрируется строчкой</p> - -<pre>content <em>packagename</em> <em>uri/to/files/</em> <em>[flags]</em> -</pre> - -<p>Это нужно для объявления пути, используемого при разрешении URI типа <code>chrome://<em>packagename</em>/content/...</code>. Этот URI может быть как абсолютным, так и относительным по отношению к манифеста. Внимание: он должен заканчиваться слэшем ('/').</p> - -<h3 id="locale" name="locale">locale</h3> - -<p>Регистрация пакета локализации происходит при помощи строки</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>Такая инструкция зарегистрирует пакет локализации при разрешении URI типа chrome://<em>packagename</em>/locale/... . Обычно localename это текстовой идентификатор страны "ru" или языка-страны "ru-RU". Если для пакета зарегистрировано несколько локализаций, реестр выберет наиболее подходящий для пользователя, учитывая пользовательские настройки языка.</p> - -<h3 id="skin" name="skin">skin</h3> - -<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>Такая инструкция зарегистрирует пакет оформления при разрешении URI типа <a class="external" rel="freelink">chrome://packagename/skin/</a>... . <em>skinname</em> это строка, идентифицирующая установленный скин. Если для пакета зарегистрировано несколько оформлений, реестр выберет наиболее подходящий для пользователя, учитывая пользовательские настройки.</p> - -<h3 id="overlay" name="overlay">overlay</h3> - -<p>Оверлеи XUL регистрируются следующим образом:</p> - -<pre class="eval" style="white-space: pre-wrap;">overlay chrome://<em>URI-to-be-overlaid</em> chrome://<em>overlay-URI</em> <em>[flags]</em> -</pre> - -<h3 id="style" name="style">style</h3> - -<p>Оверлеи стилей (особый CSS-файл, применяющийся к странице chrome) регистрируются следующим образом:</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>Примечание:</strong> Таким образом могут быть использованы только стили, использующие URI chrome://.</div> - -<div class="note"> </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/ru/mozilla/command_line_options/index.html b/files/ru/mozilla/command_line_options/index.html deleted file mode 100644 index c4df2b09ad..0000000000 --- a/files/ru/mozilla/command_line_options/index.html +++ /dev/null @@ -1,473 +0,0 @@ ---- -title: Опции командной строки -slug: Mozilla/Command_Line_Options -translation_of: Mozilla/Command_Line_Options ---- -<p>Опции командной строки используются для определения различных параметров запуска приложений Mozilla. Например, вы можете использовать опции командной строки, чтобы обойти Менеджер Профилей и открыть определенный профиль (если у вас их несколько). Также вы можете управлять тем, как открыть приложения Mozilla, какие компоненты открыть на начальном этапе, и что делать, когда они открываются. На этой странице описаны часто используемые опции и их применение.</p> - -<h2 id="Syntax_Rules" name="Syntax_Rules">Правила синтаксиса</h2> - -<p>Сначала давайте опишем синтаксические правила, которые применяются ко всем опциям.</p> - -<ul> - <li>Параметры команд, содержащие пробелы, должны быть заключены в кавычки, например <code>"Joel User"</code>.</li> - <li>Действия команд не зависят от регистра.</li> - <li>Параметры команд (кроме имени профиля) не зависят от регистра.</li> - <li>Команды и параметры разделяются пробелами.</li> - <li>Для полей сообщений используется синтаксис <em>поле=значение</em>, например: - <ul> - <li><code>to=</code><span class="nowiki"><code>foo@nowhere.net</code></span></li> - <li><code>subject=cool page</code></li> - <li><code>attachment=www.mozilla.org</code></li> - <li><code>attachment='<span class="nowiki">file:///c:/test.txt</span>'</code></li> - <li><code>body=проверьте эту страницу</code></li> - </ul> - </li> - <li>Несколько полей сообщения разделяются запятой <code>(,)</code>, например: <code>"<span class="nowiki">to=foo@nowhere.net,subject=классная страница</span>"</code>. Перед или после разделяющей запятой не должно быть пробелов. Чтобы задать несколько значений для поля, заключите значения в одиночные кавычки <code>(')</code>, например: <code>"<span class="nowiki">to='foo@nowhere.net,foo@foo.de',subject=классная страница</span>"</code> .</li> -</ul> - -<h2 id="How_to_use_command_options" name="How_to_use_command_options">Использование опций командной строки</h2> - -<p>Опции командной строки указываются после команды для запуска приложения. Некоторые опции имеют аргументы. Они указываются после опции командной строки. Некоторые опции имеют сокращения. Например, опция командной строки <code>"-editor"</code> может быть указана в сокращённой форме как <code>"-edit"</code>. (Доступные сокращения описаны в тексте ниже). В некоторых случаях аргументы опций должны быть заключены в кавычки. (Это отмечено в описаниях опций ниже). Могут быть указаны несколько опций командной строки. В общем случае, их синтаксис следующий:</p> - -<pre>application -option -option "argument" -option argument -</pre> - -<h3 id="Примеры">Примеры</h3> - -<p>Следующие примеры иллюстрируют использование опции <code>"-ProfileManager"</code>, которая открывает Менеджер профилей перед запуском Firefox или Thunderbird:</p> - -<h4 id="Windows">Windows</h4> - -<p>Выберите «Выполнить» в меню «Пуск» Windows и введите:</p> - -<pre class="eval">firefox -ProfileManager -</pre> - -<h4 id="Mac_OS_X">Mac OS X</h4> - -<p>Перейдите в Applications > Utilities. Откройте терминал и введите:</p> - -<pre class="eval">/Applications/Firefox.app/Contents/MacOS -./firefox -ProfileManager -</pre> - -<h4 id="Linux">Linux</h4> - -<p>Откройте терминал и введите:</p> - -<pre class="eval">cd <em>Thunderbird</em><var> installation directory</var> -./thunderbird -ProfileManager -</pre> - -<p>Пример выше использует опцию командной строки <code>"-ProfileManager"</code> для почтового клиента Mozilla Thunderbird.</p> - -<h2 id="User_Profile" name="User_Profile">Профиль пользователя</h2> - -<h3 id="-CreateProfile_profile_name" name="-CreateProfile_profile_name"><code>-CreateProfile <var>profile_name</var></code></h3> - -<p>Создаёт новый профиль с именем <code><var>profile_name</var></code> в директории по умолчанию, но не запускает приложение. Значение <code><var>profile_name</var></code> не должно содержать пробелов <code>( )</code>.</p> - -<p>Для успешного использования не должно быть уже запущенных экземпляров приложения или использоваться опция <code>-no-remote</code>.</p> - -<pre class="eval">firefox -CreateProfile JoelUser -</pre> - -<h3 id="-CreateProfile_.22profile_name_profile_dir.22" name="-CreateProfile_.22profile_name_profile_dir.22"><code>-CreateProfile "<var>profile_name</var> <var>profile_dir</var>"</code></h3> - -<p>Создаёт новый профиль <var>profile_name</var> в директории <var>profile_dir</var>, но не запускает приложение. Обратите внимание, что <var>profile_name</var> и <var>profile_dir</var> заключены в кавычки вместе, и разделяются ровно одним пробелом <code>( )</code>.</p> - -<p>Для успешного использования не должно быть уже запущенных экземпляров приложения или использоваться опция <code>-no-remote</code>.</p> - -<div class="note"> -<p><strong>Примечание:</strong> Директория <var>profile_dir</var> не должна быть существующей и вы не должны иметь существующего профиля с именем <var>profile_name</var>.</p> -</div> - -<pre class="eval">firefox -CreateProfile "JoelUser c:\internet\moz-profile" -</pre> - -<h3 id="-ProfileManager_or_-P" name="-ProfileManager_or_-P"><code>-ProfileManager</code></h3> - -<p>Запуск Менеджера профилей. Короткая форма: <code>-P</code> (без имени пользователя).</p> - -<h3 id="-P_.22profile_name.22" name="-P_.22profile_name.22"><code>-P "<var>profile_name</var>"</code></h3> - -<p>Пропускает запуск менеджера профилей и запускает приложение с профилем <var>profile_name</var>. Полезно при работе с несколькими профилями. Обратите внимание, что имя профиля <var>profile_name</var> регистрозависимо. Если имя профиля не указано, будет запущен диспетчер профилей. Вы должны использовать <code>P</code> в верхнем регистре на Linux с версиями меньше, чем 7.x, так как в нижнем регистре это приведёт к запуску в режиме очистки (<span class="short_text" id="result_box" lang="ru"><span class="hps">обнаружения</span> <span class="hps">утечек</span></span> <span class="short_text" id="result_box" lang="ru"><span class="hps">памяти</span></span>). На других платформах допустимо указание как в верхнем, так и в нижнем регистре.</p> - -<pre class="eval">firefox -P "Joel User" -</pre> - -<h3 id="-profile_.22.2Fpath.2Fto.2Fprofile.22" name="-profile_.22.2Fpath.2Fto.2Fprofile.22"><code>-profile "<var>profile_path</var>"</code></h3> - -<p>Запуск с профилем с указанным путём. Только <strong>Firefox</strong>, <strong>Thunderbird</strong> и <strong>SeaMonkey2.x</strong>.</p> - -<p><code>Путь "profile_path"</code> может быть как абсолютным (<code>"<var>/path/to/profile</var>"</code>), так и относительным <code>("<var>path/to/profile</var>"</code>).</p> - -<div class="note"><strong>Примечание: </strong>Указание относительного пути на Mac OS X больше не поддерживается из-за регрессии, начиная с Firefox 4.0 и выше, см. {{ bug(673955) }}.</div> - -<h3 id="-new-instance" name="-new-instance"><code>-new-instance</code></h3> - -<p>Запускает новый экземпляр приложения вместо нового окна в уже запущенном приложении, что позволяет держать одновременно открытыми несколько копий приложения.</p> - -<pre class="eval language-html"><code class="language-html">firefox -new-instance -P "Another Profile"</code></pre> - -<div class="note"> -<p><strong>Примечание: </strong>Недоступно на Windows, см. {{ bug(855899) }}.</p> -</div> - -<h3 id="-no-remote" name="-no-remote"><code>-no-remote</code></h3> - - -<p>Не разрешает принимать или посылать удалённые команды; неявное применение опции <code>-new-instance</code>.</p> - -<pre class="eval">firefox -no-remote -P "Another Profile" -</pre> - -<div class="note"><strong>Примечание: </strong>Начиная с Firefox 9, это действительно означает то, что подразумевается, на всех платформах, <span class="translation-chunk">т.е.</span><span class="translation-chunk"> </span><span class="translation-chunk">экземпляры, созданные</span><span class="translation-chunk"> </span><span class="translation-chunk">с помощью этого</span><span class="translation-chunk"> </span><span class="translation-chunk">параметра</span><span class="translation-chunk"> </span><span class="translation-chunk">не</span><span class="translation-chunk"> </span><span class="translation-chunk">принимают и не</span><span class="translation-chunk"> </span><span class="translation-chunk">отправляют</span><span class="translation-chunk"> </span><span class="translation-chunk">удалённых команд</span>, см. {{ bug(650078) }}. Это означает то, что такие экземпляры не могут быть переиспользованы. <span class="translation-chunk">Также</span><span class="translation-chunk"> </span><span class="translation-chunk">при использовании этого</span><span class="translation-chunk"> </span><span class="translation-chunk">аргумента </span><span class="translation-chunk">в</span><span class="translation-chunk"> </span><span class="translation-chunk">любом случае</span><span class="translation-chunk"> </span><span class="translation-chunk">создаётся новый экземпляр</span><span class="translation-chunk">.</span></div> - - -<h3 id="-migration" name="-migration"><code>-migration</code></h3> - -<p>Запуск приложения с Мастером миграции.</p> - -<h3 id="-override_.2Fpath.2Fto.2Foverride.ini" name="-override_.2Fpath.2Fto.2Foverride.ini"><code>-override <em>/path/to/</em>override.ini</code></h3> - -<p>Загружает указанный файл <code>override.ini</code> для переопределения <code>application.ini</code> ({{ Source("browser/app/application.ini") }}). Это может быть использовано для подавления Мастера миграции при запуске загрузкой следующего файла <code>override.ini</code>. Только <strong>Firefox</strong>.</p> - -<pre class="eval">[XRE] -EnableProfileMigrator=0 -</pre> - -<h2 id="Browser" name="Browser">Браузер</h2> - -<h3 id="-browser" name="-browser"><code>-browser</code></h3> - -<p>Запуск компонента браузера. Только <strong>Firefox</strong> и <strong>SeaMonkey</strong>.</p> - -<h3 id="-url_URL" name="-url_URL"><code>-url <var>URL</var></code></h3> - -<p>Открывает <var>URL</var> в новом окне или вкладке, в зависимости от настроек браузера. Имя опции <code>-url</code> может быть опущено. Допускается указание нескольких URL, разделённых пробелами. Только <strong>Firefox</strong> и <strong>SeaMonkey</strong>.</p> - -<div class="note"><strong>Примечание: </strong>При открытии нескольких URL, Firefox всегда открывает их как вкладки в новом окне.</div> - -<pre class="eval">firefox www.mozilla.com -firefox www.mozilla.com developer.mozilla.org -</pre> - -<h3 id="-private" name="-private"><code>-private</code></h3> - -<p>Открывает Firefox в режиме приватного просмотра. Только <strong>Firefox 3.6</strong> и позже.</p> - -<p>Неприменимо в Ubuntu для <strong>Firefox 20 </strong>и позже.</p> - -<h3 id="-private-toggle" name="-private-toggle"><code>-private-window</code></h3> - -<p>Открывает новое приватное окно существующего экземпляра Firefox. Только <strong>Firefox 20</strong> и позже.</p> - -<h3 id="-private-toggle" name="-private-toggle"><code>-private-window <em>URL</em></code></h3> - -<p>Открывает <em>URL</em> в новом окне в режиме приватности. Если приватное окно уже открыто, будет открыта новая вкладка в существующем окне.<strong> </strong>Только<strong> Firefox 29 </strong>и позже. Не работает в <strong>Firefox 31</strong> на linux mint 17 (страница открывается в неприватном окне).</p> - -<h3 id="-new-tab_URL" name="-new-tab_URL"><code>-new-tab <var>URL</var></code></h3> - -<p>Открывает <var>URL</var> в новой вкладке. Только <strong>Firefox</strong> и <strong>SeaMonkey2.x</strong>.</p> - -<h3 id="-new-window_URL" name="-new-window_URL"><code>-new-window <var>URL</var></code></h3> - -<p>Открывает <var>URL</var> в новом окне. Только <strong>Firefox</strong> и <strong>SeaMonkey2.x</strong>.</p> - -<h3 id="-search_term" name="-search_term"><code>-search <var>term</var></code></h3> - -<p>Поиск <var>term</var> в поисковом движке по умолчанию. Только <strong>Firefox</strong> и <strong>SeaMonkey 2.1</strong> и позже.</p> - -<h3 id="-preferences" name="-preferences"><code>-preferences</code></h3> - -<p>Открывает окно настроек. Только <strong>Firefox</strong> и <strong>SeaMonkey2.x</strong>.</p> - -<h3 id="-setDefaultBrowser" name="-setDefaultBrowser"><code>-setDefaultBrowser</code></h3> - -<p>Устанавливает приложение браузером по умолчанию. Только <strong>Firefox</strong>.</p> - -<h2 id="Mail.2FNews" name="Mail.2FNews">Почта и новости</h2> - -<h3 id="-mail" name="-mail"><code>-mail</code></h3> - -<p>Запускает почтовый клиент. Только <strong>Thunderbird</strong> и <strong>SeaMonkey</strong>.</p> - -<h3 id="-news_news_URL" name="-news_news_URL"><code>-news</code> <var>news_URL</var></h3> - -<p>Запускает новостной клиент. Если указан <var>news_URL</var> (необязательный), открывает указанную группу новостей. Только <strong>Thunderbird</strong> и <strong>SeaMonkey</strong>.</p> - -<pre class="eval">thunderbird -news <span class="nowiki">news://server/group</span> -</pre> - -<h3 id="-compose_message_options" name="-compose_message_options"><code>-compose <var>message_options</var></code></h3> - -<p>Открывает редактор почтовых сообщений. См. <a href="#Syntax_Rules">правила синтаксиса</a>. Только <strong>Thunderbird</strong> и <strong>SeaMonkey</strong>.</p> - -<pre class="eval">thunderbird -compose "<span class="nowiki">to=foo@nowhere.net</span>" -</pre> - -<h3 id="-addressbook" name="-addressbook"><code>-addressbook</code></h3> - -<p>Открывает адресную книгу. Только <strong>Thunderbird</strong> и <strong>SeaMonkey</strong>.</p> - -<h3 id="-options" name="-options"><code>-options</code></h3> - -<p>Открывает окно «Инструменты/Настройки». Только <strong>Thunderbird</strong>.</p> - -<h3 id="-offline" name="-offline"><code>-offline</code></h3> - -<p>Запуск в режиме автономной работы. Только <strong>Thunderbird</strong> и <strong>SeaMonkey</strong>.</p> - -<h3 id="-setDefaultMail" name="-setDefaultMail"><code>-setDefaultMail</code></h3> - -<p>Устанавливает приложение почтовым клиентом по умолчанию. Только <strong>Thunderbird</strong>.</p> - -<h2 id="Calendar" name="Calendar">Календарь</h2> - -<h3 id="-calendar" name="-calendar"><code>-calendar</code></h3> - -<p>Запускает приложение календаря. Только <strong>Sunbird</strong>.</p> - -<h3 id="-subscribe_URL_or_-url_URL" name="-subscribe_URL_or_-url_URL"><code>-subscribe <var>URL</var></code> или <code>-url <var>URL</var></code></h3> - -<p>Подписаться на указанный <var>URL</var>. Только <strong>Sunbird</strong>.</p> - -<h3 id="-showdate_date" name="-showdate_date"><code>-showdate <var>date</var></code></h3> - -<p>Показать ваше расписание на указанную дату <var>date</var>. Только <strong>Sunbird</strong>.</p> - -<pre class="eval">sunbird -showdate 08/04/2008 -</pre> - -<h2 id="Other_Components" name="Other_Components">Другие компоненты</h2> - -<h3 id="-editor_URL_or_-edit_URL" name="-editor_URL_or_-edit_URL"><code>-editor <var>URL</var></code> или <code>-edit <var>URL</var></code></h3> - -<p>Запускает редактор для указанного <var>URL</var> (где <var>URL</var> — необязательный параметр). Только <strong>SeaMonkey</strong>.</p> - -<pre class="eval">seamonkey -edit www.mozilla.org -</pre> - -<h3 id="-jsconsole" name="-jsconsole"><code>-jsdebugger</code></h3> - -<p>Запуск приложения с <a href="/ru/docs/Tools/Browser_Toolbox">панелью инструментов браузера </a>(ранее — отладчик браузера). <span class="short_text" id="result_box" lang="ru"><span class="hps">Это</span> <span class="hps">отличается от</span> <span class="hps">отладчика</span> <span class="hps">Venkman</span></span> (см. опцию <code>-venkman</code>).</p> - -<h3 id="-jsconsole" name="-jsconsole"><code>-jsconsole</code></h3> - -<p>Запускает приложение с открытой <a href="/ru/docs/Error_Console" title="Консоль ошибок">консолью ошибок</a> или, в случае Firefox, <a href="/ru/docs/Tools/Консоль_браузера" title="Консоль браузера">консолью браузера</a>.</p> - -<h3 id="-start-debugger-server_port"><code>-start-debugger-server port</code></h3> - -<p>Только <strong>Firefox</strong>. Запускает сервер отладки на порте <code>port</code>. Разрешает запуск ещё одного экземпляра Firefox для подключения инструментов разработки Firefox к данному экземпляру Firefox. См. статью об <a href="/ru/docs/Tools/Remote_Debugging/Debugging_Firefox_Desktop" title="Отладка Firefox">удалённой отладке Firefox</a>.</p> - -<h3 id="-inspector_URL" name="-inspector_URL"><code>-inspector <var>URL</var></code></h3> - -<p>Запуск <a href="/ru/docs/DOM_Inspector" title="Инспектор DOM">инспектора DOM</a>, если он установлен, и просмотр указанного <var>URL</var> (где <var>URL</var> — необязательный параметр).</p> - -<h3 id="-venkman" name="-venkman"><code>-venkman</code></h3> - -<p>Запуск с отладчиком JavaScript <a href="/en-US/docs/Venkman" title="Venkman">Venkman</a>, если он установлен.</p> - -<h3 id="-venkman" name="-venkman"><code>-purgecaches</code></h3> - -<p>Очистка <span class="translation-chunk">JavaScript</span>-кэша Gecko (движка браузера) при запуске.</p> - -<h3 id="-chat"><code>-chat</code></h3> - -<p>Запуск с IRC-клиентом <a class="link-https" href="https://addons.mozilla.org/ru/firefox/addon/chatzilla/">ChatZilla</a>, если он установлен.</p> - -<h2 id="XULRunner" name="XULRunner">XULRunner</h2> - -<h3 id="-app_.2Fpath.2Fto.2Fapplication.ini" name="-app_.2Fpath.2Fto.2Fapplication.ini"><code>-app <em>/path/to/</em>application.ini</code></h3> - -<p id="--register-global">Запускает новый процесс <a href="/ru/docs/XULRunner" title="XULRunner">XULRunner</a> в расположении <em>path/to</em>. Также работает для <strong>Firefox</strong> версии 3 и выше.</p> - -<h3 id="--register-global_2"><code>--register-global</code></h3> - -<p><span style="line-height: 21px;">Регистрирует XULRunner в системе для всех пользователей. Должен быть запущен с правами root или администратора.</span></p> - -<h3 id="--register-user"><code>--register-user</code></h3> - -<p><span style="line-height: 21px;">Регистрирует XULRunner для отдельного пользователя.</span></p> - -<h3 id="--unregister-global"><code>--unregister-global</code></h3> - -<p><span class="translation-chunk">Отменяет регистрацию</span><span style="line-height: 21px;"> XULRunner для всех пользователей.</span></p> - -<h3 id="--unregister-user"><code>--unregister-user</code></h3> - -<p><span class="translation-chunk">Отменяет регистрацию</span><span style="line-height: 21px;"> </span><span style="line-height: 21px;">XULRunner для отдельного пользователя.</span></p> - -<h3 id="--install-app_pathtomyapplication.(xpixulapp)"><code>--install-app <em>path/to/</em>myapplication.(xpi|xulapp)</code></h3> - -<p><span style="line-height: 1.572;">Устанавливает в системе приложение XULRunner в расположение <em>path/to</em>. Приложения устанавливаются в расположение по умолчанию для вашей системы (<em>Program files</em>|<em>Applications</em>|<em>usr/lib</em>) в папку<em> vendorname/applicationName</em>. Приложения могут быть удалены используемым вашей системой способом.</span></p> - -<pre class="eval" style="margin-top: 0px; margin-bottom: 1.286em; font-size: 14px;">"C:\Program Files\Mozilla XULRunner\1.8.0.4\xulrunner\xulrunner.exe" --install-app "C:\Users\Billdo\Desktop\myapplication.xpi"</pre> - -<pre><span style="font-family: courier new,andale mono,monospace; line-height: normal;">/opt/xulrunner/1.8.0.4/xulrunner/xulrunner --install-app ~/Desktop/myapplication.xulapp</span></pre> - -<pre><span style="font-family: courier new,andale mono,monospace; line-height: normal;"></span><span style="font-family: courier new,andale mono,monospace; line-height: normal;">/Library/Frameworks/XUL.framework/xulrunner-bin --install-app ~/Desktop/myapplication.xpi</span></pre> - -<h2 id="Chrome" name="Chrome">Chrome</h2> - -<h3 id="-chrome_chrome_URL" name="-chrome_chrome_URL"><code>-chrome <var>chrome_URL</var></code></h3> - -<p>Загружает указанный <a href="/ru/docs/Словарь/Chrome" title="Chrome">хром</a>.</p> - -<pre class="eval">firefox -chrome <a class="external" rel="freelink">chrome://inspector/content</a> -</pre> - -<h3 id="-register_chrome_URL" name="-register_chrome_URL"><code>-register <var>chrome_URL</var></code></h3> - -<p>Регистрирует указанный хром, но не запускает приложение.</p> - -<h2 id="Add-ons" name="Add-ons">Дополнения</h2> - -<p>{{ gecko_minversion_note("1.9.2", "Опции <code>-install-global-extension</code> и <code>-install-global-theme</code> были удалены из Gecko 1.9.2 и выше.") }}</p> - -<h3 id="-install-global-extension_.2Fpath.2Fto.2Fextension" name="-install-global-extension_.2Fpath.2Fto.2Fextension"><code>-install-global-extension <var>/path/to/extension</var></code></h3> - -<p>Устанавливает расширение в папку приложения. В качестве параметра указывается путь к расширению. Для установки необходимо иметь права администратора.</p> - -<h3 id="-install-global-theme_.2Fpath.2Fto.2Ftheme" name="-install-global-theme_.2Fpath.2Fto.2Ftheme"><code>-install-global-theme <var>/path/to/theme</var></code></h3> - -<p>То же, что и выше, по отношению к темам. Для установки необходимо иметь права администратора.</p> - -<div class="note"> -<p><strong>Примечание: </strong>Начиная с Firefox 2.0.0.7, использование опций командной строки <code>-install-global-extension</code> и <code>-install-global-theme</code> было ограничено установкой только тех дополнений, которые находятся на локальном или сетевом диске. <span class="translation-chunk">Установка</span><span class="translation-chunk"> напрямую</span><span class="translation-chunk"> </span><span class="translation-chunk">из общего сетевого ресурса</span><span class="translation-chunk"> </span><span class="translation-chunk">больше не</span><span class="translation-chunk"> </span><span class="translation-chunk">разрешается.</span></p> -</div> - -<h3 id="-safe-mode" name="-safe-mode"><code>-safe-mode</code></h3> - -<p>Запускает приложение с отключёнными дополнениями только для данного сеанса. (Расширения не загружаются, но не отключены постоянно в менеджере расширений).</p> - -<h2 id="Locale" name="Locale">Локализация</h2> - -<h3 id="-UILocale_locale" name="-UILocale_locale"><code>-UILocale <var>locale</var></code></h3> - -<p>Запуск с языком пользователького интерфейса, указанным в <var>locale</var>.</p> - -<pre class="eval">firefox -UILocale en-US -</pre> - -<h2 id="Remote_Control" name="Remote_Control">Удаленное управление</h2> - -<h3 id="-remote_remote_command" name="-remote_remote_command"><code>-remote <em>remote_command</em> {{deprecated_inline}}</code></h3> - -<div class="note"> -<p><strong>Примечание:</strong> Эта функция была удалена в Firefox 36.0, восстановлена в 36.0.1 и снова удалена в версии 39.0. См. {{ bug(1080319) }}.</p> -</div> - -<p>Выполняет удалённую команду <var>remote_command</var> в уже запущенном процессе приложения (см. <a class="external" href="http://www.mozilla.org/unix/remote.html">remote control</a>).</p> - -<pre class="eval">firefox -remote "openURL(www.mozilla.org, new-tab)" -</pre> - -<div class="note"> -<p><strong>Примечание:</strong> Эта опция доступна только для UNIX-платформ под управлением X-Windows.</p> -</div> - -<h2 id="Miscellaneous" name="Miscellaneous">Разное</h2> - -<h3 id="-tray" name="-tray"><code><strong>-tray</strong></code></h3> - -<p>Запуск приложения свёрнутым в трей. Полезно при автозапуске.</p> - -<h3 id="-silent" name="-silent"><code>-silent</code></h3> - -<p>Не открывать окна по умолчанию. Полезно при использовании с опциями, открывающими собственные окна, но не препятствующими открыванию окон по умолчанию. Только <strong>Firefox</strong>, <strong>Thunderbird3.x</strong> и <strong>SeaMonkey2.x</strong>.</p> - -<h3 id="-console" name="-console"><code>-console</code></h3> - -<p>Запуск приложения с консолью отладки.</p> - -<div class="note"> -<p><strong>Примечание:</strong> Поддерживается только для Windows.</p> -</div> - -<h3 id="-attach-console"><code>-attach-console</code></h3> - -<p>Записывать сообщения в консоль отладки окна, которое запустило приложение, вместо открытия нового окна для сообщений отладки.</p> - -<div class="note"> -<p><strong>Примечание:</strong> Поддерживается только для Windows.</p> -</div> - -<h3 id="-h_or_-help_or_-.3F" name="-h_or_-help_or_-.3F"><code>-h</code>, <code>-help</code> или <code>-?</code></h3> - -<p>Выводит список всех доступных опций командной строки. Обратите внимание, что на Windows эта опция работает только с перенаправлением <code><span class="nowiki">|more</span></code> ({{ Bug(355889) }}):</p> - -<pre>C:\Program Files\Mozilla Firefox>firefox -help | more</pre> - -<p>Эта опция доступна только из командной строки.</p> - -<h3 id="-v_or_-version" name="-v_or_-version"><code>-v</code> или <code>-version</code></h3> - -<p>Выводит версию приложения. Обратите внимание, что на Windows эта опция работает только с перенаправлением <code><span class="nowiki">|more</span></code> ({{ Bug(355889) }}, см. пример выше). Эта опция доступна только из командной строки.</p> - -<h3 id="-osint" name="-osint"><code>-osint</code></h3> - -<p>Указывает приложению, что оно было запущено из системной консоли. <span class="translation-chunk">Не должно</span><span class="translation-chunk"> </span><span class="translation-chunk">указываться, если</span><span class="translation-chunk"> </span><span class="translation-chunk">вызывающая сторона</span><span class="translation-chunk"> </span><span class="translation-chunk">предоставляет</span><span class="translation-chunk"> </span><span class="translation-chunk">все функциональные возможности, предоставляемые консолью</span><span class="translation-chunk"> </span><span class="translation-chunk">операционной системы</span><span class="translation-chunk"> </span><span class="translation-chunk">при запуске</span><span class="translation-chunk"> </span><span class="translation-chunk">приложения</span> ({{ Bug(384384) }}).</p> - -<h3 id="-requestPending" name="-requestPending"><code>-requestPending</code></h3> - -<p>Указывает приложению, что был послан запрос Windows DDE для открытия ссылки, переданной в командной строке. <span class="translation-chunk">Не должно</span><span class="translation-chunk"> </span><span class="translation-chunk">указываться, если</span><span class="translation-chunk"> </span><span class="translation-chunk">вызывающая сторона</span><span class="translation-chunk"> </span><span class="translation-chunk">предоставляет</span><span class="translation-chunk"> </span><span class="translation-chunk">все функциональные возможности, предоставляемые консолью</span><span class="translation-chunk"> </span><span class="translation-chunk">операционной системы</span><span class="translation-chunk"> </span><span class="translation-chunk">при запуске</span><span class="translation-chunk"> </span><span class="translation-chunk">приложения</span> ({{ Bug(354005) }}).</p> - -<h3 id="Опции_X11">Опции X11</h3> - -<p>Следующие опции доступны только для приложения, собранного и запущенного в системе окон X11/X.org на Linux и других UNIX-подобных системах.</p> - -<h4 id="--displayDISPLAY"><code>--display=DISPLAY</code></h4> - -<p>Установить отображение X для использования.</p> - -<h4 id="--classWM_CLASS"><code>--class=WM_CLASS</code></h4> - -<p>Установить класс ресурсов WM_CLASS окон X11, созданных приложением.</p> - -<h4 id="--sync"><code>--sync</code></h4> - -<p>Сделать все вызовы X синхронными.</p> - -<h4 id="--g-fatal-warnings"><code>--g-fatal-warnings</code></h4> - -<p><span class="short_text" id="result_box" lang="ru"><span class="hps">Сделать</span> <span class="hps">все предупреждения</span> <span class="hps">фатальными.</span></span></p> - -<h2 id="Other_options_need_to_be_documented" name="Other_options_need_to_be_documented">Другие опции, нуждающиеся в документировании</h2> - -<ul> - <li><code>-print-xpcom-dir</code></li> - <li><code>-print-xpcom-dirlist</code></li> - <li><code>-kill</code></li> - <li><code>-killAll</code></li> - <li><code>-f</code></li> - <li><code>-ftimeout</code></li> - <li><code>-fwait</code></li> - <li><code>-unsetDefaultMail</code></li> - <li><code>-foreground</code></li> - <li><code>-new-instance</code></li> - <li>GTK options</li> -</ul> - -<h2 id="References" name="References">Ссылки</h2> - -<ul> - <li><a href="/en-US/docs/Chrome/Command_Line" title="Chrome/Command_Line">Chrome: Command Line</a></li> - <li><a class="external" href="http://www-archive.mozilla.org/quality/browser/front-end/testcases/cmd-line/">Test Documentation for Command-line Features</a> (mozilla.org)</li> - <li>{{ Source("toolkit/xre/nsAppRunner.cpp") }}</li> - <li>{{ Source("browser/components/nsBrowserContentHandler.js") }}</li> - <li>{{ Source("suite/browser/nsBrowserContentHandler.js") }}</li> - <li>{{ Source("mail/components/nsMailDefaultHandler.js") }}</li> - <li><a class="link-https" href="https://wiki.mozilla.org/Installer:Command_Line_Arguments">Installer command line options</a></li> -</ul> - -<div class="originaldocinfo"> -<h2 id="Original_Document_Information" name="Original_Document_Information">Original Document Information</h2> - -<ul> - <li>Author(s): Ben Goodger, Steffen Wilberg, Seth Spitzer, Daniel Wang</li> - <li>Copyright Information: Portions of this content are © 1998–2007 by individual mozilla.org contributors; content available under a Creative Commons license | <a class="external" href="http://www.mozilla.org/foundation/licensing/website-content.html">Details</a>.</li> -</ul> -</div> diff --git a/files/ru/mozilla/connect/index.html b/files/ru/mozilla/connect/index.html deleted file mode 100644 index b2bfb6e752..0000000000 --- a/files/ru/mozilla/connect/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Присоединяйтесь к Mozilla -slug: Mozilla/Connect -tags: - - Landing -translation_of: Mozilla/Connect ---- -<p class="summary">Делайте возможным, вдохновляйте и сотрудничайте, чтобы сделать Веб основной платформой для создания впечатлений на всех подключенных устройствах.</p> - -<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">Блог Hacks</h2> - -<p>Ключевой ресурс для людей разрабатывающих для Открытого Веба, блог Mozilla Hacks содержит новости и обсуждения последних разработок в Веб-технологиях и функциях браузера.</p> - -<div class="callout-link-wrapper"><a class="callout-link ignore-external" href="https://hacks.mozilla.org/" style="white-space: normal;">Прочтите это сейчас </a></div> -</div> -</div> - -<div class="dev-program-callout"> -<div class="callout-link-container"> -<h2 id="Каналы_отзывов">Каналы отзывов</h2> - -<p>У вас есть <a href="http://mzl.la/devtools">великолепная идея для Инструментов Разработки</a>? Дайте нам знать и помогите создать новые возможности!</p> -<a class="callout-link ignore-external" href="http://stackoverflow.com/r/mozilla" style="white-space: normal;"> </a></div> -</div> - -<div class="dev-program-callout"> -<div class="callout-link-container"> -<h2 id="Ломайте_на_MDN">Ломайте на MDN</h2> - -<p>Если вы взламывали код или текст, у нас есть <a href="/ru/docs/MDN/Getting_Started">способы, которыми вы можете сделать MDN лучше</a>. Когда вы создаёте MDN профиль, вы можете показать свои работы здесь и получить ранний доступ к возможностям на MDN до того, как мы их выпустим.</p> - -<div class="callout-link-wrapper"><a class="callout-link" href="/profile/edit" style="white-space: normal;">Присоединиться или Войти </a></div> -</div> -</div> -</div> - -<div class="dev-program-explanation dev-program-block"> -<h2 id="Соединяйтесь_с_Mozilla">Соединяйтесь с Mozilla</h2> - -<p>Разработчики создают будущее, строят сервисы и приложения для людей во всем мире. Цель Mozilla Developer Relations - помочь разработчикам использовать открытые и стандартизированные веб-технологии, чтобы добиться успеха в достижении своих целей. Мы предлагаем помощь и другие ресурсы для достижения этой цели, по различным каналам. Мы приглашаем Вас подключиться, учиться и делиться своими знаниями.</p> - -<p>Свяжитесь с нами через devrel@mozilla.com или на IRC канале irc.mozilla.org #devrel. Также у нас есть новостная рассылка, позволяющая вам оставаться в курсе последних событий в Веб-сфере, веб-приложениях и многом другом. <a href="https://marketplace.firefox.com/developers/#newsletter-signup">Подпишитесь на новостную рассылку Apps & Hacks.</a></p> - -<p>У нас есть много планов и идей для итеративного расширения наших предложений Developer Relations, и мы хотим, чтобы вы стали участником того, что мы делаем! Поэтому <a href="https://hacks.mozilla.org/">подпишитесь на блог Hacks</a> и <a href="https://marketplace.firefox.com/developers/#newsletter-signup">подпишитесь на нашу новостную рассылку</a>!</p> - -<p>Если вы есть на <a href="http://www.twitter.com/MozDevNet">Twitter</a>, <a href="http://www.twitter.com/MozDevNet">подпишитесь на нас</a> и узнавайте об обновлениях документации, работе, возможностях помочь и многом другом.</p> - -<h2 id="Присоединяйтесь_к_Mozilla" style="line-height: 30px;"><strong>Присоединяйтесь к Mozilla</strong></h2> - -<p>Если вы хотите с головой окунуться в <strong>Mozilla</strong>, вы можете присоединиться к <strong>Mozilla </strong>и помочь реализовать <a href="https://www.mozilla.org/mission/">миссию Mozilla - построение лучшего Интернета</a>. Как у разработчика, у вас есть навыки вносить вклад в множество областей, а также возможность их улучшить. Mozilla - проект с открытым исходным кодом, поэтому мы "открыты по умолчанию". Вы можете "просматривать исходники" и внести вклад в наши проекты, такие как браузер Firefox для компьютера и Android, Firefox OS и сайты Mozilla. Вы можете стать частью международного сообщества и получить признание ваших усилий. Вот некоторые преимущества помощи проекту Mozilla.</p> - -<h3 id="Возможность_узнать_что-то_новое"><strong>Возможность узнать что-то новое</strong></h3> - -<div> -<p>В написании кода для проекта с открытым исходным кодом, вы сталкиваесь с проблемами, с которыми не встречались раньше, которые представляют собой возможность для вашего обучения. В проекте с открытым исходным кодом вы можете попробовать новые инструменты и техники. Например, если вы никогда не делали юнит-тестирование, а также не имели разрешения делать так на работе, то написание кода для открытого проекта будеть отличной возможностью узнать об этом больше. Внос вклада в открытый код даёт вам возможность сотрудничать и познакомиться с множеством людей по всему миру, у кого есть похожие интересы. Кроме того, у открытой организации, как Mozilla есть множество помощников, которые могут помочь вам с решением проблем, с которыми вы сталкиваетесь. Если вы только начинаете помогать, вы можете поискать "наставнические" ошибки, где опытный участник предлагает помощь новичку в их исправлении.</p> - -<h3 id="Что_я_получу_если_помогу"><strong>Что я получу, если помогу? </strong></h3> - -<p>Исследуя множество вещей и зарабатывая признание в сообществе - нематериальная выгода вклада в Mozilla. Тогда как, мы не можем гарантировать специфичную материальную выгоду, многие ценные участники получают бесплатную мощь Mozilla и приглашения на события, относящиеся к Mozilla, а также являются первыми в очереди рассматриваемых на стажировку. Кроме того, ваш опыт в помощи открытому проекту поможет вам найти работу. Всё больше и больше работодателей обращают внимание на это. Им было бы приятно видеть, что вы ведёте блог и сотрудничаете в списках рассылки, а также им хотелось увидеть вас как помощника в открытом проекте. Также это поможет вам с секцией опыта работы в вашем резюме.</p> - -<h3 id="Как_вы_можете_помочь_Mozilla"><strong>Как вы можете помочь Mozilla</strong></h3> - -<p>Если много областей проектов, в которых вы можете помочь Mozilla. Вы можете найти текущий, полный список на странице Mozilla <a href="https://www.mozilla.org/contribute">Станьте волонтёром</a>. Некоторые области, которые могут быть вам интересны, как разработчику:</p> - -<ul> - <li><a href="http://www.whatcanidoformozilla.org/">Кодинг</a></li> - <li><a href="http://www.whatcanidoformozilla.org/">Веб-разработка</a></li> - <li><a href="/ru/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">Дополнения</a></li> - <li><a href="https://wiki.mozilla.org/Marketplace/Contributing/Apps">Приложения</a></li> - <li><a href="/ru/docs/MDN/Getting_started">Документация разработчика (здесь на MDN)</a></li> -</ul> -</div> -</div> - -<div class="column-container dev-program-block"> -<div class="column-half" id="Developer_discussions"> </div> -</div> - -<p class="dev-program-block"><img alt="Разработчики на семинаре Firefox OS в Мадриде." src="https://mdn.mozillademos.org/files/7479/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="Где_находится_Mozilla">Где находится Mozilla?</h2> - -<p><a class="heading-link" href="https://www.mozilla.org/ru/contribute/events/">Просмотреть участников и детали на нашей странице Событий... </a></p> -</div> - -<div class="column-5"> -<h2 id="Другие_ресурсы">Другие_ресурсы</h2> - -<ul class="no-bullets"> - <li><a href="http://www.youtube.com/user/mozhacks">Mozilla Hacks на YouTube</a> - - <ul> - <li>видео о <a href="http://www.youtube.com/playlist?list=PLo3w8EB99pqIHIUUv08hBCHq1OgPKhdo0">Firefox OS</a></li> - <li>видео о <a href="http://www.youtube.com/playlist?list=PLo3w8EB99pqLZNY22xKbTEzMfYo9PXAlm">Инструментах разработки Firefox</a></li> - </ul> - </li> - <li><strong>Следите за нами на Twitter</strong> - <ul class="no-bullets"> - <li><a href="https://twitter.com/mozdevnet">@MozDevNet</a>: Новости и замечания по MDN</li> - <li><a href="https://twitter.com/mozhacks">@mozhacks</a>: Что нового на блоге Hacks</li> - <li><a href="https://twitter.com/mozappsdev">@mozappsdev</a>: Для разработчиков веб-приложений</li> - <li> </li> - </ul> - </li> -</ul> -</div> -</div> diff --git a/files/ru/mozilla/connect_clone/index.html b/files/ru/mozilla/connect_clone/index.html deleted file mode 100644 index 516f788f7f..0000000000 --- a/files/ru/mozilla/connect_clone/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Connect with Mozilla -slug: Mozilla/Connect_clone ---- -<div class="summary"> -<p><span class="seoSummary">Enable, inspire and collaborate to make the Web the primary platform used to create experiences across all connected devices.</span></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>A key resource for people developing for the Open Web, the Mozilla Hacks blog offers news and discussion of the latest in Web technologies and browser features.</p> - -<div class="callout-link-wrapper"><a class="callout-link ignore-external" href="https://hacks.mozilla.org/" style="white-space: normal;">Read it now </a></div> -</div> -</div> - -<div class="dev-program-callout"> -<div class="callout-link-container"> -<h2 id="Help_QA">Help Q&A</h2> - -<p>Discuss the Web and Web apps on Stack Overflow, where you can exchange ideas with other Web developers.<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="Join_MDN">Join MDN</h2> - -<p>Sign up for MDN! You will able to edit the documentation here, create a profile to show off your work, and get access to features over time as we roll them out.</p> - -<div class="callout-link-wrapper"><a class="callout-link" href="/profile/edit" style="white-space: normal;">Join or log in </a></div> -</div> -</div> -</div> - -<div class="dev-program-explanation dev-program-block"> -<h2 id="Connect_with_Mozilla">Connect with Mozilla</h2> - -<p>Developers are creating the future by building services and apps for people all over the world. The goal of Mozilla Developer Relations is to help developers to use open and standardized web technologies to succeed in achieving their goals. In addition to the documentation here on MDN, we offer help and other resources towards this goal, through various channels. We invite you to connect, learn, and share your own knowledge.</p> - -<p>We are offering help through Q&A on Stack Overflow, to solve specific technical issues and challenges you might have. We also have a newsletter keeping you informed on the latest happenings in the web scene around web apps and more. <a href="https://marketplace.firefox.com/developers/#newsletter-signup">Subscribe to the Apps & Hacks newsletter.</a></p> - -<p>We have a lot of plans and ideas for iteratively expanding our Developer Relations offerings, and we want you involved as we do so! So, <a href="http://stackoverflow.com/r/mozilla">follow the tags on Stack Overflow</a>, <a href="https://hacks.mozilla.org/">subscribe to the Hacks blog</a>, <a href="https://marketplace.firefox.com/developers/#newsletter-signup">subscribe to the newsletter, </a>and <a href="/profile/edit">sign up for an account</a>!</p> -</div> - -<div class="column-container dev-program-block"> -<div class="column-half" id="Developer_discussions"> -<h2 id="QA_on_Stack_Overflow_See_all_QA...">Q&A on Stack Overflow <a class="heading-link" href="http://stackoverflow.com/r/mozilla">See all Q&A...</a></h2> - -<p>We have Q&A to discuss challenges and issues when developing, in particular for Firefox OS and the Open Web on mobile. It's available on Stack Overflow under the easy URL <a href="http://stackoverflow.com/r/mozilla">http://stackoverflow.com/r/mozilla</a>.</p> - -<div class="stack-form">Stack form</div> - -<h3 id="Latest_QA_Topics">Latest Q&A Topics</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/7479/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="Where_is_Mozilla_View_attendees_and_details_on_our_Events_page...">Where is Mozilla? <a class="heading-link" href="https://developer.mozilla.org/en/events">View attendees and details on our Events page... </a></h2> - -<p>Here is a listing of events where Mozilla representatives will be speaking. Make sure to talk to them!</p> -</div> - -<div class="column-5"> -<h2 id="Other_resources">Other resources</h2> - -<ul class="no-bullets"> - <li><a href="http://www.youtube.com/user/mozhacks">Mozilla Hacks on YouTube</a> - - <ul> - <li><a href="http://www.youtube.com/playlist?list=PLo3w8EB99pqIHIUUv08hBCHq1OgPKhdo0">Firefox OS videos</a></li> - <li><a href="http://www.youtube.com/playlist?list=PLo3w8EB99pqLZNY22xKbTEzMfYo9PXAlm">Firefox Developer Tools videos</a></li> - </ul> - </li> - <li><a href="https://twitter.com/mozhacks">@mozhacks on Twitter</a></li> -</ul> -</div> -</div> -</div> - -<p> </p> diff --git a/files/ru/mozilla/developer_guide/using_the_vm/index.html b/files/ru/mozilla/developer_guide/using_the_vm/index.html deleted file mode 100644 index fd5287faa2..0000000000 --- a/files/ru/mozilla/developer_guide/using_the_vm/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Using the Mozilla build VM -slug: Mozilla/Developer_guide/Using_the_VM -tags: - - Mozilla - - Гайд -translation_of: Archive/Mozilla/Using_the_VM ---- -<div class="note"> -<p>Примечание: эта статья, по-видимому, не содержит рабочей альтернативы. Пока мы будем выяснять что происходит, возможно, вам стоит взглянуть на <a href="/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Simple_Firefox_build">Building Firefox</a>.</p> -</div> - -<p>Если вы когда-нибудь думали, что вклад в Firefox был бы не плох, но у вас никогда не было времени, чтобы прочитать и следовать нашему <a href="/en-US/docs/Simple_Firefox_build">instructions to setup a build environment</a> или вы хотите избежать внесения изменений в стандартные инструменты и конфигурацию, тогда это может быть для вас полезно. Mozilla предоставляет виртуальную машину (VM), которая совместима с бесплатным <a href="https://www.virtualbox.org/wiki/Downloads">VirtualBox</a>, программным обеспечением для виртуализации (а также другим, в том числе VMWare/VMWare Fusion).</p> - -<p>В этой статье приведены простые инструкции по загрузке, установке и настройке этой среды сборки build machine; как только вы выполните следующие действия, у вас будет готовая виртуальная машина для изменения и настройки Firefox.</p> - -<p>Надеюсь, что эта виртуальная машина особенно поможет разработчикам или потенциальным разработчикам, которые не имеют полной среды разработки C++, доступной для них, а также опытным разработчикам, не имеющим времени на настройку системы сборки, следуя обычным инструкциям.</p> - -<h2 id="Установка_VirtualBox">Установка VirtualBox</h2> - -<p>Посетите <a href="https://www.virtualbox.org/wiki/Downloads">VirtualBox downloads page</a> и загрузите последнюю версию программного обеспечения для вашей операционной системы.</p> - -<div class="note"> -<p>Примечание: если у вас уже установлен продукт виртуализации, такой как VirtualBox, VMWare или VMWare Fusion, вы можете использовать его вместо загрузки новой копии VirtualBox. Просто убедитесь, что у вас есть последняя версия программного обеспечения. Обратите внимание, что Parallels Desktop не поддерживает формат OVF.</p> -</div> - -<h2 id="Загрузка_VM">Загрузка VM</h2> - -<p>Затем загрузите виртуальную машину среды разработки Firefox.</p> - -<p><a class="download-button external ignore-external" href="http://vmimages.mozilla.net/ovf/FirefoxBuildEnv.ova" rel="noopener">Download the VM</a></p> - -<p>SHA-256: 1c84eaf97ea2a9a3c990051306a038da9541a450fd600878e7c1f984fa930f35</p> - -<div class="note"> -<p>Примечание: этот файл занимает около 4,4 ГБ, поэтому его загрузка может занять некоторое время.</p> -</div> - -<h2 id="Установка_VM">Установка VM</h2> - -<p>Когда .ova файл загружен, дважды щелкните по нему. Это запустит процесс импорта виртуальной машины в VirtualBox. Пожалуйста, дайте виртуальной машине минимум 4096 МБ оперативной памяти (8192 Мб или больше, если вы можете) и установите для нее то же количество процессоров, что и у вашего хост-компьютера. Построение Firefox использует много системных ресурсов, и лучше, чтобы он строился как можно быстрее.</p> - -<p><img alt="Screen shot of the Import Virtual Appliance window" src="https://mdn.mozillademos.org/files/8665/firefoxdev3.png" style="height: 447px; width: 600px;"></p> - -<p>После завершения импорта виртуальной машины вы можете выполнить дополнительные настройки, если хотите, или просто загрузить виртуальную машину и дождаться появления рабочего стола Ubuntu. Окно терминала автоматически появится и выполнит некоторые заключительные действия по настройке. Как только они закончат работать, Sublime Text запустится, и вы сможете приступить к работе!</p> - -<p><img alt="Screen shot of the Sublime Text editor running in the VM" src="https://mdn.mozillademos.org/files/8667/firefoxdev1.png" style="height: 317px; width: 600px;"></p> - -<div class="note"> -<p>Примечание: Если вам когда-нибудь понадобятся учетные данные root, используйте "firefox-dev" в качестве пароля. Если вы хотите изменить язык и настройки клавиатуры, следуйте инструкциям в разделе <a href="https://www.howtogeek.com/howto/17528/change-the-user-interface-language-in-ubuntu/">How to change the UI language in Ubuntu</a>.</p> -</div> - -<h2 id="Сборка_Firefox">Сборка Firefox</h2> - -<p>Чтобы собрать Firefox в виртуальной машине, откройте меню Сервис и выберите опцию построить. Процесс сборки начнется, и у вас будет время для выпивки, хорошей еды или, возможно, короткого отпуска, в зависимости от того, насколько быстр ваш компьютер. Тебе нужно набраться терпения.</p> - -<p>После завершения сборки (successfully), выберите пункт Run в меню Tools, чтобы запустить пользовательскую сборку Firefox. Убедитесь, что все работает, как и ожидалось.</p> - -<p>По умолчанию виртуальная машина настроена на создание оптимизированной сборки Firefox. Вы можете легко переключиться на построение для отладки. Просто откройте меню Tools, а затем подменю Build System в нем. В последней из систем сборки, которая появляется в подменю, выберите "Firefox (Debug)". Вот и все! Ваша следующая сборка будет сборкой отладчика.</p> - -<p><img alt="Screen shot showing how to switch between debug; and optimized builds" src="https://mdn.mozillademos.org/files/8669/firefoxdev2.png" style="height: 317px; width: 600px;"></p> - -<h2 id="Работа_в_VM">Работа в VM</h2> - -<p>Отсюда вы работаете в виртуальной машине так же, как и в любом другом месте. Чтобы вытащить последний код из <a href="/en-US/docs/mozilla-central">mozilla-central</a>, просто используйте Mercurial как обычно:</p> - -<pre>hg pull</pre> - -<p>И вы <a href="/en-US/docs/Mozilla/Developer_guide/How_to_Submit_a_Patch">submit your patches</a> так же, как обычно.</p> - -<h2 id="Что_теперь">Что теперь?</h2> - -<p>Теперь, когда вы успешно встроили Firefox в свою новую виртуальную машину, вам может быть интересно, что делать дальше. Отличный способ начать - выбрать небольшую, легко исправляемую ошибку и внести код, который исправит ее. Представьте, как здорово, когда написанный вами код отправляется полумиллиарду пользователей по всему миру!</p> - -<p>Вот некоторые ссылки, которые помогут вам найти то, что вы можете сделать, чтобы сделать Firefox лучше:</p> - -<ul> - <li><a href="http://codefirefox.com/">Code Firefox Lessons</a> предоставляет ряд видео-уроков для новых пользователей Firefox.</li> - <li><a href="https://www.joshmatthews.net/bugsahoy/">Bugs Ahoy!</a> (инструмент, который поможет вам найти ошибки, которые могут вас заинтересовать).</li> - <li><a href="http://firefox-dev.tools/">firefox-dev.tools</a> (инструмент, который поможет вам найти ошибки, связанные с инструментами разработчика Firefox, которые могут вас заинтересовать).</li> - <li><a href="/en-US/docs/Mozilla/Developer_guide">Developer guide</a> (документация о разработке на и для проектов Mozilla).</li> - <li><a class="external" href="https://www.joshmatthews.net/bugsahoy/" title="https://www.joshmatthews.net/bugsahoy/">Mentored bugs</a> получите наставника, который берет на себя обязательство помогать вам на каждом этапе пути. Как правило, в баге должно быть достаточно информации для начала работы. Всякий раз, когда вам нужна помощь, свяжитесь с наставником через Matrix, в самом баге или по электронной почте. Когда вы уберёте ошибку, они помогут вам поместить ваш код в дерево.</li> - <li><a class="link-https" href="https://bugzil.la/sw:%22[good%20first%20bug]%22" title='https://bugzil.la/sw:"[good first bug]"'>"Good" first bugs</a> может быть, они немного устарели, но в какой-то момент своей жизни мы посчитали, что они станут хорошим первым шагом для новичков в Mozilla. Мы находимся в процессе миграции этих ошибок в наставнические ошибки, но более поздние "хорошие первые ошибки" могут быть хорошими отправными точками, если нет подходящих наставнических ошибок.</li> - <li><a href="/en-US/docs/Mozilla/Developer_guide/How_to_Submit_a_Patch">How to submit a patch</a> (информация о том, как создать файл патча и поместить его в исходный код).</li> -</ul> - -<p>Вы также можете задать начальные вопросы в разделе <a href="https://chat.mozilla.org/#/room/#introduction:mozilla.org">Introduction chat room</a> в <a href="https://wiki.mozilla.org/Matrix">Matrix</a>, и любые вопросы по развитию Firefox в <a href="https://chat.mozilla.org/#/room/#developers:mozilla.org">developers</a> room.</p> - -<p>Я сделал этот перевод, как только убедился в его отсутствии. Надеюсь, что и вы внесёте свой посильный вклад в доработку проектов Mozilla!</p> diff --git a/files/ru/mozilla/firefox/developer_edition/index.html b/files/ru/mozilla/firefox/developer_edition/index.html deleted file mode 100644 index 717de47b05..0000000000 --- a/files/ru/mozilla/firefox/developer_edition/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Developer Edition -slug: Mozilla/Firefox/Developer_Edition -tags: - - Beginner - - Firefox - - 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;">Версия Firefox специально для веб-разработчиков.</p> - -<p id=".D0.97.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.B8.D1.82.D1.8C_Firefox_Developer_Edition"><a href=" https://www.mozilla.org/ru/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;">Загрузить Firefox Developer Edition</a></p> - -<hr> -<div class="column-container"> -<div class="column-half"> -<h3 id="Последние_функции_в_Firefox"><strong>Последние функции в Firefox</strong></h3> - -<p>Firefox Developer Edition заменяет канал Aurora в <a href="https://wiki.mozilla.org/Release_Management/Release_Process">процессе разработки браузера Firefox</a>. Как и в Aurora, новые функции будут появлятся в релизе Developer Edition каждые шесть недель, после того как они будут стабилизированы в ночных сборках.</p> - -<p>При использовании версии Developer Edition, вы получаете доступ к инструментам и функциям платформы, опережающих основной релиз Firefox на 12 недель.</p> - -<p><a href="/ru/Firefox/Releases">Откройте, что нового в Firefox Developer Edition</a>.</p> -</div> - -<div class="column-half"> -<h3 id="Другая_тема"><strong>Другая тема</strong></h3> - -<p>Сюда входит более быстрый доступ к инструментам разработчика.</p> - -<h3 id="Экспериментальные_инструменты_разработчика"><strong>Экспериментальные инструменты разработчика</strong></h3> - -<p>Мы включили экспериментальные инструменты, которые еще не готовы для основного выпуска.</p> - -<p>Например, Developer Edition включает <a href="/ru/docs/Tools/Valence">дополнение Valence</a>, которое позволяет подключать <a href="/ru/docs/Tools">Firefox developer tools</a> к другим браузерам, таким как Chrome на Android и Safari на iOS.</p> -</div> -</div> - -<div class="column-container"> -<div class="column-half"> -<h3 id="Отдельный_профиль"><strong>Отдельный профиль</strong></h3> - -<p>Firefox Developer Edition использует профиль, отдельный от других версий Firefox, установленных на вашем компьютере. Это означает, что вы можете легко запустить версию Developer Edition вместе с вашим выпуском или бета-версией Firefox.</p> -</div> - -<div class="note"> -<p><strong>Внимание:</strong> Это означает, что при первом запуске Developer Edition вы увидите совсем не настроенный браузер, без дополнений, закладок, истории. Если хотите иметь одни и те же настройки в Developer Edition и других версиях Firefox, можете <a href="https://support.mozilla.org/ru/kb/how-do-i-set-up-firefox-sync">использовать Firefox Sync</a>.</p> -</div> -</div> - -<div class="column-half"> -<h3 id="Готов_сразу_для_работы"><strong>Готов сразу для работы</strong></h3> - -<p>Мы установили опции по-умолчанию специально для веб-разработчиков. Например, по умолчанию включены отладка {{glossary("chrome","хром")}} и удалённая отладка.</p> -</div> - -<p> </p> diff --git a/files/ru/mozilla/firefox/developer_edition/откат/index.html b/files/ru/mozilla/firefox/developer_edition/откат/index.html deleted file mode 100644 index cfe3fb9dbe..0000000000 --- a/files/ru/mozilla/firefox/developer_edition/откат/index.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Откат -slug: Mozilla/Firefox/Developer_Edition/Откат -translation_of: Mozilla/Firefox/Developer_Edition/Reverting ---- -<div>{{FirefoxSidebar}}</div><h2 id="Откат_темы_Developer_Edition">Откат темы Developer Edition</h2> - -<p><br> - Если вы желаете использовать Developer Edition, но предпочитаете тему 'Australis', использовавшуюся в Firefox and Firefox Beta, вы можете переключиться в привычную тему Firefox: просто откройте панель "Изменить" и нажмите кнопку "Использовать тему Firefox Developer Edition".</p> - -<p>{{EmbedYouTube("OvJwofTjsNg")}}</p> - -<p>Учтите, что тема Developer Edition пока не совместима с облегченными темами. Так что если вы используете облегченную тему, вам необходимо вернуть тему Australis.</p> - -<h2 id="Возврат_к_Firefox_Aurora">Возврат к Firefox Aurora</h2> - -<p><br> - Если вы хотите все pre-Beta возможности в Firefox Developer Edition, но вам не нужны все остальные изменения, то вы можете вернуть что-то наподобие старой доброй Firefox Aurora. При этом также вернутся ваши профиль и данные предыдущей сессии (вкладки и т.д.). Это делается в два приема, и нужно выполнить их в следующей последовательности:</p> - -<ol> - <li>Откройте страницу "Настройки" в Developer Edition, и снимите пометку с "Разрешить одновременный запуск Firefox Developer Edition and Firefox". Вам будет предложено перезапустить браузер.</li> - <li>После перезапуска вы можете отменить тему Developer Edition открыв панель "Изменить" и нажав на кнопку "Использовать тему Firefox Developer Edition".</li> -</ol> - -<p>{{EmbedYouTube("0Ofq-vlw8Qw")}}</p> diff --git a/files/ru/mozilla/firefox/firefox_esr/index.html b/files/ru/mozilla/firefox/firefox_esr/index.html deleted file mode 100644 index b40a987868..0000000000 --- a/files/ru/mozilla/firefox/firefox_esr/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Firefox ESR -slug: Mozilla/Firefox/Firefox_ESR -tags: - - CCK2 - - ESR - - Firefox - - Настольные компьютеры -translation_of: Mozilla/Firefox/Firefox_ESR ---- -<div>{{FirefoxSidebar}}</div><p>Firefox Extended Support Release (ESR) основанный на официальных выпусках Firefox для ПК и ноутбуков используется организациями, которым нужна расширенная поддержка для массового развертывания. ESR отличается от других выпусков отстутсвием добавлений новых возможностей каждые 6 недель. Выпуски ESR поддерживаются на протяжении года и получают только основные обновления безопасности и исправления стабильности. Актуальная ESR версия основана на Firefox 45 от 8 марта 2016. Следующая ESR версия будет иметь 52 номер.</p> - -<p>CCK2 - луший способ для индивидуализации Firefox. Загрузите его <a href="https://mike.kaply.com/cck2/">здесь</a>.</p> - -<p>Мы настоятельно рекомендуем пользователям Firefox ESR подписаться на рассылку <a href="https://www.mozilla.org/en-US/firefox/organizations/">Корпоративной Рабочей Группы (EWG)</a>.</p> diff --git a/files/ru/mozilla/firefox/privacy/index.html b/files/ru/mozilla/firefox/privacy/index.html deleted file mode 100644 index c6a9e69b09..0000000000 --- a/files/ru/mozilla/firefox/privacy/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Privacy -slug: Mozilla/Firefox/Privacy -tags: - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Firefox/Privacy ---- -<div>{{FirefoxSidebar}}</div><p>{{ ListSubpages () }}</p> diff --git a/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedforeign/index.html b/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedforeign/index.html deleted file mode 100644 index 8f0361fba6..0000000000 --- a/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedforeign/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: 'Заблокировано: Все сторонние запросы на доступ к хранилищу' -slug: Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedForeign -tags: - - Куки - - Отслеживание - - Ошибки - - Хранилище - - политика доступа к хранилищу -translation_of: Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedForeign ---- -<div>{{FirefoxSidebar}}</div> - -<h2 id="Сообщение">Сообщение</h2> - -<p>Firefox (англ.):</p> - -<pre class="syntaxbox notranslate">CookieBlockedForeign=Request to access cookies or storage on “X” was blocked because we are blocking all third-party storage access requests and content blocking is enabled.</pre> - -<p>Firefox:</p> - -<pre class="syntaxbox notranslate">CookieBlockedForeign=<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">Запрос на доступ к куке или хранилищу на «X» был заблокирован, в связи с тем, что пользователем заблокированы все сторонние запросы доступа к хранилищу, а также включена блокировка содержимого.</span></span></span></pre> - -<h2 id="Что_не_так">Что не так?</h2> - -<p>Запрос на доступ к куки-файлам или хранилищу был заблокирован, потому что он пришёл из третьей стороны (другого веб-сайта) и блокировка контента включена.</p> - -<p>Доступ может быть изменено или удалено так:</p> - -<ul> - <li>Идти в <em>Настройки > Блокировка контента </em>и похожие</li> - <li>добавление исключения с помощью кнопки <em>Управлять исключениями…</em></li> - <li>choosing the <em>Custom</em> Content Blocking and unchecking the <em>Cookies</em> checkbox</li> -</ul> - -<p>If the resource that is being blocked doesn't need authentication, you can fix the warning message by adding a <code>crossorigin="anonymous"</code> attribute to the relevant element.</p> - -<h2 id="See_also">See also</h2> - -<ul> - <li><a href="https://support.mozilla.org/en-US/kb/content-blocking">Content blocking</a> on <a href="https://support.mozilla.org">support.mozilla.org</a></li> - <li><a href="/en-US/docs/Web/HTML/CORS_settings_attributes">The <code>crossorigin</code> attribute</a></li> -</ul> diff --git a/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedtracker/index.html b/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedtracker/index.html deleted file mode 100644 index 278e7454bc..0000000000 --- a/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/cookieblockedtracker/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: 'Заблокировано: запросы на доступ к хранилищу от трекеров' -slug: Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedTracker -translation_of: Mozilla/Firefox/Privacy/Storage_access_policy/Errors/CookieBlockedTracker ---- -<div>{{FirefoxSidebar}}</div> - -<h2 id="Сообщение">Сообщение</h2> - -<p>Firefox:</p> - -<pre class="syntaxbox">CookieBlockedTracker=<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">Запрос на доступ к куке или хранилищу на</span></span></span></span> “X” <span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">был заблокирован, в связи с тем, что он поступил от трекера, при включенной блокировке содержимого.</span></span></span></span> -</pre> - -<h2 id="Что_пошло_не_так">Что пошло не так?</h2> - -<p>Запрос на доступ к cookies или хранилищу был заблокирован, поскольку браузер определил его как поступающий от трекера, и блокировка контента включена.</p> - -<p>Разрешение может быть изменено или удалено:</p> - -<ul> - <li>Перейдите в <em>Настройки > Блокировка</em> содержимого и либо - - <ul> - <li>добавьте сайт в исключения с помощью кнопки <em>Управление исключениями...</em></li> - <li>выберите вариант <em>Персональная в </em>Блокировке содержимого и снимите выделение в чекбокса <em>Трекеры</em></li> - </ul> - </li> -</ul> - -<p>Если заблокированный ресурс не нуждается в аутентификации, вы можете исправить предупреждающее сообщение, добавив атрибут <code>crossorigin="anonymous"</code> к соответствующему элементу.</p> - -<h2 id="Смотрите_также">Смотрите также</h2> - -<ul> - <li><a href="https://support.mozilla.org/en-US/kb/content-blocking">Блокировка контента</a> на <a href="https://support.mozilla.org">support.mozilla.org</a></li> - <li><a href="/en-US/docs/Web/HTML/CORS_settings_attributes">Аттрибут <code>crossorigin</code></a></li> -</ul> diff --git a/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/index.html b/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/index.html deleted file mode 100644 index a1e1f54a75..0000000000 --- a/files/ru/mozilla/firefox/privacy/storage_access_policy/errors/index.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -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/ru/mozilla/firefox/privacy/storage_access_policy/index.html b/files/ru/mozilla/firefox/privacy/storage_access_policy/index.html deleted file mode 100644 index 1fc385d6e7..0000000000 --- a/files/ru/mozilla/firefox/privacy/storage_access_policy/index.html +++ /dev/null @@ -1,274 +0,0 @@ ---- -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 new policy is designed as an alternative to the <a href="/en-US/docs/Mozilla/Cookies_Preferences">current policies</a>, which have been available in Firefox for many years. The new policy protects against cross-site tracking while minimizing the site breakage associated with traditional cookie blocking. This article explains how the new policy works and how you can test it.</p> - -<h2 id="Testing_in_Firefox">Testing in Firefox</h2> - -<p>You can test how your website works under the new policy in Firefox version 63+. Those who want to test the absolute newest version of the policy can download <a href="https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly">Firefox Nightly</a>, but note that Nightly may include versions of the policy that end up changing before they reach our Release users. You can enable it through the “Content Blocking” menu in the <a href="https://support.mozilla.org/en-US/kb/control-center-site-privacy-and-security-firefox">Control Center</a> in Firefox:</p> - -<ul> - <li>Open up any version of Firefox version 63 or above. (for those who want to test the newest policy revision: download, install, and open up <a href="https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly">Firefox Nightly</a>.)</li> - <li>Open the Content Blocking menu in the Control Center.</li> - <li>Click "Add Blocking…" next to "Third-party Cookies".</li> - <li>On the page that follows check "Third-party Cookies" and set the radio button to "Trackers".</li> -</ul> - -<p>As this is an experimental policy, it will likely change as we discover site breakage and fix bugs. We’ll keep this page updated with the newest information.</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 a broken sites directly in Firefox by clicking "Report a Problem" in the Content Blocking section of the Control Center.</p> - -<p><img alt="diagram showing the report a problem button within the Content Blocking section of the Control Center" src="https://mdn.mozillademos.org/files/16249/control_center_report_problem.png" style="height: 475px; width: 509px;"></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> - -<p> </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> - -<p> </p> - -<p> </p> diff --git a/files/ru/mozilla/firefox/privacy/tracking_protection/index.html b/files/ru/mozilla/firefox/privacy/tracking_protection/index.html deleted file mode 100644 index c8124052d6..0000000000 --- a/files/ru/mozilla/firefox/privacy/tracking_protection/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Tracking Protection -slug: Mozilla/Firefox/Privacy/Tracking_Protection -tags: - - Отслеживание -translation_of: Mozilla/Firefox/Privacy/Tracking_Protection ---- -<div>{{FirefoxSidebar}}</div> - -<h2 id="Что_такое_защита_от_отслеживания">Что такое защита от отслеживания?</h2> - -<p>Начиная с версии 42, Firefox Desktop и Firefox for Android включает в себя встроенную защиту от отслеживания. В приватном окне браузера (вкладки в Firefox for Android), Firefox будет блокировать содержимое, загружаемое с тех доменов, которые отслеживают запросы пользователей на сайтах.</p> - -<p><span class="tlid-translation translation" lang="ru"><span title="">Некоторый заблокированный контент является частью макета страницы, и пользователи могут заметить проблемы с разметкой, когда Firefox заблокировал эти трекеры.</span> <span title="">Иногда пользователи вообще не замечают, если сетка страниц работает так, что другие элементы страницы скользят, чтобы заполнить дыры, оставленные заблокированными элементами.</span></span></p> - -<p>Когда Firefox блокирует содержимое, в Web-консоли появляется сообщение следующего типа:</p> - -<pre><span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">Ресурс на «https://some/url» был заблокирован, так как включена блокировка содержимого.</span></span></span></pre> - -<p><span class="tlid-translation translation" lang="ru"><span title="">Обратите внимание, что с Firefox для Android вы можете получить доступ к выводу консоли, используя удаленный отладчик.</span></span></p> - -<p><span class="tlid-translation translation" lang="ru"><span title="">Пользовательский интерфейс Firefox укажет пользователям, когда контент был заблокирован, и позволит им разблокировать его для текущего сеанса, если они захотят.</span> <span title="">Пользователи также смогут полностью отключить защиту от слежения, если захотят.</span></span></p> - -<h2 id="Каким_образом_Firefox_выбирает_содержимое_для_блокировки">Каким образом Firefox выбирает содержимое для блокировки?</h2> - -<p><span class="tlid-translation translation" lang="ru"><span title="">Контент блокируется в зависимости от домена, с которого он должен быть загружен.</span></span></p> - -<p>Firefox включает в себя список сайтов, которые были идентифицированы как участвующие в перекрестном отслеживании пользователей. Когда защита от отслеживания активна, Firefox будет блокировать содержимое тех сайтов, которые находятся в списке</p> - -<p>Сайты которые отслеживают запросы пользователей чаще всего являются сторонними рекламными и аналитическими сайтами.</p> - -<h2 id="Что_это_значит_для_вашего_сайта">Что это значит для вашего сайта?</h2> - -<p><span class="tlid-translation translation" lang="ru"><span title="">Очевидно, это означает, что при включенной защите от отслежения:</span></span></p> - -<ul> - <li><span class="tlid-translation translation" lang="ru"><span title="">Контент сторонних трекеров не будет виден пользователям.</span></span></li> - <li><span class="tlid-translation translation" lang="ru"><span title="">Ваш сайт не сможет использовать сторонние рекламные или аналитические сервисы, которые занимаются отслеживанием</span></span></li> -</ul> - -<p><span class="tlid-translation translation" lang="ru"><span title="">То есть, если другие части вашего сайта зависят от загружаемых трекеров, то эти части также будут повреждены, когда включена защита от трекинга.</span> <span title="">Например, если ваш сайт содержит функцию обратного вызова, которая запускается при загрузке контента с сайта отслеживания, обратный вызов не будет выполнен.</span></span></p> - -<p><span class="tlid-translation translation" lang="ru"><span title="">Но учтите, что зависимость от третьей стороны не является хорошей практикой, так как это означает, что ваш сайт может быть поврежден, если эта самая сторона работает медленно или вовсе недоступна, или если трекер заблокирован надстройкой.</span></span></p> diff --git a/files/ru/mozilla/firefox_для_android/index.html b/files/ru/mozilla/firefox_для_android/index.html deleted file mode 100644 index 475994098f..0000000000 --- a/files/ru/mozilla/firefox_для_android/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Firefox для Android -slug: Mozilla/Firefox_для_Android -tags: - - Fennec - - Firefox - - Андроид - - Мобильный -translation_of: Mozilla/Firefox_for_Android ---- -<p>Всебольше и больше людей используют мобильные устройства как основной или даже единственный способ получить доступ к Интернету.<a class="link-https" href="https://www.mozilla.org/en-US/mobile/"> Firefox for Android</a> (codenamed Fennec) является открытым, основанным на тех же стандартах браузер, что и тот, который на вашем рабочем столе Firefox.</p> -<p>Firefox для Android строит свой пользовательский интерфейс из родных Android виджетов вместо XUL: это значительно повышает производительность при запуске, и потребление памяти.</p> -<h2 id="Содействие_Firefox_для_Android">Содействие Firefox для Android</h2> -<p>Отправной точкой для получения информации о проекте Firefox дляAndroid, является проект <a class="link-https" href="https://wiki.mozilla.org/Mobile/Get_Involved">"Get Involved" page</a>.</p> -<p>Вы можете помочь нам создать и улучшить Firefox for Android:</p> -<ul> - <li>Помогите нам с <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">compatibility testing</a></li> - <li>Подпишитесь на <a href="https://mail.mozilla.org/listinfo/mobile-firefox-dev">mobile-firefox-dev mailing list</a></li> - <li>Свяжитесь с командой на <a class="link-irc" href="irc://irc.mozilla.org/#mobile">IRC</a></li> - <li>Регистрация в нашем <a class="link-https" href="https://wiki.mozilla.org/Mobile/Notes">Wednesday development meeting</a></li> - <li>Будьте в курсе новостей проекта по <a class="external" href="http://planet.firefox.com/mobile/">Planet Firefox Mobile</a>, <a href="http://fennecnightly.tumblr.com/">Tumblr</a> и <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">Build and hack on Firefox for Android</a> (Fennec)</li> -</ul> -<h2 id="Разработка_для_мобильного_Интернета">Разработка для мобильного Интернета</h2> -<p>Мы начали совместное руководство по <a href="/En/Mobile" title="En/Mobile">designing web sites for mobile devices</a>.</p> -<p>С Firefox for Android, у вас есть доступ к нескольким API, которые предоставляют основные возможности устройства, закрывая разрыв между веб и родными приложениями:</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/">Battery</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">WebTelephony</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">Geolocation</a></li> - <li><a href="/en/Detecting_device_orientation" title="https://developer.mozilla.org/en/detecting_device_orientation">Orientation</a></li> - <li><a href="/en/WebAPI/Web_Activities" title="Web Activities">Web Activities</a></li> -</ul> -<p>Чтобы проверить веб-сайт на Firefox для Android, вы можете <a class="link-https" href="https://www.mozilla.org/en-US/mobile/">install it on an Android device</a> или <a class="link-https" href="https://wiki.mozilla.org/Mobile/Fennec/Android/Emulator">run it on your desktop using the Android Emulator</a>.</p> -<h2 id="Создание_мобильных_дополнений">Создание мобильных дополнений</h2> -<p><a href="/en/Extensions/Mobile" title="en/Extensions/Firefox_on_Android">Firefox for Android supports add-ons</a> использует точно такой же <a href="/en/Extensions" title="en/Extensions">extension system</a> как и во всех других приложениях на основе Gecko. Мы не изобретали новую дополнительную систему. Это означает, что для создания дополнения для Firefox на Android является <a href="/en/Building_an_Extension" title="en/Building_an_Extension">same process</a> которые будут использованы для рабочего стола Firefox. Дополнения, которые работают с настольным Firefox не смогут работать в Firefox на Android. Пользовательские которых просто слишком разные.</p> -<div class="note"> - Firefox на Android имеет уникальный идентификатор приложения, которые должны быть использованы в <code>install.rdf</code>. Идентификатор <code>{aa3c5121-dab2-40e2-81ca-7ea25febc110}</code></div> -<p>Как классическое Restart-требобание так и новое <a href="/en/Extensions/Bootstrapped_extensions" title="en/Extensions/Bootstrapped_extensions">restartless </a>является дополнением поддержки. Использование restartless предпологает выполнить деуствие когда оно возможно, потому что пользователь на много раньше заставляет приложение выполнить restart при установке или удалении дополнение.</p> -<h3 id="Краткая_информация">Краткая информация</h3> -<ul> - <li>Там не видно XUL в UI(интерфейс пользователя), так что использование накладки, в попытке добавления или изменения UI бесполезно.</li> - <li>Внутренний код и объекты, такие как <code>gBrowser</code>, не существуют. Посмотрите на 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> чтобы узнать о внутренностях. Большая часть своей фундаментальной функциональностью существует.</li> - <li>Такие услуги, как <code>nsIPromptService</code> and <code>nsIAlertsService</code> предполагают использовать родной Android UI.</li> - <li>Существует простой JavaScript объект, называемый <a href="/en/Extensions/Mobile/API/NativeWindow" title="en/Extensions/Mobile/NativeWindow"><code>NativeWindow</code></a>, что позволяет манипулировать частями родной Android UI.</li> -</ul> -<h2 id="Получить_помощь_с_Firefox_for_Android">Получить помощь с Firefox for Android</h2> -<p>Документация и учебные пособия для использования и поиска неисправностей Firefox for Android доступны на <a class="external" href="http://support.mozilla.org/mobile" title="http://support.mozilla.org/mobile">Mozilla Support website</a>.</p> -<div id="__if72ru4rkjahiuyi_once" style="display: none;"> - </div> -<div id="__hggasdgjhsagd_once" style="display: none;"> - </div> -<div id="__if72ru4rkjahiuyi_once" style="display: none;"> - </div> diff --git a/files/ru/mozilla/gecko/index.html b/files/ru/mozilla/gecko/index.html deleted file mode 100644 index 1d45f608b7..0000000000 --- a/files/ru/mozilla/gecko/index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Gecko -slug: Mozilla/Gecko -tags: - - Gecko - - Layout Engine - - Mozilla - - Браузерный движок -translation_of: Mozilla/Gecko ---- -<p><strong>Gecko</strong> — название движка отрисовки веб-страниц, разработанного в рамках проекта Mozilla. Изначально он назывался NGLayout.</p> - -<p>Функциональность Gecko включает в себя чтение такого веб-содержимого, как <a href="/en-US/docs/HTML" title="HTML">HTML</a>, <a href="/en-US/docs/CSS" title="CSS">CSS</a>, <a href="/en-US/docs/XUL" title="XUL">XUL</a>, <a href="/en-US/docs/JavaScript" title="JavaScript">JavaScript</a>, и его отрисовку на экране пользователя или печать. В приложениях, основанных на XUL, Gecko также используется для отрисовки пользовательского интерфейса.</p> - -<p>Gecko используется во многих приложениях, в том числе нескольких веб-браузерах — таких как Firefox, SeaMonkey, Camino и т. д. (полный список см. в <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">статье о Gecko на Википедии</a>). Продукты, использующие одну и ту же версию Gecko, обладают одинаковой поддержкой стандартов.</p> - -<table class="topicpage-table"> - <tbody> - <tr> - <td> - <h2 class="Documentation" id="Документация">Документация</h2> - - <dl> - <dt><a href="/en-US/docs/Gecko_FAQ" title="Gecko_FAQ">Вопросы и ответы</a></dt> - <dd>Часто задаваемые вопросы о Gecko.</dd> - <dt><a href="/en-US/docs/Gecko_DOM_Reference" title="https://developer.mozilla.org/en-US/docs/Gecko_DOM_Reference">Справочник по DOM в Gecko</a></dt> - <dd>Справочная информация о DOM.</dd> - <dt><a href="/en-US/docs/Gecko-Specific_DOM_Events" title="Gecko/Gecko event reference">Справочник по событиям, специфичным для Gecko</a></dt> - <dd>Справочная информация о нестандартных событиях, используемых в Gecko и приложениях Mozilla; информацию о стандартных DOM-событиях см. в <a href="/en-US/docs/DOM/DOM_event_reference" title="DOM/DOM event reference">справочнике по событиям DOM</a>.</dd> - <dt><a href="/en-US/docs/Gecko/Versions" title="Gecko/Versions">Версии Gecko и приложений</a></dt> - <dd>Версии Gecko и приложений, в которых они используются.</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">Введение в отрисовку страниц в Mozilla</a></dt> - <dd>Техническая информация об отрисовке страниц.</dd> - <dt><a href="/en-US/docs/Embedding_Mozilla" title="Embedding_Mozilla">Использование движка Mozilla</a></dt> - <dd>Использование Gecko в ваших собственных приложениях.</dd> - <dt><a href="/en-US/docs/Character_Sets_Supported_by_Gecko" title="Character Sets Supported by Gecko">Кодировки текста, поддерживаемые Gecko</a></dt> - <dd>Список кодировок текста, поддерживаемых Gecko.</dd> - <dt><a href="/en-US/docs/Gecko/HTML_parser_threading" title="Gecko/HTML_parser_threading">Многопоточный разбор HTML</a></dt> - <dd>Описание использования многопоточности при разборе HTML-кода.</dd> - <dt>{{interwiki('wikimo', 'Gecko:Home_Page', 'Главная страница Mozilla-вики')}}</dt> - <dd>Отправная точка для действующих разработчиков. Планы и дополнительные актуальные ресурсы.</dd> - </dl> - - <p><span class="alllinks"><a href="/en-US/docs/tag/Gecko" title="tag/Gecko">Показать всё…</a></span></p> - </td> - <td> - <h2 class="Community" id="Сообщество">Сообщество</h2> - - <ul> - <li>Перейти на форумы Mozilla… {{DiscussionList("dev-tech-layout", "mozilla.dev.tech.layout")}}</li> - </ul> - - <h2 class="Related_Topics" id="См._также">См. также</h2> - - <dl> - <dd><a href="/en-US/docs/Web_Standards" title="Web_Standards">Веб-стандарты</a>, <a href="/en-US/docs/XUL" title="XUL">XUL</a>, <a href="/en-US/docs/Embedding_Mozilla" title="Embedding_Mozilla">внедрение Mozilla в сторонние приложения</a>, <a href="/en-US/docs/Developer_Guide" title="Developing_Mozilla">разработка с помощью Mozilla</a></dd> - </dl> - </td> - </tr> - </tbody> -</table> diff --git a/files/ru/mozilla/gecko/script_security/index.html b/files/ru/mozilla/gecko/script_security/index.html deleted file mode 100644 index 6bd1b1bf07..0000000000 --- a/files/ru/mozilla/gecko/script_security/index.html +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: Script security -slug: Mozilla/Gecko/Script_security -translation_of: Mozilla/Gecko/Script_security ---- -<div class="summary"> -<p>An overview of the script security architecture in Gecko.</p> -</div> - -<p>Like any Web browser, Gecko loads JavaScript from untrusted and potentially hostile web pages, and runs it on the user's computer. The security model for web content is based on the <a href="/en-US/docs/Web/Security/Same-origin_policy">same-origin policy</a>, in which code gets full access to objects from the same origin but highly restricted access to objects from a different origin. The rules for determining whether an object is same-origin with another, and what access is allowed cross-origin, are now mostly standardized across browsers.</p> - -<p>Gecko has an additional problem, though: while its core is written in C++, the front-end code is itself written in JavaScript. This JavaScript code, which is commonly referred to as <em>chrome code</em>, runs with system privileges. If it is compromised, the attacker can take over the user's computer. <a href="/en-US/Add-ons">Extensions</a> also run with chrome privileges.</p> - -<p>Having the browser front-end in JavaScript has benefits: it can be much quicker to develop in JavaScript than in C++, and contributors do not need to learn C++. However, JavaScript is a highly dynamic, malleable, language, and without help it's difficult to write system-privileged code that interacts safely with untrusted web content. From the point of view of chrome code, the script security model in Gecko is intended to provide that help, so writing secure, system-privileged JavaScript can be a realistic expectation.</p> - -<h2 id="Security_policy">Security policy</h2> - -<p>Gecko implements the following security policy:</p> - -<ul> - <li><strong>Objects that are same-origin</strong> are able to access each other freely. For example, the objects associated with a document served from <em>https://example.org/</em> can access each other, and can also access objects served from <em>https://example.org/foo</em>.</li> - <li><strong>Objects that are cross-origin</strong> get highly restricted access to each other, according to the <a href="/en-US/docs/Web/Security/Same-origin_policy#Cross-origin_script_API_access">same-origin policy</a>. For example, code served from <em>https://example.org/</em> trying to access objects from <em>https://somewhere-else.org/</em>.</li> - <li><strong>Objects in a privileged scope</strong> are allowed complete access to objects in a less privileged scope, but by default they see a <a href="/en-US/docs/Mozilla/Gecko/Script_security#Privileged_to_unprivileged_code">restricted view</a> of such objects, designed to prevent them from being tricked by the untrusted code. For example, chrome-privileged JavaScript accessing web content.</li> - <li><strong>Objects in a less privileged scope</strong> don't get any access to objects in a more-privileged scope, unless the more-privileged scope <a href="/en-US/docs/Mozilla/Gecko/Script_security#Unprivileged_to_privileged_code">explicitly clones those objects</a>. For example, web content accessing objects in a chrome-privileged scope. </li> -</ul> - -<h2 id="Compartments">Compartments</h2> - -<p>Compartments are the foundation for Gecko's script security architecture. A compartment is a specific, separate area of memory. In Gecko, there's a separate compartment for every global object. This means that each global object and the objects associated with it live in their own region of memory.</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/9697/compartments.png" style="display: block; margin-left: auto; margin-right: auto; width: 567px;"></p> - -<p>Normal content windows are globals, of course, but so are chrome windows, <a href="/en-US/docs/Components.utils.Sandbox">Sandboxes</a>, <a href="/en-US/docs/Web/API/Worker">Workers</a>, the <code>ContentFrameMessageManager</code> in a <a href="/en-US/Firefox/Multiprocess_Firefox/Frame_script_environment">frame script</a>, and so on.</p> - -<p>Gecko guarantees that JavaScript code running in a given compartment is only allowed to access objects in the same compartment. When code from compartment A tries to access an object in compartment B, Gecko gives it a <em>cross-compartment wrapper</em>. This is a proxy in compartment A for the real object, which lives in compartment B.</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/9729/cross-compartment-wrapper.png" style="display: block; margin-left: auto; margin-right: auto; width: 443px;"></p> - -<p>Inside the same compartment, all objects share a global and are therefore same-origin with each other. Therefore there's no need for any security checks, there are no wrappers, and there is no performance overhead for the common case of objects in a single window interacting with each other.</p> - -<p>Whenever cross-compartment access happens, the wrappers enable us to implement the appropriate security policy. Because the wrapper we choose is specific to the relationship between the two compartments, the security policy it implements can be static: when the caller uses the wrapper, there's no need to check who is making the call or where it is going.</p> - -<h2 id="Cross-compartment_access">Cross-compartment access</h2> - -<h3 id="Same-origin">Same-origin</h3> - -<p>As we've already seen, the most common scenario for same-origin access is where objects belonging to the same window object interact. This all takes place within the same compartment, with no need for security checks or wrappers.</p> - -<p>When objects share an origin but not a global - for example two web pages from the same protocol, port, and domain - they belong to two different compartments, and the caller gets a <em>transparent wrapper</em> to the target object.</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/9735/same-origin-wrapper.png" style="display: block; margin-left: auto; margin-right: auto; width: 443px;"></p> - -<p>Transparent wrappers allow access to all the target's properties: functionally, it's just as if the target is in the caller's compartment.</p> - -<h3 id="Cross-origin">Cross-origin</h3> - -<p>If the two compartments are cross-origin, the caller gets a <em>cross-origin wrapper</em>.</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/9731/cross-origin-wrapper.png" style="display: block; margin-left: auto; margin-right: auto; width: 443px;"></p> - -<p>This denies access to all the object's properties, except for a few properties of <a href="/en-US/docs/Web/API/Window"><code>Window</code></a> and <a href="/en-US/docs/Web/API/Location"><code>Location</code></a> objects, as defined by the <a href="/en-US/docs/Web/Security/Same-origin_policy#Cross-origin_script_API_access">same-origin policy</a>.</p> - -<h3 id="Privileged_to_unprivileged_code">Privileged to unprivileged code</h3> - -<p>The most obvious example of this kind of security relation is between system-privileged chrome code and untrusted web content, but there are other examples in Gecko. The Add-on SDK runs <a href="/en-US/Add-ons/SDK/Guides/Content_Scripts">content scripts</a> in <a href="/en-US/docs/Components.utils.Sandbox">sandboxes</a> which are initialized with an <a href="/en-US/docs/Mozilla/Gecko/Script_security#Expanded_principal">expanded principal</a>, giving them elevated privileges with respect to the web content they operate on, but reduced privileges with respect to chrome.</p> - -<p>If the caller has a higher privilege than the target object, the caller gets an <em>Xray wrapper</em> for the object.</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/9737/xray-wrapper.png" style="display: block; margin-left: auto; margin-right: auto; width: 443px;"></p> - -<p>Xrays are designed to prevent untrusted code from confusing trusted code by redefining objects in unexpected ways. For example, privileged code using an Xray to a DOM object sees only the original, native version of the DOM object. Any <a href="https://developer.mozilla.org/en-US/docs/Glossary/Expando">expando</a> properties are not visible, and if any native DOM properties have been redefined, this is not visible in the Xray.</p> - -<p>The privileged code is able to <a href="/en-US/docs/Components.utils.waiveXrays">waive Xrays</a> if it wants unfiltered access to the untrusted object.</p> - -<p>See <a href="/en-US/docs/Xray_vision">Xray vision</a> for much more information on Xrays.</p> - -<h3 id="Unprivileged_to_privileged_code">Unprivileged to privileged code</h3> - -<p>If the caller has lower privileges than the target object, then the caller gets an <em>opaque wrapper.</em></p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/9733/opaque-wrapper.png" style="display: block; margin-left: auto; margin-right: auto; width: 443px;"></p> - -<p>An opaque wrapper denies all access to the target object.</p> - -<p>However, the privileged target is able to copy objects and functions into the less-privileged scope using the <a href="/en-US/docs/Components.utils.exportFunction"><code>exportFunction()</code></a> and <a href="/en-US/docs/Components.utils.cloneInto"><code>cloneInto()</code></a> functions, and the less-privileged scope is then able to use them.</p> - -<h2 id="Security_checks">Security checks</h2> - -<p>To determine the security relation between two compartments, Gecko uses two concepts: <em>security principals</em> and the act of <em>subsuming</em>. To establish the security relationship between two compartments A and B, Gecko asks:</p> - -<p><em>Does the security principal for compartment A subsume the security principal for compartment B, and vice versa?</em></p> - -<h3 id="Subsumes">Subsumes</h3> - -<table class="standard-table"> - <tbody> - <tr> - <td style="width: 30%;"><em>A subsumes B</em></td> - <td>A has all of the privileges of B, and possibly more, and therefore A is allowed to see and do anything that B can see and do.</td> - </tr> - <tr> - <td><em>A Subsumes B &&</em><em> B Subsumes A</em></td> - <td>A and B are same-origin.</td> - </tr> - <tr> - <td><em>A Subsumes B && B !Subsumes A</em></td> - <td> - <p>A is more privileged than B.</p> - - <p>A gets access to all of B, by default with Xray vision, which it may choose to waive.</p> - - <p>B gets no access to A, although A may choose to export objects to B.</p> - </td> - </tr> - <tr> - <td><em>A !Subsumes B && B !Subsumes A</em></td> - <td>A and B are cross-origin.</td> - </tr> - </tbody> -</table> - -<h3 id="Security_principals">Security principals</h3> - -<div>There are four types of security principal: the system principal, content principals, expanded principals, and the null principal.</div> - -<div> </div> - -<h4 id="System_principal">System principal</h4> - -<p>The system principal passes all security checks. It subsumes itself and all other principals. Chrome code, by definition, runs with the system principal, as do <a href="/en-US/Firefox/Multiprocess_Firefox/Frame_script_environment">frame scripts</a>.</p> - -<h4 id="Content_principal">Content principal</h4> - -<p>A content principal is associated with some web content and is defined by the <a href="/en-US/docs/Web/Security/Same-origin_policy#Definition_of_an_origin">origin</a> of the content. For example, a normal DOM window has a content principal defined by the window's origin. A content principal subsumes only other content principals with the same origin. It is subsumed by the system principal, any expanded principals which include its origin, and any other content principals with the same origin.</p> - -<h4 id="Expanded_principal">Expanded principal</h4> - -<p>An expanded principal is specified as an array of origins:</p> - -<pre class="brush: js language-js"><code class="language-js"><span class="punctuation token">[</span><span class="string token">"http://mozilla.org"</span><span class="punctuation token">,</span> <span class="string token">"http://moz.org"</span><span class="punctuation token">]</span></code></pre> - -<p>The expanded principal subsumes every content principal it contains. The content principals do not subsume the expanded principal, even if the expanded principal only contains a single content principal.</p> - -<p>Thus <code>["http://moz.org"]</code> subsumes <code>"http://moz.org"</code> but not vice versa: so the expanded principal gets full access to the content principals it contains, with Xray vision by default, and the content principals get no access to the expanded principal.</p> - -<p>This also enables the script security model to treat compartments with expanded principals more like part of the browser than like web content. This means, for example, that it can run when JavaScript is disabled for web content.</p> - -<p>Expanded principals are useful when we want to give code extra privileges, including cross-origin access, but don't want to give it full system privileges. For example, they're used in the <a href="https://developer.mozilla.org/en-US/Add-ons/SDK">Add-on SDK</a> to give content scripts <a href="https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/Cross_Domain_Content_Scripts">cross-domain privileges for a predefined set of domains</a>, and to protect content scripts form access by untrusted web content, without having to give content scripts system privileges.</p> - -<h4 id="Null_principal">Null principal</h4> - -<p>The null principal fails almost all security checks. It has no privileges and can't be accessed by anything but itself and chrome. It subsumes no other principals, even other null principals.</p> - -<h3 id="Principal_relationships">Principal relationships</h3> - -<p>The diagram below summarizes the relationships between the different principals. The arrow connecting principals A and B means "A subsumes B":</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/9799/principal-relationships.png" style="display: block; margin-left: auto; margin-right: auto; width: 524px;"></p> - -<h2 id="Computing_a_wrapper">Computing a wrapper</h2> - -<p>The following diagram shows the factors that determine what kind of wrapper compartment A would get when trying to access an object in compartment B.</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/9801/computing-a-wrapper.png" style="display: block; margin-left: auto; margin-right: auto; width: 696px;"></p> diff --git a/files/ru/mozilla/localization/index.html b/files/ru/mozilla/localization/index.html deleted file mode 100644 index cf5ed0136d..0000000000 --- a/files/ru/mozilla/localization/index.html +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Локализация Mozilla -slug: Mozilla/Localization -tags: - - Локализация - - Перевод -translation_of: Mozilla/Localization ---- -<p><span class="seoSummary"><strong>Локализация</strong> (<span lang="en">L10n</span> от англ. <span lang="en">Localization</span>) — это процесс перевода интерфейсов пользователя программного обеспечения с одного языка на другой и их адаптации под иностранную культуру. Эта инфорация предназначена для тех, кому требуется узнать технические аспекты реализации локализации. Информация, размещенная в этом разделе, предназначена для разработчиков и участников сообщества Mozilla</span>.</p> - -<h2 id="См._также">См. также</h2> - -<dl> - <dt><a href="/en-US/docs/Project:MDN/Localizing" title="/en-US/docs/Project:MDN/Localizing">Локализация MDN</a></dt> - <dd>О переводе документации, находящейся здесь, на MDN.</dd> - <dt><a href="/en-US/Apps/Build/Localization">Локализация приложений</a></dt> - <dd>Руководство по локализации приложений, например, приложений для Firefox OS.</dd> - <dt><a href="/en-US/docs/Web/API/L10n">L10n</a></dt> - <dd>Справочные материалы по API «L10n», используемому Mozilla для локализации Firefox OS.</dd> -</dl> diff --git a/files/ru/mozilla/localization/localizing_with_verbatim/index.html b/files/ru/mozilla/localization/localizing_with_verbatim/index.html deleted file mode 100644 index 3ecd5e692d..0000000000 --- a/files/ru/mozilla/localization/localizing_with_verbatim/index.html +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Локализация с Verbatim -slug: Mozilla/Localization/Localizing_with_Verbatim -tags: - - Verbatim - - Локализация - - Перевод -translation_of: Mozilla/Localization/Localizing_with_Pontoon ---- -<p>Verbatim — веб-инструмент (точнее, используемый Mozilla экземпляр Pootle) для локализации веб-контента Mozilla. Он может быть использован для локализации разнообразных проектов Mozilla и способен поддерживать любой язык. Это руководство покажет вам, как делается локализация обычного веб-проекта Mozilla. Учебник даст вам прочную основу для использования Verbatim при локализации любого веб-проекта Mozilla, который вы хотите локализовать вместе с вашим сообществом. Мы расскажем, для каких именно проектов сейчас используется Verbatim, как приступить к работе с ним, и какие задачи обычно решаются с его помощью.</p> - -<h2 id="Приступая_к_работе_с_Verbatim">Приступая к работе с Verbatim</h2> - -<p>Будучи веб-интерфейсом, Verbatim требует наличия интернет-соединения. Существует два способа начать работу с Verbatim: начать новую локализацию или присоединиться к существующему сообществу локализации. В любом случае, вам нужно будет выполнить следующие действия, чтобы начать работать на Verbatim проекте.</p> - -<table style="border-color: rgb(0,0,0); border-style: solid; width: 100%;"> - <thead> - <tr style="text-align: center;"> - <th scope="col" style="text-align: center;"><strong>Начать новую локализацию в Verbatim</strong></th> - <th scope="col" style="text-align: center;"><strong>Подключиться к существующей локализации в Verbatim</strong></th> - </tr> - </thead> - <tbody> - <tr> - <td> - <ol> - <li>Откройте в вашем браузере <a class="external" href="http://localize.mozilla.org/">http://localize.mozilla.org</a>. Там находится Verbatim.</li> - </ol> - </td> - <td> - <ol> - <li>Откройте в вашем браузере <a class="external" href="http://localize.mozilla.org/">http://localize.mozilla.org</a>. Там находится Verbatim.</li> - </ol> - </td> - </tr> - <tr> - <td> - <ol start="2"> - <li>Если у вас есть аккаунт Mozilla LDAP войдите в систему используя LDAP полномочия. Если нет, зарегистрируйте учетную запись и войдите. Ссылки для того и другого расположены в правом верхнем углу страницы.</li> - </ol> - </td> - <td> - <ol start="2"> - <li>Если у вас есть аккаунт Mozilla LDAP войдите в систему, используя LDAP полномочия. Если нет, зарегистрируйте учетную запись и войдите. Ссылки для того и другого расположены в правом верхнем углу страницы.</li> - </ol> - </td> - </tr> - <tr> - <td> - <ol start="3"> - <li>Создайте <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">баг-заявку</a> с помощью этого заранее сделанного шаблона. Добавьте код локали и название языка в поле описания, а также любую другую информацию, которой вы хотели бы поделиться. См. следующий пример (хотя он, возможно, должен быть на английском — тогда см. в <a href="//developer.mozilla.org/en-US/docs/Mozilla/Localization/Localizing_with_Verbatim">английской версии статьи</a>).</li> - </ol> - - <div class="note">Пример: Я хотел бы попросить вас добавить <strong>en-US</strong> в качестве новой локализации в Verbatim. Язык — <strong>русский</strong>. Кроме того, я хотел печенье. Много-много печенья. Я легко приму любые хлебобулочные изделия.</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">Свяжитесь с сообществом</a>, чтобы выяснить, на каких проектах желательно сосредоточить свои усилия. См. в следующем примере, что можно написать в вашем e-mail лидерам сообщества.</li> - </ol> - - <div class="note">Пример: Я хотел бы присоединиться к вам в работе над этой локалью с помощью Verbatim. С чего мне лучше начать? Кроме того, я хотел бы купить вам выпивку, чтобы побудить вас позволить мне присоединиться к команде!</div> - </td> - </tr> - </tbody> -</table> - -<p>Теперь, когда вы зарегистрировались и вошли, мы обрисуем общий рабочий процесс перевода, используя как пример <a class="link-https" href="https://localize.mozilla.org/projects/mdn" title="https://localize.mozilla.org/projects/mdn/">страницу проекта MDN</a>.</p> - -<h2 id="Перевод">Перевод</h2> - -<p>Первое, что вам нужно — найти исходные непереведенные строки для перевода.</p> - -<ol> - <li>Перейдите на <a class="link-https" href="https://localize.mozilla.org/projects/mdn" title="https://localize.mozilla.org/projects/mdn/">страницу проекта MDN</a>.</li> - <li>Выберите язык на вкладке Обзор.</li> - <li>Теперь нажмите на вкладку <strong>Translate</strong> (Перевод). Эта вкладка будет показывать каталоги для пользовательского интерфейса MDN.</li> - <li>Выберите каталог <strong>LC Messages</strong>. Там находятся <strong>.po</strong>-файлы проекта со переводимыми строками. Теперь вы увидите обзор каждого <code>.po</code>-файла.</li> - <li>В сводной колонке будет в виде ссылке показано количество непереведённых слов. Нажмите на эту ссылку, чтобы оказаться непосредственно на первой строке, нуждающейся в переводе.</li> -</ol> - -<p>Теперь вы готовы внести свой вклад в переводы, невероятно, как это просто. Проверьте это так, вы можете переводить в два простых шага:</p> - -<ol> - <li>Просто введите ваш перевод в поле ниже английской строки</li> - <li>Выберите <strong>Suggest</strong>. Если у вас есть право подтверждать, выберите <strong>Submit</strong>. Вы будете перемещены к следующей строке, нуждающейся в переводе.</li> - <li>Ура! Вы переводите! Повторяйте шаги один и два с оставшимися непереведёнными строками.</li> -</ol> - -<div class="note">Примечание: Если вам попадётся строка, у которой уже есть Предлагаемый перевод, вы всё равно можете предложить свой собственный перевод, если вы чувствуете, что он является более точным.</div> - -<h3 id="Некоторые_интересные_функции_на_Verbatim">Некоторые интересные функции на Verbatim</h3> - -<p>Вот несколько дополнительных пунктов об интерфейсе Verbatim, которые полезно знать. Некоторые из них можно увидеть в скриншоте ниже.</p> - -<p><a href="/@api/deki/files/5930/=Translate_Tab.png" title="Translate Tab.png"><img alt="Translate Tab.png" class="default internal" src="/@api/deki/files/5930/=Translate_Tab.png" style="height: 221px; width: 1113px;"></a></p> - -<ul> - <li>Вы можете скопировать английскую строку в поле перевода нажатием на значок <strong>Copy</strong>.</li> - <li>Вы можете использовать машинный перевод нажатием на значок <strong>Google Translate</strong>.</li> - <li>Вы можете перемещаться между строками вперёд и назад нажатиями на кнопки <strong>Next</strong> и <strong>Previous</strong>.</li> - <li>Вы можете переключиться сразу на конкретную строку нажатием на её номер с левого краю.</li> - <li>Вы можете пометить перевод как <strong>Fuzzy</strong>, если вы думаете, что что-то можно сказать лучше. Эта пометка поможет найти и обновить его позже. Помните, что в репозиторий локализации попадут только submitted строки, а не fuzzy-строки. Если строки остаются fuzzy, то в локализованной версии будет исходная строка, а не переведённая.</li> - <li>Вы можете добавить примечания о конкретной строке в разделе <strong>Translator Comments</strong>.</li> - <li>При переводе строки с формами единственного и множественного числа справа будет два поля. Поле для формы единственного числа подписано <strong>Plural Form 0</strong>, а для формы множественного — <strong>Plural Form 1</strong>.</li> -</ul> - -<h2 id="Дополнительные_задачи">Дополнительные задачи</h2> - -<p>Если вы локализатор с привилегиями одобрения, вот еще несколько задач, которые вы должны знать.</p> - -<h3 id="Обзор_предлагаемых_переводов">Обзор предлагаемых переводов</h3> - -<ol start="1"> - <li>Кликните вкладку <strong>Review</strong>. Она покажет, сколько строк ждут рассмотрения для каждого <code>.po</code>-файла.<a href="/@api/deki/files/5931/=Review_Tab1.png" title="Review Tab1.png"><img alt="Review Tab1.png" class="internal rwrap" src="/@api/deki/files/5931/=Review_Tab1.png?size=webview" style="float: right; height: 145px; width: 274px;"></a></li> - <li>Выберите <strong style="font-weight: bold;">Review</strong><strong> suggestions</strong> чтобы утверждить предложение. Это приведет вас к первой строке, которая должна быть пересмотрена.</li> - <li>Вы можете принять предложение, нажав на зеленую галочку или отклонить предложение нажав красный X (см скриншот из предыдущего раздела).</li> -</ol> - -<p>Важно отметить, что только представленные строки появятся в ваших локализованных страницах. Не предложеные в fuzzy строки. Перед принятием своего окончательного локализованного продукта, убедитесь, что все строки были представлены.</p> - -<h3 id="Использование_VCS_на_Verbatim">Использование VCS на Verbatim</h3> - -<p>VCS (<strong>V</strong>ersion <strong>C</strong>ontrol <strong>S</strong>ystem) это системное хранилище используемое для обновления строки проекта, а также продвижение Вашего переведенного контента на веб. Разница между этими двумя задачами просто материя, из которой ссылаются на кнопку мыши.</p> - -<p><img alt="VCS.png" class="internal rwrap" src="/@api/deki/files/5925/=VCS.png" style="float: right;">Чтобы протолкнуть ваши строки в Интернет, и увидеть изменения, просто выберите <strong>Commit to VCS</strong> ссылка под каждым именем файла. Это, как правило, занимает около часа, прежде чем вы можете увидеть изменения на сайте проекта.</p> - -<p>Чтобы обновить <code>.po</code> файлы с новыми непереведенными строками, просто выберите <strong>Update from VCS</strong> ссылка под каждым именем файла.</p> - -<p> </p> - -<div class="note"><br> -Примечание: Некоторые проекты автоматически обновляются каждый вечер в то время как другие требуют, обновлять их в ручную чтобы получить новое содержание источника. Обратите на это пристальное внимание, так как это может изменить ваш рабочий процесс.</div> - -<h2 id="Перевод_файлов_Verbatim_с_помощью_внешнего_приложения">Перевод файлов Verbatim с помощью внешнего приложения</h2> - -<p>Обратитесь к вкладке Translate, у вас есть возможность экспортировать <code>.po </code>и <code>.xliff</code> файлы и перевести строки с помощью внешнего приложения (i.e., текстовый редактор или память переводов).</p> - -<ol> - <li>Чтобы скачать <code>.po</code> file, выберите <strong>Download</strong> ссылка находится под каждым именем файла. Чтобы скачать the .<code>xliff</code> file, выберите <strong>Download XLIFF</strong> ссылка.</li> - <li>Перейдите к переводу строки с помощью выбранного инструмента.</li> -</ol> - -<p>После того, как вы закончили свой перевод, вам нужно загрузить файл Verbatim. Вы можете сделать это с <strong>Translate</strong> счет.</p> - -<ol> - <li>Перейдите к нижней части списка файлов в разделе <strong>Upload File</strong>.</li> - <li>Нажмите на <strong>Browse</strong> и выберите файл, который вы хотите загрузить.</li> - <li>Выберите параметр загрузки из предлагаемых вариантов.</li> - <li>После того, как ваши настройки загрузки был выбраны, нажмите <strong>Upload</strong>.</li> -</ol> - -<div class="warning"> -<p class="warning">Важно: В прошлом были некоторые проблемы у членов общин которые обновляют свои исходные строки, в то время как другие находятся в процессе локализации предыдущего обновленния файла. Это может привести к тому, что членам общины выходят новые строки источника, производя непереведенные строки в локализованный проект. Координируйте эти обновления вручную в пределах вашего сообщества, чтобы избежать этой проблемы.</p> -</div> - -<h2 id="Вы_готовы_начать!">Вы готовы начать!</h2> - -<p>Вот так! Вы прибыли в конце! Время взять ваше знание и направить его на хорошее применение распространения Mozilla всем в вашем регионе. Получайте удовольствие и <a class="link-mailto" href="mailto:l10n-drivers@mozilla.com" title="l10n-drivers@mozilla.com">let us know</a> если вы столкнулись с трудностями. Мы будем рады помочь в любом случае.</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/ru/mozilla/localization/quick_start_guide/index.html b/files/ru/mozilla/localization/quick_start_guide/index.html deleted file mode 100644 index 1920ac8598..0000000000 --- a/files/ru/mozilla/localization/quick_start_guide/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Руководство по началу локализации -slug: Mozilla/Localization/Quick_start_guide -tags: - - Как перевести - - Локализация - - Перевод - - Перевод с английского - - Русский -translation_of: Mozilla/Localization/Quick_start_guide ---- -<p>Добро пожаловать в локализацию Mozilla (Сокращенно: L10n)!</p> - -<div class="yt-area-textbox yt-area-textbox__textbox" id="dstTextBox"><span>Если вы оказались здесь с намерением внести свою лепту</span> в <span>локализацию</span> <span>проекта Mozilla</span> <span>или</span> <span>объединить усилия</span> <span>существующих</span> локализаторов<span>, то вы пришли по адресу</span>. Этот справочник объединяет в себе всю основную и техническую информацию, которая может вам понадобиться для работы с программой <span>Mozilla</span> <span>l10n</span>. <span>Мы проведем вас через все начальные</span> <span>шаги,</span> <span>от начальной установки среды для тестирования до выпуска вашей локализации</span>. <span>Попутно вы</span> <span>узнаете о</span> <span>множестве проектов,</span> <span>в которые вы можете внести свой вклад и об инструментах</span><span>, используемые для</span> <span>их локализации</span></div> - -<div class="yt-area-textbox yt-area-textbox__textbox"> </div> - -<div class="yt-area-textbox yt-area-textbox__textbox" id="dstTextBox"><span>Когда мы перейдем к</span> <span>конкретным примерам</span>, <span>мы возьмем</span> <span>их из</span> <span>проекта Firefox</span><span>, так как он</span> <span>является наиболее широко</span> <span>локализованным</span> <span>в рамках проекта</span> <span>Mozilla</span>. В конце всего руководства, <span>вы сможете внести</span><span> изменения</span> <span>в ваш локально установленный Firefox</span><span>, а затем</span> <span>увидеть все произошедшие изменения в Firefox</span>. Одним словом, <span>после прочтения всего руководства</span>, <span>вы получите в свои руки все</span> <span>инструменты, необходимые</span><span>, чтобы начать работу</span>!</div> - -<div class="yt-area-textbox yt-area-textbox__textbox"> </div> - -<p>Запомните, это руководство обучит вас только техническим аспектам L10n Mozilla. Посетите страницу <a class="link-https" href="https://wiki.mozilla.org/L10n:Localization_Process" title="https://wiki.mozilla.org/L10n:Overview"> L10n,</a> чтобы узнать обо всем процессе локализации</p> - -<div style="width: 27%; 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="Первоначальная_настройка"><a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/Initial_setup" title="en/Localization_Quick_Start_Guide/Initial_setup">Первоначальная настройка</a></h2> -Техническая работа перед началом локализации</div> - -<div style="width: 23%; 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="Фаза_перевода"><a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/Translation_phase" title="en/Localization_Quick_Start_Guide/Translation_phase">Фаза перевода</a></h2> - -<p>Инструменты для перевода L10n</p> -</div> - -<div style="width: 25%; height: 130px; 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="Фаза_тестирования"><a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/QA_phase" title="en/Localization_Quick_Start_Guide/QA_phase">Фаза тестирования</a></h2> -Инструменты тестирования L10n</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="Фаза_релиза"><a href="/en-US/docs/Mozilla/Localization/Quick_start_guide/Release_phase" title="en/Localization_Quick_Start_Guide/Release_phase">Фаза релиза</a></h2> -Шаги для предоставления вашей локализации</div> - -<div style="background-color: white; border: 3px solid; display: block; padding: 20px; margin-top: 20px;">Все эти 4 шага образуют собой техническую сторону программы l10n. Чтобы узнать больше о каждом из них, кликните на любую из ссылок выше. Чтобы составить общую картину, мы рекомендуем вам начать с зеленого квадратика и двигаться от шага к шагу</div> - -<p> </p> - -<div class="note"><strong>Примечание</strong>: Это руководство написано для двух типов контрибуторов: начинающих новый перевод и присоединяющихся к текущей созданной локализации. Важно знать, какая информация к каким типам контрибуторов относится. Чтобы помочь Вам найти более бодходящую информацию, заметьте, что информация, необходимая дла начала локализации, отмечена <span style="color: #daa520;">ораньжевым шрифтом</span>. Вся информация о присоединении к переводу созданного локала <span style="color: #0000ff;">синим шрифтом</span>.</div> - -<p class="note"> </p> - -<p>{{ Next("Localization_Quick_Start_Guide/Initial_setup") }}</p> diff --git a/files/ru/mozilla/localization/web_localizability/index.html b/files/ru/mozilla/localization/web_localizability/index.html deleted file mode 100644 index d8a814e46b..0000000000 --- a/files/ru/mozilla/localization/web_localizability/index.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Web Localizability -slug: Mozilla/Localization/Web_Localizability -tags: - - Internationalization - - Localizability - - Localization - - NeedsTranslation - - TopicStub - - Web Development -translation_of: Mozilla/Localization/Web_Localizability ---- -<p>Localizability (or <em>l12y</em> for short) is a characteristic found in an application or content that enables localization. The following list contains links to pages that highlight steps that can be taken to make web content localizable. The documentation is divided into 4 parts:</p> -<ol> <li><a href="/en/Web_Localizability/Creating_localizable_web_content" title="en/Web Localizability/Creating localizable web content">How to create localizable content.</a></li> <li><a href="/en/Web_Localizability/Localization_formats" title="en/Web Localizability/Localization formats">How to choose the right localization format.</a></li> <li><a href="/en/Web_Localizability/Creating_localizable_web_applications" title="en/Web Localizability/Creating localizable web applications">How to create localizable web applications.</a></li> <li><a href="/en/Web_Localizability/Setting_up_the_infrastructure" title="en/Web Localizability/Setting up the infrastructure">How to set up the infrastructure for localization.</a></li> -</ol> -<h3 id="Why_localizability_is_important">Why localizability is important</h3> -<p>There are many reasons why you should start thinking about making your web app localizable as soon as possible.</p> -<ol> <li>You will make localizer's life easier, for which they will be grateful.</li> <li>You will have quality content, localized and adapted to the needs of the local market.</li> <li>Extending you web app to support new languages will be easy.</li> <li>The content will be easier to maintain and update.</li> <li>You will end up writing more semanticly-correct code, which is good for your SEO.</li> <li>By reviewing your content and code for l12y, you will find and fix bugs in your original language too.</li> -</ol> diff --git a/files/ru/mozilla/localization/web_localizability/localization_formats/index.html b/files/ru/mozilla/localization/web_localizability/localization_formats/index.html deleted file mode 100644 index 73b6f46846..0000000000 --- a/files/ru/mozilla/localization/web_localizability/localization_formats/index.html +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: Localization formats -slug: Mozilla/Localization/Web_Localizability/Localization_formats -translation_of: Mozilla/Localization/Web_Localizability/Localization_formats ---- -<p>{{ Warning("This document pertains to the developemt of Mozilla web sites and not to the development of Gecko-based extensions or applications.") }}</p> - -<p>There are 4 main approaches to web l10n with regards to the choice of technology used for localization logic:</p> - -<ol> - <li>HTML/PHP</li> - <li>.lang</li> - <li>gettext (.po)</li> - <li>wiki (TBD)</li> -</ol> - -<p>The choice of the filetype depends on a couple of factors:</p> - -<ul> - <li>How much content is there to be localized?</li> - <li>How often, if at all, the site will be updated after the launch? - <ul> - <li>Is this a long-term project with continuous updates to content?</li> - <li>Is this a long-term project with stable content?</li> - <li>Is this a short-term project?</li> - </ul> - </li> - <li>Will the content differ per locale? If so, to what extent?</li> -</ul> - -<p>As every new web-dev project takes shape, a project manager should ask themselves these questions and have the answers ready before starting the web l10n process.</p> - -<h2 id="HTMLPHP"><span class="mw-headline">HTML/PHP </span></h2> - -<p>Возможно, вы проектируете проект с относительно небольшими потребностями перевода, например, от трех до четырех строк (или более) контента, требующего от пользователей обновления до следующей версии доступного программного обеспечения. Вы можете представить только HTML для локализации:</p> - -<p>We give an HTML file which lists several pieces of content like,</p> - -<pre> <H1>Getting Started</H1> -</pre> - -<p>and the localizer translates to</p> - -<pre> <H1>Débuter avec Firefox</H1> -</pre> - -<p>The localizer then submits the translated HTML or PHP back to us by either checking in changes to SVN or sending us a patch that Pascal checks in.</p> - -<h3 id="Advantages_to_HTML"><span class="mw-headline">Advantages to HTML</span></h3> - -<ol> - <li>Good for small projects</li> - <li>Very simple for web developers</li> - <li>Gives localizers the exact context of translations</li> - <li>A localizer who knows basic HTML can style translations to make sure translations display correctly...we can allow slight modifications (e.g. RTL or wider display)</li> - <li>Gives the possibility to customize content per locale</li> - <li>Simple workflow, just put the file on svn and it can appear on the staging server</li> -</ol> - -<h3 id="Disadvantages_to_HTML"><span class="mw-headline">Disadvantages to HTML</span></h3> - -<ol> - <li>Very hard for QA - <ul> - <li>If localizer changes something incorrectly (i.e. accidentally removes some HTML like <code></h1></code>, that localizer can break everything.)</li> - </ul> - </li> - <li>Very hard to update automatically, if not impossible.</li> - <li>Can be hard to tell what has changed</li> -</ol> - -<h2 id=".lang_files"><span class="mw-headline">.lang files </span></h2> - -<p>Historically, Mozilla has used a gettext-like file to present content for localization. .lang files provide some features that differentiate it from Gettext:</p> - -<ul> - <li>.lang is not dependent on PHP/.po library, so if our webdev team sets up a site without gettext support, we still have .lang. (It should be noted that this is near impossibility since most sites will be set up with gettext support.)</li> - <li>.lang files can be easily edited in a text editor</li> -</ul> - -<p>With this setup, a localizer is given a "[something].lang" file containing all the strings needing localization. That file will have the following structure:</p> - -<pre> ;Getting Started - Débuter avec Firefox -</pre> - -<p>The English content is designated by the semi-colon and the localizer provides the translation underneath. That content is placed into an array that is used by the PHP code later.</p> - -<pre> $array["Getting Started"] = "Débuter avec Firefox" -</pre> - -<p>The PHP code searches the array and returns the translation that is associated with the English term used by the web developer.</p> - -<p>See the example below.</p> - -<pre> <H1><?PHP echo ___("Getting Started")?></H1> - function ___($str) { - return $array[$str]; - }</pre> - -<h3 id="Advantage_to_.lang"><span class="mw-headline">Advantage to .lang</span></h3> - -<ol> - <li>Simple work-flow allowing the web developer to place the file in SVN and it can appear on the staging server</li> - <li>.lang syntax is like simplified .po, which many localizers who are familiar with linux and other projects understand</li> - <li>Mozilla has a basic tool called main.lang checker, which can show any untranslated files to the localizer</li> - <li>no need to compile to .mo file so a localizer can see his/her changes more quickly</li> - <li>creating simple diffs</li> - <li>.lang files will be cached which will reduce any slowness effect</li> -</ol> - -<h3 id="Disadvantage_to_.lang"><span class="mw-headline">Disadvantage to .lang</span></h3> - -<ol> - <li>no plural forms</li> - <li>no context for localizers unless you provide good comments</li> - <li>no styling by localizers if it is needed</li> - <li>may be slower because file is not compiled into binaries</li> - <li>not used as a standard by any other localization project</li> - <li>no tools to validate syntax, so a localizer may cause accidental errors that can cause breakage (level of breakage depends on level of error)</li> - <li>cannot use po editor, which most localizers know and love</li> -</ol> - -<h2 id="gettext_(.po)"><span class="mw-headline">gettext (.po) </span></h2> - -<p>Gettext is a widely-used localization format that uses .po files. With this arrangement, content for localization is presented in the following manner:</p> - -<pre> msgid "coming soon" - msgstr "Bientôt disponible" -</pre> - -<p>where the value in the "" of the <code>msgid</code> is the English content, and the value in the "" of the <code>msgstr</code> is the translation. <code>msgstr</code> can be longer translations than just the exact above. For example, below is the entire introduction used for a certificate that was presented to those who downloaded Firefox during the Download Day campaign. The French content runs three lines:</p> - -<pre> msgid "certificate_intro" - msgstr "" - "Merci de nous avoir aidé à établir ce record du monde ! " - "Allez-y et montrez-le en téléchargeant et en imprimant votre " - "certificat personnalisé Firefox 3 Download Day." -</pre> - -<h3 id="Advantages_of_gettext"><span class="mw-headline">Advantages of gettext</span></h3> - -<ol> - <li>gettext has very powerful tools to update this site (if you use the actual English strings in <code>msgid</code>s, not unique identifier strings like <code>certificate_intro</code>)</li> - <li>Very established with a large set of powerful tools</li> - <li>Harder to screw things up because existing tools will not allow localizers to edit the l10n file where they shouldn't</li> - <li>Separates localizable strings available for localizers for the rest of the code, protecting it from unintended changes</li> -</ol> - -<h3 id="Disadvantage_of_gettext"><span class="mw-headline">Disadvantage of gettext</span></h3> - -<ol> - <li>.po file needs to be compiled into a .mo file for localizer to see changes</li> - <li>Using regular <code>diff</code> to see changes to a file is sometimes impossible because the editing tool can save the .po file using a completely different structure or order of entities.</li> -</ol> - -<p>Read more about gettext <a class="external" href="http://en.wikipedia.org/wiki/GNU_gettext" title="http://en.wikipedia.org/wiki/GNU_gettext">on Wikipedia</a> and <a href="/en/gettext" title="en/gettext">on MDC</a>.</p> - -<h2 id="Wiki"><span class="mw-headline">Wiki </span></h2> - -<p>Blogging, documentation, and other types of Mozilla content often surface as wikis.</p> - -<h2 id="Case_study_Download_Day"><span class="mw-headline">Case study: Download Day</span></h2> - -<p>In the above Gettext example, notice how the web developer used "certificate_intro" as the value of the msgid. This is not the actual content that was translated. So, if a localizer wanted to use one of the many powerful Gettext tools, like po-editor, the msgid provides NO CONTEXT for translation or for other localizers to verify translations when QA-ing. This should have been avoided.</p> - -<p>In the case of Download Day, someone created entity-like identifiers in the msgid, which we have shown above with the "certificate_intro" key. Then, an en-US repository was created holding the translations to all the entity-like values of msgid. This is very non-standard because it avoids one of the obvious powers of Gettext. When English content is used as the value of the msgid, there is no need to place that content in a special repository.</p> - -<p>But, in the Download Day example, when changes were made to en-US, the web-developer had to push those changes to all the repositories of all the locales. Localizers had to revisit an en-US repository to find the exact msgid, review the change, and return to their repository to make changes.</p> - -<p>Without having the exact content as the msgid, this process may cause several errors since the localizers cannot has to continually switch back-and-forth. In this case, the choice to use customized values for msgid was error-prone, onerous, and unfamiliar to localizers who are used to more customary Gettext operations.</p> diff --git a/files/ru/mozilla/localization/локализация_с_помощью_pontoon/index.html b/files/ru/mozilla/localization/локализация_с_помощью_pontoon/index.html deleted file mode 100644 index 5da2effe14..0000000000 --- a/files/ru/mozilla/localization/локализация_с_помощью_pontoon/index.html +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: Локализация с помощью Pontoon -slug: Mozilla/Localization/Локализация_с_помощью_Pontoon -tags: - - Pontoon - - Локализация - - Перевод -translation_of: Mozilla/Localization/Localizing_with_Pontoon ---- -<p><a href="https://pontoon.mozilla.org" title="https://pontoon.mozilla.org">Pontoon</a> - это веб-приложение в стиле WYSIWYG-редактора (What-You-See-Is-What-You-Get - "Что видишь, то и получается"), используемое для перевода содержимого страниц сети Интернет на другой язык. Мы используем Pontoon для локализации всех продуктов Mozilla и веб-сайтов Mozilla. (Так же для интерфейса приложений операционной системы Firefox OS, известного под названием Gaia). Pontoon - это очень простой интуитивно понятный инструмент, который практически не требует каких-либо технических навыков в процессе локализации. В этой статье мы расскажем, как использовать Pontoon для локализации проектов, начиная с момента регистрации в системе и заканчивая вашим участием в коллективном переводе. Заодно покажем некоторые приятные возможности, которые сделают процесс перевода ещё эффективнее и проще.</p> - -<div class="note"> -<p><strong>Вы являетесь разработчиком?</strong> Прочитайте статью <a href="/en-US/docs/Implementing_Pontoon_Mozilla">Добавление системы Pontoon на ваш сайт</a> или узнайте, как принять участие в разработке проекта на сайте <a href="https://github.com/mozilla/pontoon">GitHub</a>.</p> -</div> - -<h2 id="Первые_шаги">Первые шаги</h2> - -<p><a href="https://pontoon.mozilla.org" title="https://pontoon.mozilla.org">Домашняя страница системы Pontoon</a> элементарна в работе. Для того, чтобы начать локализацию проекта, нажмите на картинку пользователя (справа-сверху) и авторизуйтесь в системе (<em>Sign in</em>). Далее выберите проект, над которым хотите работать, и желаемый язык в выпадающем меню. Pontoon автоматически откроет проект, и можно начинать работу. Заметьте, что мы будем использовать для демонстрации функций Pontoon сайт <a href="https://advocacy.mozilla.org/en-US">Mozilla Advocacy</a>. Откроем этот сайт в системе Pontoon:</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/14071/start2-new.PNG" style="height: 646px; width: 1270px;"></p> - -<h3 id="Главная_панель_инструментов">Главная панель инструментов</h3> - -<p>Как видите, часть интерфейса - это непосредственно сама веб-страница, которая в данный момент переводится. Системе Pontoon принадлежит панель инструментов вверху экрана, содержащая следующие элементы (слева направо), а также список переводимых строк. Панель инструментов:</p> - -<p><img alt=""></p> - -<h4 id="Выбор_языка_(Russian_ru)">Выбор языка (<code>Russian ru</code>)</h4> - -<p>Выбор языка, на который необходимо перевести проект</p> - -<h4 id="Выбор_проекта_(Mozilla_Advocacy)">Выбор проекта (<code>Mozilla Advocacy</code>)</h4> - -<p>Переключение между проектами (сайтами)</p> - -<h4 id="Выбор_переводимого_ресурса_сайта_(Direct_1)">Выбор переводимого ресурса сайта (<code>Direct 1</code>)</h4> - -<p>Переключение между разными ресурсами проекта, например, страницы, файлы. Если ресурсов нет, то данная секция скрывается</p> - -<h4 id="sect1"><span id="cke_bm_941S" style="display: none;"> </span></h4> - -<dl> -</dl> - -<h4 id="Go">Go</h4> - -<p>Открывает ресурс</p> - -<h4 id="Индикатор_прогресса_(100)">Индикатор прогресса (<code>100%</code>)</h4> - -<p>Показывает процент переведённого текста</p> - -<dl> -</dl> - -<h4 id="Меню_пользователя"><span id="cke_bm_943S" style="display: none;"> </span>Меню пользователя</h4> - -<p>Содержит дополнительное меню: настройки профиля пользователя, справку, возможность скачать файлы и другое.</p> - -<p><span id="cke_bm_608E" style="display: none;"> </span></p> - -<dl> -</dl> - -<h2 id="Перевод_строк">Перевод строк</h2> - -<p>При использовании Pontoon у вас есть несколько способов для перевода. Можно переводить способами "в контексте", "вне контекста" или комбинированным способом.</p> - -<h3 id="В_контексте">В контексте</h3> - -<p>Открывается веб-страница и предоставляется возможность редактировать её в реальном времени. Пример:</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/14073/in-context%20translate2-new.PNG" style="height: 646px; width: 1268px;"></p> - -<ol> - <li>Наведите курсор мыши на текст, который хотите перевести.</li> - <li>Появится кнопка "карандаш" над текстом. Кликните её.</li> - <li>В окне слева введите перевод.</li> - <li>Нажмите кнопку "Suggest" для сохранения.</li> -</ol> - -<div> -<h3 id="Вне_контекста">Вне контекста</h3> - -<p>Некоторые элементы невозможно перевести прямо на странице способом "в контексте", например, содержимое тега <title> на веб-страницах или строки, которые меняются, в зависимости от формы множественного употребления (одна книга, две книги и т.д.). Кликая на элементы панели, появившейся слева, вы выбираете тот, который необходимо перевести. При указании элемента, справа откроется окно редактирования:</p> - -<p><img alt=""></p> - -<ol> - <li>В левой части экрана кликните в строку, которую надо перевести.</li> - <li>В правой части откроется панель перевода с оригинальным текстом и областью для ввода перевода.</li> - <li>Введите переведённый текст.</li> - <li>Нажмите кнопку "Suggest" для сохранения.</li> -</ol> - -<p>Когда вы переводите <em>вне контекста</em>, то перевод также появится на сайте, как если бы вы переводили <em>в контексте</em>.</p> - -<h3 id="Помощники_для_перевода">Помощники для перевода</h3> -</div> - -<p>Как вы видите, история перевода, машинный перевод и перевод на другие языки доступны во время перевода на панели во вкладках. Это помощники перевода. Как они вам могут помочь:</p> - -<p><img alt="" src="https://mdn.mozillademos.org/files/14065/translation-helpers-history-new.PNG"><img alt="" src="https://mdn.mozillademos.org/files/14067/translation-helpers-machine-new.PNG" style="height: 250px; width: 629px;"><img alt="" src="https://mdn.mozillademos.org/files/14069/translation-helpers-locales-new.PNG" style="height: 275px; width: 625px;"></p> - -<h4 id="History">History</h4> - -<p>Показывает предыдущие переводы, включая варианты от других пользователей.</p> - -<h4 id="Machinery">Machinery</h4> - -<p>Показывает варианты переводов от автоматизированных сервисов: общая память предыдущих переводов, <a href="http://transvision.mozfr.org/">Mozilla Transvision</a>, <a href="https://amagama-live.translatehouse.org/">open source translation memory</a>, <a href="http://www.microsoft.com/Language/">Microsoft terminology</a> и <a href="http://www.bing.com/translator">бинг</a>.</p> - -<h4 id="Locales">Locales</h4> - -<p>Показывает соответствующие переводы из других языков.</p> - -<p>По клику одного из предложений в этих вкладках, перевод копируется в область текста-перевода.</p> - -<dl> -</dl> - -<h2 id="Публикация_перевода">Публикация перевода</h2> - -<p>Предположим, вы хотите опубликовать ваш перевод (<em>l10n-труд</em>), закоммитив его в репозиторий. Система Pontoon вам это позволяет! На самом деле она автоматически синхронизируется каждый час. Теперь вы можете отдохнуть и отпраздновать сделанную работу!</p> diff --git a/files/ru/mozilla/marketplace/index.html b/files/ru/mozilla/marketplace/index.html deleted file mode 100644 index 5986dd873e..0000000000 --- a/files/ru/mozilla/marketplace/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Firefox Marketplace -slug: Mozilla/Marketplace -tags: - - B2G - - Marketplace - - NeedsTranslation - - TopicStub -translation_of: Archive/Mozilla/Marketplace ---- -<div class="summary">Firefox Marketplace является открытым и неимущественным Интернет-рынком веб-приложений". В этой зоне вы найдете все сведения, необходимые для подготовки и публикации приложений на Firefox Marketplace. Узнайте о том, как сделать приложения успешным, варианты доставки, монетизация, публикации и обновления приложений, библиотек и API, чтобы использовать особенности Marketplace.</div> - -<div class="column-container"> -<p>Mozilla приносит свои основные ценности - открытость, свобода, выбор для пользователя - миру публикации приложений.</p> - -<p>Используя стандартные Web-технологии, языки и инструменты Firefox Marketplace позволяет Вам публиковать платные и бесплатные приложения. Эти приложения могут быть упакованы, работает в Firefox, или, размещенные на вашем веб-сервере. Опубликованные приложения доступны для пользователей Firefox на компьютерах, устройствах Android и Firefox OS телефонов где бы они ни находились в мире. Находить ваши приложения можно легко в Firefox Marketplace, используя рекомендуемые разделы " приложения", приложение категориям и мощный поиск. Пользователь затем может установить бесплатные приложения мгновенно, или покупать платные приложения с растущей поддержкой кредитной карты платежи и биллинг оператора.</p> -</div> - -<div class="row topicpage-table"> -<div class="section"> -<h2 class="Community" id="Community" name="Community">Publishing your app</h2> - -<dl> - <dt><a href="/en-US/Marketplace/Publishing/Publish_options">App publishing options</a></dt> - <dd>After you've build an Open Web App, there are different options available for publishing it out to the world. This article explains what's available.</dd> - <dt><a href="/en-US/Marketplace/Submission/Submitting_an_app">Submitting an app to the Firefox Marketplace</a></dt> - <dd>A detailed guide for those wanting to publish an app on the Firefox Marketplace.</dd> - <dt><a href="/en-US/Apps/Publishing/General_app_publishing_topics">General app publishing topics</a></dt> - <dd>General information and useful tips on open web app publishing.</dd> - <dt><a href="/en-US/Marketplace/Marketplace_APIs">Firefox Marketplace APIs</a></dt> - <dd>Links to the main reference guides covering Mozilla's Firefox Marketplace APIs, with which you can configure app payment accounts, automate app submissions, and more.</dd> -</dl> -</div> - -<div class="section"> -<h2 class="Community" id="Community" name="Community">Monetization</h2> - -<dl> - <dt><a href="/en-US/Marketplace/Monetization/Profiting_from_your_app">Profiting from your app</a></dt> - <dd>You've worked hard on coding your latest app, but how can you get something back when publishing it? This article provides a detailed introduction to implementing app payments, including Marketplace payments and in-app payments.</dd> -</dl> - -<h2 class="Tools" id="Tools" name="Tools">Tools for app developers</h2> - -<ul> - <li><a href="/en-US/Firefox_OS/Using_the_App_Manager">Firefox OS App Manager</a></li> - <li><a href="/en-US/Apps/App_developer_tools">App developer tools</a></li> -</ul> - -<h2 id="Creating_your_own_marketplace">Creating your own marketplace</h2> - -<dl> - <dt><a href="/en-US/Marketplace/Creating_a_store">Creating a store</a></dt> - <dd>You don't have to use the Firefox Marketplace to distribute your app.</dd> -</dl> -</div> -</div> - -<h2 id="Subnav">Subnav</h2> - -<ol> - <li><a href="/en-US/Marketplace/Submission">App Submission & Review</a> - - <ol> - <li><a href="/en-US/Marketplace/Submission/Submitting_an_app" title="This step-by-step guide will help you successfully submit your app to the Firefox Marketplace.">Submitting an app to the Firefox Marketplace</a></li> - <li><a href="/en-US/Marketplace/Submission/Rating_Your_Content">Obtaining a rating for your app</a></li> - <li><a href="/en-US/Marketplace/Submission/Marketplace_review_criteria" title="An explanation of the criteria an app must meet in order to be published on the Firefox Marketplace">Marketplace review criteria</a></li> - <li><a href="/en-US/Marketplace/Publishing/Marketplace_screenshot_criteria" title="Some guidelines on how to create an effective screenshot for marketplace submission">Marketplace screenshot criteria</a></li> - <li><a href="/en-US/Marketplace/Publishing/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.">Privacy policy</a></li> - <li><a href="/en-US/Marketplace/Submission/Testing_and_troubleshooting">App testing and troubleshooting</a></li> - </ol> - </li> - <li><a href="/en-US/Marketplace/Publishing">App Publishing</a> - <ol> - <li><a href="/en-US/Marketplace/Publishing/Publish_options" title="If you don't want to go the Firefox Marketplace route, here is some useful information on self-publishing apps.">Publishing options</a></li> - <li><a href="/en-US/Marketplace/Publishing/Packaged_apps" title="A detailed description of packaged apps, what the different types entail, and what they are used for in the context of the Firefox Marketplace, and self-published apps.">Packaged Apps</a></li> - <li><a href="/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.">Updating apps</a></li> - <li><a href="/en-US/Marketplace/Publishing/Open_web_apps_for_android">Open Web Apps for Android</a></li> - <li><a href="/en-US/Marketplace/Publishing/Open_web_apps_for_desktop">Open Web Apps for Desktop</a></li> - <li><a href="/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.">Adding a subdomain for an app</a></li> - <li><a href="/en-US/Marketplace/Publishing/Creating_a_store" title="Information that may be helpful to you if you want to build your own store for selling and distributing Open Web Apps.">Creating a store</a></li> - </ol> - </li> - <li><a href="/en-US/Marketplace/Monetization">Monetization</a> - <ol> - <li><a href="/en-US/Marketplace/Monetization/Profiting_from_your_app" title="This guide contains introductory materials on how to monetize your apps, including tools needed, and a monetization calculator.">Profiting from your app</a></li> - <li><a href="/en-US/Marketplace/Monetization/App_payments_guide">App payments guide</a></li> - <li><a href="/en-US/Marketplace/Monetization/In-app_payments" title="A guide to implementing support for in-app payments in your Web app.">In-app payments</a></li> - <li><a href="/en-US/Marketplace/Monetization/validating_a_receipt" title="A guide to when—and how—to validate your app's purchase receipt.">Validating a receipt</a></li> - <li><a href="/en-US/Marketplace/Monetization/App_pricing" title="A round up of fixed price points you can choose for your paid apps, and how these vary across different currencies, along with useful supporting information on dealing with app payments.">App pricing list</a></li> - <li><a href="/en-US/Marketplace/Monetization/Payments_Status" title="An at-a-glance summary of what countries have got our app payment services set up in them — where paid apps can be distributed">Payments Status</a></li> - </ol> - </li> - <li><a href="/en-US/Marketplace/APIs">Marketplace APIs</a> - <ol> - <li><a href="/en-US/Marketplace/APIs/Marketplace_utility_library" title="To help you work with the Firefox Marketplace, we provide a JavaScript library you can use in your apps to make it easier to handle in-app payments and verify payment receipts.">Marketplace utility library</a></li> - <li><a href="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/submission.html" title="The Submission API lets you validate your app, update your app, and fetch information about the apps available to be installed.">Submission API</a></li> - <li><a href="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/payment.html" title="The Payment API lets you get information about and process in-app purchases as well as to simply get information about what pricing tiers are available.">Payment API</a></li> - <li><a href="http://firefox-marketplace-api.readthedocs.org/en/latest/topics/overview.html" title="All Marketplace-related documentation is centered here.">Marketplace API</a></li> - </ol> - </li> - <li><a href="/en-US/Marketplace/FAQ">Firefox Marketplace FAQ</a></li> -</ol> diff --git a/files/ru/mozilla/marketplace/options/packaged_apps/index.html b/files/ru/mozilla/marketplace/options/packaged_apps/index.html deleted file mode 100644 index fdbe9eeb05..0000000000 --- a/files/ru/mozilla/marketplace/options/packaged_apps/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Упакованные приложения -slug: Mozilla/Marketplace/Options/Packaged_apps -translation_of: Archive/Mozilla/Marketplace/Options/Packaged_apps ---- -<div class="summary"> - <p><span class="seoSummary">A <strong>packaged app</strong> 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. This article provides an introduction to packaged apps and links to everything you need to know about packaged apps from a developer standpoint.</span></p> -</div> -<p>A packaged app is zip file that contains all the resources that enable an Open Web App to function, along with an <a href="/en-US/docs/Web/Apps/Manifest">app manifest</a> in the zip's root directory. The app manifest provides details about the app such as its description, icons used to identify the installed app and such. The package is then used to install the app to Firefox OS devices, <a href="/en-US/Marketplace/Options/Open_web_apps_for_android">Android devices</a> and <a href="/en-US/Marketplace/Options/Open_web_apps_for_desktop">desktops</a>. Once installed the app runs on the device, but is still able to access resources on the Web, such as a database on a Web server.</p> -<p>There are three <a href="#types_of_packaged_apps">types of packaged apps</a>: web app, privileged app and certified app. While packaged apps can be used to deliver any type of Open Web App, privileged and certified apps are digitally signed to enable the use of <a href="/en-US/Apps/Build/App_permissions">privileged and certified APIs</a>. Privileged apps are signed as part of the Marketplace review process, while certified apps are signed by device manufacturers or operators.</p> -<p>In addition to their ability to use privileged and certified APIs, packaged apps offer users a faster first start response as all the of the app's resources are available on the device after installation. These feature makes packaged apps the recommended approach for delivering Open Web Apps to Firefox OS devices, <a href="/en-US/Marketplace/Options/Open_web_apps_for_android">Android devices</a> and <a href="/en-US/Marketplace/Options/Open_web_apps_for_desktop">desktops</a>.</p> -<div class="note"> - <p><strong>Примечание:</strong> Currently the Firefox Marketplace supports web and privileged packaged apps. In addition, Firefox Marketplace supports paid packaged apps for Firefox OS only and free packaged apps for Firefox OS, Firefox for Android and Firefox for Desktop. Support for paid apps on all platforms is under development.</p> -</div> -<h2 id="Виды_упакованных_приложений"><a name="types_of_packaged_apps">Виды упакованных приложений</a></h2> -<p>There are three types of packaged apps: web apps, privileged apps and certified app. Each type of packaged app corresponds to a level of the <a href="https://developer.mozilla.org/en-US/Firefox_OS/Security/Security_model#App_Security">App Security</a> model implemented in Firefox OS. This section provides more information on each.</p> -<h3 id="Веб-приложение">Веб-приложение</h3> -<p>A web app is one that doesn't make use of privileged or internal (certified) APIs. When submitted to Marketplace the app's package is signed, but the special authentication process used for privileged or internal apps isn't performed. Web apps therefore cannot use privileged or internal APIs. These apps are not subject to the <a href="/en-US/Apps/CSP">Content Security Policies</a> (CSPs) required for privileged and internal apps.</p> -<p>This type of packaged app doesn't require the <code>type</code> field in its <code>manifest.webapp</code> file, because the default value for <code>type</code> (<code>web</code>) is correct.</p> -<div class="note"> - <p><strong>Примечание</strong>: Web apps may be <a href="/en-US/Marketplace/Options/Self_publishing">self-published</a> or distributed through the Firefox Marketplace.</p> -</div> -<div class="note"> - <p><strong>Примечание</strong>: Web apps can also be delivered using the <a href="/en-US/Marketplace/Options/Hosted_apps">Hosted app</a> mechanism.</p> -</div> -<h3 id="Приложение_с_привелегиями">Приложение с привелегиями</h3> -<p>A privileged app is one that makes use of privileged APIs and can be considered as the equivalent of a native app on platforms such as iOS and Android. When submitted to the Firefox Marketplace, privileged apps are approved using a special process. This process gives users of the app a level of assurance that the app has been carefully reviewed for potential security, privacy, and capability issues.</p> -<p>To specify that an app is a privileged app, add the <a href="/en-US/docs/Web/Apps/Manifest#type"><code>type</code></a> field to its <code>manifest.webapp</code> file and set its value to <code>privileged</code>. Every privileged API your app needs to access must be added to the <code>permissions</code> field in the <a href="/en-US/docs/Web/Apps/Manifest">app's manifest</a>.</p> -<p>Firefox OS and the Web runtimes for Android and desktops enforces the following <a href="/en-US/docs/Security/CSP/Introducing_Content_Security_Policy">CSP</a> for privileged apps:</p> -<pre class="brush: js">"default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'"</pre> -<div class="note"> - <p><strong>Примечание</strong>: Privileged apps may be distributed through the Firefox Marketplace only.</p> -</div> -<h3 id="Internal_(Certified)_apps">Internal (Certified) apps</h3> -<div class="geckoVersionNote"> - <p>Internal apps are not generally available for being created by third-party developers and aren't distributed through the Firefox Marketplace. The long term goal for internal APIs is to harden them so they can be made available as privileged APIs. If you've an interest in seeing a particular API made available, please provide feedback on the <a href="https://lists.mozilla.org/listinfo/dev-webapps">dev-webapps</a> mailing list.</p> -</div> -<p>An internal app is one that makes used of internal (certified) APIs, which offer access to critical system function such as the default dialer or the system settings app on a device. Compared to to a privileged app, all API permissions in an internal app are implicit, meaning they are enabled without explicit user approval. An internal app must be approved for a device by the OEM or carrier.</p> -<p>To specify that an app is an internal app, add the <a href="/en-US/docs/Web/Apps/Manifest#type"><code>type</code></a> field to its <code>manifest.webapp</code> file and set it to <code>certified</code>. Every privileged and internal API your app needs to access must be added to the <code>permissions</code> field in the <a href="/en-US/docs/Web/Apps/Manifest">app's manifest</a>.</p> -<p>Firefox OS implements the following CSP for internal apps:</p> -<pre class="brush: js">"default-src *; script-src 'self'; object-src 'none'; style-src 'self'"</pre> -<p>This has the effect of implementing stricter rules for inline CSP for internal compared to privileged apps. If you want to understand the reasoning behind this, see <a href="https://wiki.mozilla.org/Apps/Security#Default_CSP_policy">Default CSP policy</a> and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=768029">Bug 768029</a>.</p> -<div class="note"> - <p><strong>Примечание</strong>: Internal apps are preloaded onto devices by OEMs and operators; they are not distributed in any other way.</p> -</div> -<div class="note"> - <p><strong>Примечание</strong>: The internal codename for internal apps is certified apps.</p> -</div> -<h2 id="Тестирование_упакованных_приложений">Тестирование упакованных приложений</h2> -<p>To install a packaged app into a Firefox OS Simulator or onto a device for testing purposes, see <a href="/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="/en-US/Marketplace/Options/Self_publishing">Publishing apps yourself</a>. Remember that when you publish apps yourself, packaged web apps only can be installed .</p> -<h2 id="Публикация_упакованных_приложений">Публикация упакованных приложений</h2> -<p>You have two options for publishing packaged apps: on Firefox Marketplace or self-publishing.</p> -<h3 id="Публикация_на_Firefox_Marketplace">Публикация на Firefox Marketplace</h3> -<p>The process for submitting a packaged app to Firefox Marketplace is described in the <a href="/en-US/Marketplace/Publishing">App Publishing</a> section.</p> -<p>When you submit your packaged app, its zip file is stored on the Marketplace servers, and the Marketplace generates a new manifest called the <strong>mini-manifest</strong> that is based on the app manifest in your packaged app's zip file. When a user installs your app, the mini-manifest is passed to the <a href="/en-US/docs/Web/API/Apps.installPackage"><code>Apps.installPackage()</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 packaged web apps outside Firefox Marketplace, on your own web server. Details are provided in <a href="/en-US/Marketplace/Options/Self_publishing">Publishing apps yourself</a>.</p> -<h2 id="Обновление_упакованных_приложений">Обновление упакованных приложений</h2> -<p>См. <a href="/ru/docs/Mozilla/Marketplace/Publishing/Updating_apps">Обновление приложений</a>.</p> -<h2 id="Больше_информации">Больше информации</h2> -<ul> - <li><a href="/en-US/Firefox_OS/Security/Security_model">Firefox OS security Overview</a></li> - <li><a href="/en-US/Firefox_OS/Security/Application_security">Application Security</a></li> - <li><a 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> -<p> </p> diff --git a/files/ru/mozilla/marketplace/options/введение/index.html b/files/ru/mozilla/marketplace/options/введение/index.html deleted file mode 100644 index bdace69444..0000000000 --- a/files/ru/mozilla/marketplace/options/введение/index.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Введение — Возможности при публикации -slug: Mozilla/Marketplace/Options/Введение -translation_of: Archive/Mozilla/Marketplace/Options/Introduction ---- -<div class="summary"> -<p><span style="font-weight: bold; background-color: rgb(244, 247, 248);">Firefox Marketplace предоставляет возможность публикации приложений, которые легко смогут найти пользователи Firefox OS, Firefox для Android и Firefox для Desktop. Тем не менее, это не единственный способ распространения ваших приложений. В этом разделе вы сможете найти форматы, в которых вы сможете предоставлять свои приложения, механизмы браузеров Firefox, позволяющие приложениям работать на Android и настольных компьютерах, опции для самостоятельной публикации и пути кастомизации вашего Marketplace.</span></p> -</div> - -<h2 id="Варианты_публикации">Варианты публикации</h2> - -<dl> - <dt><a href="/en-US/Marketplace/Options/Packaged_apps">Packaged apps</a></dt> - <dd>Узнайте о предпочтительном способе доставки приложений, которы даёт вам доступ к привилегированным и защищённым API.</dd> - <dt><a href="/en-US/Marketplace/Options/Hosted_apps">Hosted apps</a></dt> - <dd>Узнайте, как сделать приложения доступными с вашего сервера, в то же время давая пользователям преимущества устанавливаемых приложений.</dd> - <dt><a href="/en-US/Marketplace/Options/Packaged_or_hosted_">Packaged или hosted?</a></dt> - <dd>Воспользуйтесь этим чеклистом, чтобы определить какой формат лучше подойдет для ваших приложений.</dd> - <dt><a href="/en-US/Marketplace/Options/Open_web_apps_for_android">Open Web Apps дя Android</a></dt> - <dd>Теперь приложения из Firefox Marketplace доставляются пользователям Android через APK, давая возможность установить и использовать ваше приложение так же, как любое другое приложение под Android. Узнайте, как это делается.</dd> - <dt><a href="/en-US/Marketplace/Options/Open_web_apps_for_desktop">Open Web Apps для десктопа</a></dt> - <dd>Open Web Apps теперь можно установить на Windows, Mac и Linux PCs через браузер Firefox для Desktop, позволяя пользователям запускать приложение так же, как любые другие. Узнайте, как это делается.</dd> - <dt><a href="/en-US/Marketplace/Options/Self_publishing">Публикуйте приложения самостоятельно</a></dt> - <dd>Иногда вам понадобится опубликовать приложение вне Firefox Marketplace, возможно для тестов или дистрибуции в вашей компании. Узнайте о возможных вариантах и как их реализовать.</dd> - <dt><a href="/en-US/Marketplace/Options/Creating_a_store">Создайте свой Marketplace</a></dt> - <dd>Публикуете ли приложения в Firefox Marketplace или самостоятельно, у вас есть множество вариантов для представления их в магазине. В этой секции мы рассмотрим эти варианты и как их воплотить в жизнь.</dd> - <dt> </dt> - <dd> </dd> -</dl> - -<p> </p> diff --git a/files/ru/mozilla/marketplace/prepare/deciding_what_to_build/index.html b/files/ru/mozilla/marketplace/prepare/deciding_what_to_build/index.html deleted file mode 100644 index bf1a717509..0000000000 --- a/files/ru/mozilla/marketplace/prepare/deciding_what_to_build/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Deciding what to build -slug: Mozilla/Marketplace/Prepare/Deciding_what_to_build -translation_of: Archive/Mozilla/Marketplace/Prepare/Deciding_what_to_build ---- -<div class="summary"> - <p><span class="seoSummary">Find advice about deciding on the apps and games you’ll create for Firefox Marketplace.</span></p> -</div> -<p>In a world where the mantra ‘there will be an app for that’ so often seems to be true, it might seem daunting when it comes to choosing what app to create. However, as the often misquoted former United States Commissioner of Patents Charles Holland Duell said in 1902, “In my opinion, all previous advances in the various lines of invention will appear totally insignificant when compared with those which the present century will witness. I almost wish that I might live my life over again to see the wonders which are at the threshold.” Those words are as true today as they were over 100 years ago.</p> -<h2 id="Generating_your_idea">Generating your idea</h2> -<p>So where do you start? Here are some suggestions:</p> -<ul> - <li><strong>Something simple</strong> ─ don’t be afraid to start with something you know, even if it embodies the same ideas as apps that are already in the Marketplace. You may want to use your first app as an opportunity to learn the tools and processes, and that’s fine. However, do also consider whether you can offer something unique or better than existing apps, so yours stands out as more than simply a ‘me too’.</li> - <li><strong>What you know</strong> ─ a hobby, a skill, interest, or sport. These may all offer possibilities for apps that help or inform people with a similar interest.</li> - <li><strong>Everyday problems</strong> ─ many successful apps address everyday problems. Talk to family, friends, and work colleagues and look out for ‘you must be able to create an app for that’ comments. Also look for activities where information on the internet can be given more meaning because of a user’s location or current activity.</li> - <li><strong>Missing apps</strong> ─ review the catalog of apps in the Marketplace to identify what might be missing.</li> - <li><strong>App feedback</strong> ─ don’t overlook the feedback provided on other apps. Within this feedback you’ll come across request from users for enhanced functionality, different features, complaints that some part of the application doesn’t work well, or hints that the user expected the app to do something entirely different. These comments may very well offer inspiration; just be careful that it doesn’t result in a ‘me too’ app.</li> - <li><strong>App suggestion sites, internet forums, and suchlike</strong> ─ a number of sites provide a way for users to make suggestions for mobile apps. These can also be fruitful sources of ideas, but remember to check the Terms and Conditions before you start creating an app based on an idea you spotted on one of these sites.</li> - <li><strong>Open APIs</strong> ─ many sites and services offer open APIs that enable you to access their data and services. These range from the APIs to control gadgets through to the data of large governments and independent providers. These offer possibilities for implementing new ways of doing things, performing new tasks with gadgets or presenting data in ways that offers unexpected help to users.</li> -</ul> -<h2 id="Validating_your_idea">Validating your idea</h2> -<p>Whatever the source of your inspiration, you should:</p> -<ol> - <li>Confirm the problem you want to solve is a real one and that users will want an app to solve it. There is some excellent advice on this process in the <a href="https://developer.mozilla.org/en-US/Apps/Design/Planning_your_app">Planning Your App</a> page in the Design section of the App Center.</li> - <li>Compare your idea to apps that are already in the Marketplace and the stores for other platforms. If you find something similar, it’s not a reason to abandon your idea, rather to ask yourself ‘can I do it better?’ You may be able to solve the problem faster, better or in a more fun way ─ ‘building a better mousetrap’ may be just what’s needed.</li> - <li>Check that you have the necessary rights to create your app. Not all ideas and data are offered in an open way. At one extreme you may have to provide acknowledgements for using them, at the other there may be licensing and cost implications. Make sure you understand these before starting your project.</li> - <li>check that the technology is available. When a certain kind of app doesn’t exist it could be that the technology you need to implement it simply isn’t available on the target platforms, a supported peripheral or data source.</li> -</ol> -<p>But don’t be afraid to experiment. Just because all the advice you get says it’s a bad idea, once implemented and unleashed on mobile users it could strike a chord that no one around you could recognize. In addition, if you first app isn’t a great success you are in good company — Angry Birds was its developer’s 52<sup>nd</sup> game.</p> -<p>And talking of games, here you have both more challenges and more opportunities. The same options exist in determining a good game to develop. Think about games you played as a child, family games, games you played at school, even local or regional games that may translate to a global audience. Another fruitful avenue to explore is local myths and legends, not only will they help define the game play, but the fact they may seem quirky, odd or strange to a global audience can add to their appeal.</p> -<p>There may already be millions of apps out there, but there are millions more to come and the unlikeliest sources could just be the genesis of the next big app thing.</p> -<h2 id="Also_see">Also see:</h2> -<ul> - <li>App Center, Design section, <a href="https://developer.mozilla.org/en-US/Apps/Design/Planning_your_app">Planning Your App</a></li> -</ul> diff --git a/files/ru/mozilla/marketplace/publishing/submit/index.html b/files/ru/mozilla/marketplace/publishing/submit/index.html deleted file mode 100644 index 265a1ad776..0000000000 --- a/files/ru/mozilla/marketplace/publishing/submit/index.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Submit -slug: Mozilla/Marketplace/Publishing/Submit -tags: - - NeedsTranslation - - TopicStub -translation_of: Archive/Mozilla/Marketplace/Publishing/Submit ---- -<p>This section describes the process for submitting an app to Firefox Marketplace</p> -<p>Residual details: <a href="/en-US/Marketplace/Publishing/Submit/Submitting_an_app">https://developer.mozilla.org/en-US/Marketplace/Publishing/Submit/Submitting_an_app</a></p> diff --git a/files/ru/mozilla/marketplace/publishing/submit/rating_your_content/index.html b/files/ru/mozilla/marketplace/publishing/submit/rating_your_content/index.html deleted file mode 100644 index 5d2c32191c..0000000000 --- a/files/ru/mozilla/marketplace/publishing/submit/rating_your_content/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Obtaining a rating for your app -slug: Mozilla/Marketplace/Publishing/Submit/Rating_Your_Content -translation_of: Archive/Mozilla/Marketplace/Publishing/Submit/Rating_Your_Content ---- -<div class="warning"> -<p>This page is undergoing maintenance.</p> -</div> - -<div class="summary"> -<p>Mozilla has partnered with the <a href="http://globalratings.com">International Age Rating Coalition</a> (IARC) to include age-related content ratings along with all apps. Because Mozilla cares about users and believes that users should have the opportunity to decide which content is appropriate for them all apps in the Firefox Marketplace will be required to have an IARC rating. While we love all of our apps, our commitment to this initiative requires any app or game that does not have this rating to be removed from Marketplace after the deadline. Mozilla has extended the dealine to May 15, 2014 to allow developers ample time to update apps via the free IARC rating tool.</p> -</div> - -<h2 id="About_the_IARC_Rating_Tool">About the IARC Rating Tool</h2> - -<p>IARC, a cooperative effort between international rating boards, has introduced a rating tool as a solution to assign content ratings to global, digitally distributed apps and games. By filling out one simple form, you can receive instant rating designations for all participating rating boards. This not only helps educate your users about content, but also dramatically reduces the costs and hassle associated with obtaining various global content ratings individually.</p> - -<h2 id="International_Rating_Systems_Supported">International Rating Systems Supported</h2> - -<p>Using a single rating wizard, content ratings are generated for multiple rating systems, countries and regions.</p> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Rating System</th> - <th scope="col">Countries Supported</th> - </tr> - </thead> - <tbody> - <tr> - <td><a href="http://culturadigital.br/classind/">Classificação Indicativa </a></td> - <td>Brazil</td> - </tr> - <tr> - <td><a href="http://www.esrb.org/">ESRB</a></td> - <td>Canada, Mexico, United States</td> - </tr> - <tr> - <td><a href="http://www.pegi.info">PEGI</a></td> - <td>Austria, Denmark, Hungary, Latvia, Norway, Slovenia, Belgium, Estonia, Iceland, Lithuania, Poland, Spain, Bulgaria, Finland, Ireland, Luxembourg, Portugal, Sweden, Cyprus, France, Israel, Malta, Romania, Switzerland, Czech Republic, Greece, Italy, Netherlands, Slovak Republic, United Kingdom</td> - </tr> - <tr> - <td><a href="http://usk.de/">USK</a></td> - <td>Germany</td> - </tr> - <tr> - <td><a href="https://www.globalratings.com/ratings_guide.aspx">Generic</a></td> - <td>Used for all other countries</td> - </tr> - </tbody> -</table> - -<h2 id="What’s_in_a_Content_Rating">What’s in a Content Rating?</h2> - -<p>The rating system provides users with three types of information:</p> - -<ul> - <li>The recommended minimum age — this may vary by country and culture.</li> - <li>Content descriptors — this provides information about any content the app contains that may be of concern to some users. This may include information on violence, references to alcohol or drug use, scary elements, real or simulated gambling, etc.</li> - <li>Interactive Elements — this provides details of any user interaction features the app contains, such as sharing personal information, sharing their location, In-App Purchases, downloadable content or social networking facilities.</li> -</ul> - -<p>The rating process is free to developers, takes only a few minutes, and is integrated with the Firefox Marketplace submission process and developer dashboard. Before an app can be reviewed, it must have a rating. Users see the rating of an app appropriate for their region on the app details page, and may find out more information should they choose to know more.</p> - -<h2 id="Obtaining_a_Content_Rating_for_Your_App">Obtaining a Content Rating for Your App</h2> - -<p>IARC has provided a free game-rating tool that is simple and for most apps, takes less than five minutes. In this section we'll review the process.</p> - -<div class="note"> -<p><strong>Note</strong>: We unfortunately cannot accept rating certificates from other systems; if your app already has a rating from another system you'll still need to go through the IARC certificate process.</p> -</div> - -<ol> - <li>Log into the Firefox Marketplace developer site; the rating tool may only be accessed when you are logged in as a developer.</li> - <li> - <p>Access the IARC Rating tool during the submission process:</p> - - <p><img alt="Demonstrates where in the app submission flow where ratings can be entered." src="https://mdn.mozillademos.org/files/6579/submission_flow.png" style="border-style: solid; border-width: 1px; height: 239px; width: 200px;"></p> - - <p>or from the Dev Dashboard:</p> - - <p><img alt="" src="https://mdn.mozillademos.org/files/6623/from_nav_bar.png" style="border-style: solid; border-width: 1px; height: 199px; width: 200px;"></p> - </li> - <li> - <p>Start the rating process:</p> - - <p><img alt="" src="https://mdn.mozillademos.org/files/6583/start_the_rating_process.png" style="border-style: solid; border-width: 1px; height: 242px; width: 600px;"></p> - - <p>or enter your information for an existing rating:</p> - - <p><img alt="" src="https://mdn.mozillademos.org/files/6585/enter_existing_rating_info.png" style="border-style: solid; border-width: 1px; height: 276px; width: 600px;"></p> - </li> - <li> - <p>Fill out the short questionnaire:</p> - - <p><img alt="" src="https://mdn.mozillademos.org/files/6587/questions.png" style="border-style: solid; border-width: 1px; height: 725px; width: 600px;"></p> - </li> - <li> - <p>Add additional information about your app:</p> - - <p><img alt="" src="https://mdn.mozillademos.org/files/6589/additional_info.png" style="height: 637px; width: 589px;"></p> - </li> - <li> - <p>Preview and confirm your rating information:</p> - - <p><img alt="" src="https://mdn.mozillademos.org/files/6591/confirm_info.png" style="border-style: solid; border-width: 1px; height: 865px; width: 400px;"></p> - </li> - <li> - <p>Return to the developer dashboard and you should see your rating information. You are ready to go!</p> - </li> -</ol> - -<div class="note"> -<p><strong>Note</strong>: You will receive an email with your rating certificate and security code. Please keep a copy for your records.</p> -</div> - -<h2 id="More_information">More information</h2> - -<p>If you have questions about the rating process, how to answer the questionnaire, or if you think your rating is incorrect, please email the IARC team at <a href="mailto:dev-questions@globalratings.com">dev-questions@globalratings.com</a>. Additional information is also available on the <a href="http://globalratings.com/">global ratings website</a>.</p> - -<p>If you have any other questions, you can get in touch with Mozilla's app review team at <a href="https://groups.google.com/forum/#!forum/mozilla.appreview" title="appreview@lists.mozilla.org">mozilla.appreview</a>.</p> diff --git a/files/ru/mozilla/marketplace/publishing/updating_apps/index.html b/files/ru/mozilla/marketplace/publishing/updating_apps/index.html deleted file mode 100644 index 5c2b477ba6..0000000000 --- a/files/ru/mozilla/marketplace/publishing/updating_apps/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Обновление приложений -slug: Mozilla/Marketplace/Publishing/Updating_apps -translation_of: Archive/Mozilla/Marketplace/Publishing/Updating_apps ---- -<div class="summary"> - <p><span class="seoSummary">This article explains the process by which you update published apps, either self-published or published on the <a href="https://marketplace.firefox.com/">Firefox Marketplace</a>.</span></p> -</div> -<div class="note"> - <p>Once an app has been installed by a user it's not possible to change the app name through an update. New installations will, however, pick up the new app name. This is a security measure to guard against unscrupulous name changes.</p> -</div> -<h2 id="Updating_Hosted_Apps"><strong>Updating Hosted Apps</strong></h2> -<p><a href="/en-US/Marketplace/Options/Hosted_apps">Hosted Apps</a> respect the normal rules for Web caching, and may use advanced mechanisms for improved start-up or to enable offline use, such as <a href="/en-US/docs/HTML/Using_the_application_cache">AppCache</a>. Given this, there are normally no special considerations for updating these apps — you simply update the app on your site.</p> -<p>However, some changes to your apps may involve updates to the <a href="/en-US/Apps/Build/Manifest">manifest</a>.</p> -<h3 id="Changing_a_manifest’s_content"><strong>Changing a manifest’s content</strong></h3> -<p>To update features of a published app — such as the app name, developer name, locales, icons or app name — you simply apply these changes to the manifest you host. If you've submitted the app to Firefox Marketplace and any of these changes are considered significant the app is flagged for <a href="#Re_review_of_updated_apps">review</a>.</p> -<p>The Web runtimes and Firefox OS should automatically detect these changes and trigger an update on the user’s device. However, you can manually trigger updates by providing a version field in the app manifest. Your app can then check the version by inspecting the return value of {{ domxref("Apps.getInstalled") }}. If the user's installed version is not up-to-date, your app can trigger an update using {{ domxref("Apps.install") }}. Note that some changes to a manifest, and hence the installation, may require user approval before the update is actioned.</p> -<p>The value of version isn't used by Firefox OS or the Web runtimes, so you can use whatever version scheme you want.</p> -<h3 id="Changing_a_manifest's_location"><strong>Changing a manifest's location</strong></h3> -<p>You may wish to change the location of your app’s manifest file. Typically you'll do this to move the app to a new domain or to a sub-domain to enable you to deliver multiple hosted apps.</p> -<p>If you wish to do this for apps submitted to Firefox Marketplace, return to the app submission and on the Edit Details page change the Manifest URL value. What happens next will depend on the status of your app:</p> -<ul> - <li>for a published (or approved but not published) app, the app is flagged for <a href="#Re_review_of_updated_apps">review</a> and you’ll be contacted if (and only if) any subsequent problems are discovered.</li> - <li>for unapproved apps, the review will proceed as normal.</li> -</ul> -<h3 id="Reviews_of_updated_apps"><a name="Re_review_of_updated_apps">Reviews of updated apps</a></h3> -<p>When a Hosted App is flagged for review as the result of an update, the following happens:</p> -<ul> - <li>The app’s status doesn’t change, a published app remains published.</li> - <li>The app is added to the review queue and when it pops from the queue (anything from a few hours to a few days later) a reviewer will examine the changes and: - <ul> - <li>clear the flag.</li> - <li>if the app is completely broken, reject it and contact you. This will remove the app from Firefox Marketplace, if it has been published.</li> - <li>contact you for further information.</li> - </ul> - </li> -</ul> -<div class="warning"> - <p>Where possible you should avoid changing the location of the app/manifest after your app has been published in the Firefox Marketplace. This is because of the impact on the user. A change in the manifest location will result in a new installed instance of the app when {{ domxref("Apps.install") }} is invoked. Many users will find this confusing.</p> -</div> -<h2 id="Обновление_упакованных_приложений"><strong>Обновление упакованных приложений</strong></h2> -<p><a href="/ru/docs/Mozilla/Marketplace/Options/Packaged_apps">Упакованные приложения</a> have a different update process to Hosted Apps. To update a Packaged App, you upload a new version of the app's zip file to the Firefox Marketplace. The updated app is then reviewed and, when approved, published to the Marketplace. This triggers an update to any installed versions. Firefox OS device users can also request an update using the Settings app. To upload a new version of your application, sign in to marketplace with the same account as the original submission by clicking on the gear icon in the top right and clicking "My Submissions." Under the header "Manage My Submissions" and the app in question, click "Status & Versions." From there, scroll down and click on "Select a File" under "Upload New Version." From there, you can choose not have an app automatically published upon review if you wish by unchecking the box that reads "Publish my app in the Firefox Marketplace as soon as it's reviewed." Users' devices will check daily for app updates, and will see a notification that an update for their app is available for download at their discretion.</p> -<p><img alt="Would you like to publish to marketplace upon review?" src="https://mdn.mozillademos.org/files/8523/publish_checkbox.png" style="width: 1000px; height: 232px;"></p> -<ul> - <li>When the updated packaged app is published, the <a href="/en-US/docs/Web/Apps/Packaged_apps#Packaged_apps_and_the_Firefox_OS_Marketplace">mini-manifest</a> is updated to point to the updated zip file (the mini-manifest is not the main app manifest). The <code>ETag</code> header is changed, and this triggers an update on the Firefox OS phone.</li> - <li>Firefox OS on the phone polls once per day for changes to an app. To do this, it polls the URL of the mini-manifest, then polls the URL in the <code>package_path</code> field in the mini-manifest. This is done using the <code>checkForUpdate()</code> method on the <a href="/en-US/docs/Web/API/App"><code>App</code> object</a>. When the <code>ETag</code> header changes, it knows the app has been updated. Then it checks if the zip file has changed.</li> - <li>Firefox OS checks in a batch for app updates.</li> -</ul> diff --git a/files/ru/mozilla/marketplace/submission/index.html b/files/ru/mozilla/marketplace/submission/index.html deleted file mode 100644 index 1c01f1e00d..0000000000 --- a/files/ru/mozilla/marketplace/submission/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Submission -slug: Mozilla/Marketplace/Submission -tags: - - NeedsTranslation - - TopicStub -translation_of: Archive/Mozilla/Marketplace/Submission ---- -<p>Marketplace submission</p> diff --git a/files/ru/mozilla/mathml_project/index.html b/files/ru/mozilla/mathml_project/index.html deleted file mode 100644 index 7ebc07b2e9..0000000000 --- a/files/ru/mozilla/mathml_project/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Проект MathML сообщества Mozilla -slug: Mozilla/MathML_Project -tags: - - MathML - - MathML Project - - Mozilla -translation_of: Mozilla/MathML_Project ---- -<p>Проект MathML сообщества Mozilla представляет собой проект Mozilla по созданию и расширению поддержки <a href="/en-US/docs/Web/MathML" title="/ru/docs/Web/MathML">MathML</a> в Firefox и других приложениях на базе Mozilla. Смотрите краткий обзор <a href="http://fred-wang.github.io/MozSummitMathML/index.html">слайдов для инновационных ярмарок на саммите Mozilla 2013</a>.</p> - -<h2 id="Обновления">Обновления</h2> - -<p><img alt="Mathzilla" class="default internal" src="https://mdn.mozillademos.org/files/6281/mathzilla.svg" style="float: right; height: 150px; width: 150px;"></p> - -<ul> - <li><a href="/ru/docs/Mozilla/MathML_Project/Status" title="Mozilla MathML Project/Status">Статусы элементов и атрибутов</a></li> - <li><a href="/ru/docs/Mozilla/MathML_Project/MathML3Testsuite" title="Mozilla MathML Project/MathML3Testsuite">Результаты тестирования MathML 3</a></li> - <li><a class="external" href="https://www.wg9s.com/mozilla/firefox/">Неофициальные сборки с применением патчей MathML</a> поддерживается Биллом Гианополисом (Bill Gianopoulos)</li> - <li><a href="/ru/docs/Mozilla/MathML_Project/Updates" title="Mozilla_MathML_Project/Updates">Больше обновлений и архивов контента</a></li> -</ul> - -<h2 id="Сообщество">Сообщество</h2> - -<ul> - <li>Просмотр форумов Mozilla... {{DiscussionList("dev-tech-mathml", "mozilla.dev.tech.mathml")}}</li> - <li><a class="link-irc" href="irc://irc.mozilla.org/%23mathml" rel="external" title="irc://irc.mozilla.org/%23mathml">Канал IRC</a></li> - <li><a class="link-https" href="https://wiki.mozilla.org/MathML:Home_Page">Wiki, использованное разработчиками</a> - ознакомьтесь с последними разработками и помогите нам улучшить MathML в Mozilla.</li> -</ul> - -<h2 id="Ссылки">Ссылки</h2> - -<ul> - <li>Установка <a href="/ru/docs/Mozilla/MathML_Project/Fonts" title="Mozilla MathML Project/Fonts">шрифтов для движка MathML от Mozilla</a></li> - <li><a class="external" href="http://www.w3.org/TR/MathML3/">MathML Version 3.0</a> - Рекомендации W3C, 21 Октября 2010</li> - <li><a class="external" href="http://www.w3.org/Math/testsuite/">Тестирование<abbr>W3C</abbr> <abbr>MathML</abbr></a> - Предназначено для проверки реализации каждого элемента по одному атрибуту (или встроенному поведению рендеринга) за один раз довольно тщательным образом.</li> - <li><a href="/ru/docs/Web/MathML" title="MathML">MathML в сети разработчиков Mozilla</a></li> - <li><a href="/ru/docs/Mozilla/MathML_Project/a11y">Доступность MathML в Mozilla</a></li> -</ul> - -<h3 id="Примеры_документов_MathML">Примеры документов <abbr>MathML</abbr></h3> - -<ul> - <li><a href="/ru/docs/Mozilla/MathML_Project/Screenshots" title="Mozilla MathML Project/Screenshots">Скриншоты</a></li> - <li><a href="/ru/docs/Mozilla/MathML_Project/Start" title="Mozilla_MathML_Project/Start">Стартовая страница <abbr>MathML</abbr></a> - с переводами на разные языки ( <a href="/ar/docs/Mozilla_MathML_Project/Start" title="/ar/Mozilla_MathML_Project/Start">Арабский</a>, <a href="/zh-CN/docs/Mozilla_MathML_Project/Start" title="/zh-CN/Mozilla_MathML_Project/Start">Китайский</a>, <a href="/he/docs/Mozilla_MathML_Project/Start" title="/he/Mozilla_MathML_Project/Start">Иврит</a>, <a href="/th/docs/Mozilla_MathML_Project/Start" title="/th/Mozilla_MathML_Project/Start">Тайский</a>)</li> - <li><a class="external" href="/ru/docs/Mozilla/MathML_Project/Basics">Основы MathML</a> - документ, предназначенный для правильного отображения с использованием только шрифта Symbol, который предустановлен по умолчанию в большинстве конфигураций ОС.</li> - <li><a class="external" href="/ru/docs/Mozilla/MathML_Project/MathML_Torture_Test"><abbr>MathML</abbr> Torture Test</a> - сравнительное тестирование рендеринга MathML и TeX.</li> - <li>Демо некоторых тегов MathML: <a class="external" href="/ru/docs/Mozilla/MathML_Project/mfrac">mfrac</a>, <a class="external" href="/ru/docs/Mozilla/MathML_Project/mo">mo</a>, <a class="external" href="/ru/docs/Mozilla/MathML_Project/mtable">mtable</a>, <a class="external" href="/ru/docs/Mozilla/MathML_Project/mspace">mspace</a>, <a class="external" href="/ru/docs/Mozilla/MathML_Project/mmultiscripts">mmultiscripts</a>, <a class="external" href="/ru/docs/Mozilla/MathML_Project/roots">msqrt-mroot</a>.</li> - <li><a class="external" href="/ru/docs/Mozilla/MathML_Project/Extras">MathML Extras</a> - технологическая демонстрация некоторых интересных результатов, использующих браузерное окружение.</li> - <li><a href="/ru/docs/Mozilla/MathML_Project/Various" title="Mozilla_MathML_Project/Various">Разнообразные тесты MathML</a> - эти страницы были импорированы из <code>layout/mathml/tests/</code>.</li> - <li><a class="external" href="http://golem.ph.utexas.edu/~distler/blog/archives/000104.html">Блог</a> с комментариями, которые включают MathML.</li> -</ul> - -<h3 id="Создание_документов_MathML">Создание документов <abbr>MathML</abbr></h3> - -<ul> - <li><a href="/ru/docs/Web/MathML/Authoring" title="Mozilla MathML Project/Authoring">Средство разработки MathML</a></li> - <li><a class="external" href="http://www.w3.org/Math/Software/mathml_software_cat_editors.html">Редакторы</a></li> - <li><a class="external" href="http://www.w3.org/Math/Software/mathml_software_cat_converters.html">Конвертеры</a></li> - <li><a class="external" href="http://www.w3.org/Math/Software/mathml_software_cat_stylesheets.html">Стили</a></li> -</ul> - -<div class="originaldocinfo"> -<h2 id="Original_Document_Information" name="Original_Document_Information">Информация об исходном документе</h2> - -<ul> - <li>Автор(ы): Roger B. Sidje</li> - <li>Другие участники: Frédéric Wang</li> - <li>Дата последнего обновления: April 4, 2010</li> - <li>Информация об авторских правах (Copyright): Авторские права на данный контент (© 1999-2010) принадлежат отдельным участникам проекта mozilla.org; Контент доступен в соответствии с лицензией Creative Commons | <a class="external" href="http://www.mozilla.org/foundation/licensing/website-content.html">Details</a>.</li> -</ul> -</div> - -<p> </p> diff --git a/files/ru/mozilla/mathml_project/mathml_torture_test/index.html b/files/ru/mozilla/mathml_project/mathml_torture_test/index.html deleted file mode 100644 index 9b1989d392..0000000000 --- a/files/ru/mozilla/mathml_project/mathml_torture_test/index.html +++ /dev/null @@ -1,4174 +0,0 @@ ---- -title: Сравнительный тест MathML -slug: Mozilla/MathML_Project/MathML_Torture_Test -tags: - - Intermediate - - MathML -translation_of: Mozilla/MathML_Project/MathML_Torture_Test ---- -<h2 id="Сравнительный_тест_MathML">Сравнительный тест MathML</h2> - -<div class="hidden"> -<h3 id="Контент_HTML">Контент HTML</h3> - -<pre class="brush: html"><p> - Render mathematics with: - <select name="MathFont" id="MathFont"> - <option value="Default" selected="selected">Default fonts</option> - <option value="Asana">Asana</option> - <option value="Cambria">Cambria</option> - <option value="DejaVu">DejaVu</option> - <option value="LatinModern">Latin Modern</option> - <option value="Libertinus">Libertinus</option> - <option value="LucidaBright">Lucida Bright</option> - <option value="Minion">Minion</option> - <option value="STIXTwo">STIX Two</option> - <option value="TeXGyreBonum">TeX Gyre Bonum</option> - <option value="TeXGyrePagella">TeX Gyre Pagella</option> - <option value="TeXGyreSchola">TeX Gyre Schola</option> - <option value="TeXGyreTermes">TeX Gyre Termes</option> - <option value="XITS">XITS</option> - </select> - <br/> -</p> -<table> - <tr> - <td></td> - <th scope="col">As rendered by TeX</th> - <th scope="col">As rendered by your browser</th></tr> - <tr> - <td>1</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4578/=ex1.png" width="38" height="22" - alt="TeXbook, 16.2-16.3" /></td> - <td> - <math display="block"> - <mrow> - <msup> - <mi>x</mi> - <mn>2</mn> - </msup> - <msup> - <mi>y</mi> - <mn>2</mn> - </msup> - </mrow> - </math> - </td></tr> - <tr> - <td>2</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4579/=ex2.png" width="30" height="17" alt="TeXbook, 16.2-16.3" /></td> - <td> - <math display="block"> - <!-- - <mrow> - <msub><mi></mi><mn>2</mn></msub> - <msub><mi>F</mi><mn>3</mn></msub> - </mrow> - --> - <mrow> - <mmultiscripts> - <mi>F</mi> - <mn>3</mn><none/> - <mprescripts/> - <mn>2</mn><none/> - </mmultiscripts> - </mrow> - </math> - </td></tr> - <tr> - <td>3</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4586/=ex21.png" width="58" height="47" alt="TeXbook, 17-17.1" /></td> - <td> - <math display="block"> - <mrow> - <mfrac> - <mrow> - <mi>x</mi> - <mo>+</mo> - <msup> - <mi>y</mi> - <mn>2</mn> - </msup> - </mrow> - <mrow> - <mi>k</mi> - <mo>+</mo> - <mn>1</mn> - </mrow> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>4</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4587/=ex22.png" width="76" height="25" alt="TeXbook, 17-17.1" /></td> - <td> - <math display="block"> - <mrow> - <mi>x</mi> - <mo>+</mo> - <msup> - <mi>y</mi> - <mfrac> - <mn>2</mn> - <mrow> - <mi>k</mi> - <mo>+</mo> - <mn>1</mn> - </mrow> - </mfrac> - </msup> - </mrow> - </math> - </td></tr> - <tr> - <td>5</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4588/=ex23.png" width="30" height="42" alt="TeXbook, 17-17.1" /></td> - <td> - <math display="block"> - <mrow> - <mfrac> - <mi>a</mi> - <mrow> - <mi>b</mi> - <mo>/</mo> - <mn>2</mn> - </mrow> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>6</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4589/=ex24.png" width="220" height="138" alt="TeXbook, 17.5-17.6" /></td> - <td> - <math display="block"> - <mrow> - <msub> - <mi>a</mi> - <mn>0</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>1</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>a</mi> - <mn>1</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>1</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>a</mi> - <mn>2</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>1</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>a</mi> - <mn>3</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>1</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>a</mi> - <mn>4</mn> - </msub> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>7</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4590/=ex25.png" width="200" height="85" alt="TeXbook, 17.5-17.6" /></td> - <td> - <math> - <mrow> - <msub> - <mi>a</mi> - <mn>0</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>1</mn> - <mrow> - <msub> - <mi>a</mi> - <mn>1</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>1</mn> - <mrow> - <msub> - <mi>a</mi> - <mn>2</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>1</mn> - <mrow> - <msub> - <mi>a</mi> - <mn>3</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>1</mn> - <mrow> - <msub> - <mi>a</mi> - <mn>4</mn> - </msub> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>8</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4591/=ex26.png" width="54" height="50" alt="TeXbook, 17.5-17.6" /></td> - <td> - <math display="block"> - <mrow> - <mo>(</mo> - <mfrac linethickness="0px"> - <mi>n</mi> - <mrow> - <mi>k</mi> - <mo>/</mo> - <mn>2</mn> - </mrow> - </mfrac> - <mo>)</mo> - </mrow> - </math> - </td></tr> - <tr> - <td>9</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4592/=ex27.png" width="237" height="50" alt="TeXbook, 17.7" /></td> - <td> - <math display="block"> - <mrow> - <mrow> - <mo>(</mo> - <mfrac linethickness="0px"> - <mi>p</mi> - <mn>2</mn> - </mfrac> - <mo>)</mo> - </mrow> - <msup> - <mi>x</mi> - <mn>2</mn> - </msup> - <msup> - <mi>y</mi> - <mrow> - <mi>p</mi> - <mo>-</mo> - <mn>2</mn> - </mrow> - </msup> - <mo>-</mo> - <mfrac> - <mn>1</mn> - <mrow> - <mn>1</mn> - <mo>-</mo> - <mi>x</mi> - </mrow> - </mfrac> - <mfrac> - <mn>1</mn> - <mrow> - <mn>1</mn> - <mo>-</mo> - <msup> - <mi>x</mi> - <mn>2</mn> - </msup> - </mrow> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>10</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4593/=ex29.png" width="116" height="63" alt="TeXbook, 17.7-17.8" /></td> - <td> - <math display="block"> - <mrow> - <munder> - <mo>&sum;</mo> - <mrow> - <mfrac linethickness="0px"> - <mrow> - <mn>0</mn> - <mo>&leq;</mo> - <mi>i</mi> - <mo>&leq;</mo> - <mi>m</mi> - </mrow> - <mrow> - <mn>0</mn> - <mo>&lt;</mo> - <mi>j</mi> - <mo>&lt;</mo> - <mi>n</mi> - </mrow> - </mfrac> - </mrow> - </munder> - <mi>P</mi> - <mo stretchy="false">(</mo> - <mi>i</mi> - <mo>,</mo> - <mi>j</mi> - <mo stretchy="false">)</mo> - </mrow> - </math> - </td></tr> - <tr> - <td>11</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4580/=ex3.png" width="27" height="18" alt="TeXbook, 16.2-16.3" /></td> - <td> - <math display="block"> - <mrow> - <msup> - <mi>x</mi> - <mrow> - <mn>2</mn> - <mi>y</mi> - </mrow> - </msup> - </mrow> - </math> - </td></tr> - <tr> - <td>12</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4594/=ex30.png" width="175" height="61" alt="TeXbook, 17.8" /></td> - <td> - <math display="block"> - <mrow> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>i</mi> - <mo>=</mo> - <mn>1</mn> - </mrow> - <mi>p</mi> - </munderover> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>j</mi> - <mo>=</mo> - <mn>1</mn> - </mrow> - <mi>q</mi> - </munderover> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>k</mi> - <mo>=</mo> - <mn>1</mn> - </mrow> - <mi>r</mi> - </munderover> - <msub> - <mi>a</mi> - <mrow> - <mi>i</mi> - <mi>j</mi> - </mrow> - </msub> - <msub> - <mi>b</mi> - <mrow> - <mi>j</mi> - <mi>k</mi> - </mrow> - </msub> - <msub> - <mi>c</mi> - <mrow> - <mi>k</mi> - <mi>i</mi> - </mrow> - </msub> - </mrow> - </math> - </td></tr> - <tr> - <td>13</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4595/=ex31.png" width="405" height="100" alt="TeXbook, 17.9-17.10" /></td> - <td> - <math display="block"> - <mrow> - <msqrt> - <mn>1</mn> - <mo>+</mo> - <msqrt> - <mn>1</mn> - <mo>+</mo> - <msqrt> - <mn>1</mn> - <mo>+</mo> - <msqrt> - <mn>1</mn> - <mo>+</mo> - <msqrt> - <mn>1</mn> - <mo>+</mo> - <msqrt> - <mn>1</mn> - <mo>+</mo> - <msqrt> - <mn>1</mn> - <mo>+</mo> - <mi>x</mi> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </mrow> - </math> - </td></tr> - <tr> - <td>14</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4596/=ex34.png" width="272" height="50" alt="TeXbook, 17.10" /></td> - <td> - <math display="block"> - <mrow> - <mrow> - <mo>(</mo> - <mfrac> - <msup> - <mo>&part;</mo> - <mn>2</mn> - </msup> - <mrow> - <mo>&part;</mo> - <msup> - <mi>x</mi> - <mn>2</mn> - </msup> - </mrow> - </mfrac> - <mo>+</mo> - <mfrac> - <msup> - <mo>&part;</mo> - <mn>2</mn> - </msup> - <mrow> - <mo>&part;</mo> - <msup> - <mi>y</mi> - <mn>2</mn> - </msup> - </mrow> - </mfrac> - <mo>)</mo> - </mrow> - <msup> - <mrow> - <mo minsize="150%">|</mo> - <mi>&#x3C6; <!-- \varphi --></mi> - <mo stretchy="false">(</mo> - <mi>x</mi> - <mo>+</mo> - <mi mathvariant="normal">i</mi> - <mi>y</mi> - <mo stretchy="false">)</mo> - <mo minsize="150%">|</mo> - </mrow> - <mn>2</mn> - </msup> - <mo>=</mo> - <mn>0</mn> - </mrow> - </math> - </td></tr> - <tr> - <td>15</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4581/=ex4.png" width="31" height="22" alt="TeXbook, 16.2-16.3" /></td> - <td> - <math display="block"> - <mrow> - <msup> - <mn>2</mn> - <msup> - <mn>2</mn> - <msup> - <mn>2</mn> - <mi>x</mi> - </msup> - </msup> - </msup> - </mrow> - </math> - </td></tr> - <tr> - <td>16</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4597/=ex40.png" width="55" height="49" alt="TeXbook, 18.10-18.11" /></td> - <td> - <math display="block"> - <mrow> - <msubsup> - <mo stretchy="false">&int;</mo> - <mn>1</mn> - <mi>x</mi> - </msubsup> - <mfrac> - <mrow><mi>d</mi><mi>t</mi></mrow> - <mi>t</mi> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>17</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4599/=ex41.png" width="91" height="47" alt="TeXbook, 18.12-18.13" /></td> - <td> - <math display="block"> - <mrow> - <msub> - <mo>&#x222C; <!-- \iint --></mo> - <mi>D</mi> - </msub> - <mi>d</mi><mi>x</mi> - <mspace width="thinmathspace"/> - <mi>d</mi><mi>y</mi> - </mrow> - </math> - </td> - </tr> - <tr> - <td>18</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4600/=ex43.png" width="250" height="66" alt="TeXbook, 18.23" /></td> - <td> - <math display="block"> - <mrow> - <mi>f</mi> - <mo stretchy="false">(</mo> - <mi>x</mi> - <mo stretchy="false">)</mo> - <mo>=</mo> - <mrow> - <mo>{</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mrow> - <mn>1</mn> - <mo>/</mo> - <mn>3</mn> - </mrow> - </mtd> - <mtd columnalign="left"> - <mrow> - <mtext>if&nbsp;</mtext> - <mn>0</mn> - <mo>&leq;</mo> - <mi>x</mi> - <mo>&leq;</mo> - <mn>1</mn> - <mo>;</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mrow> - <mn>2</mn> - <mo>/</mo> - <mn>3</mn> - </mrow> - </mtd> - <mtd columnalign="center"> - <mrow> - <mtext>if&nbsp;</mtext> - <mn>3</mn> - <mo>&leq;</mo> - <mi>x</mi> - <mo>&leq;</mo> - <mn>4</mn> - <mo>;</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mn>0</mn> - </mtd> - <mtd columnalign="left"> - <mtext>elsewhere.</mtext> - </mtd> - </mtr> - </mtable> - </mrow> - </mrow> - </math> - </td></tr> - <tr> - <td>19</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4601/=ex44.png" width="101" height="44" alt="TeXbook, 18.23-18.24" /></td> - <td> - <math display="block"> - <mover> - <mrow> - <mi>x</mi> - <mo>+</mo> - <mo>...</mo> - <mo>+</mo> - <mi>x</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow><mi>k</mi> <mspace width="thinmathspace"/> <mtext>times</mtext></mrow> - </mover> - </mover> - </math> - </td></tr> - <tr> - <td>20</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4582/=ex5.png" width="25" height="13" alt="TeXbook, 16.2-16.3" /></td> - <td> - <math display="block"> - <mrow> - <msub> - <mi>y</mi> - <msup> - <mi>x</mi> - <mn>2</mn> - </msup> - </msub> - </mrow> - </math> - </td></tr> - <tr> - <td>21</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4602/=ex51.png" width="253" height="56" alt="TeXbook, 18.40" /></td> - <td> - <math display="block"> - <mrow> - <munder> - <mo>&sum;</mo> - <mrow> - <mi>p</mi> - <mtext>&nbsp;prime</mtext> - </mrow> - </munder> - <mi>f</mi> - <mo stretchy="false">(</mo> - <mi>p</mi> - <mo stretchy="false">)</mo> - <mo>=</mo> - <msub> - <mo stretchy="false">&int;</mo> - <mrow> - <mi>t</mi> - <mo>&gt;</mo> - <mn>1</mn> - </mrow> - </msub> - <mi>f</mi> - <mo stretchy="false">(</mo> - <mi>t</mi> - <mo stretchy="false">)</mo> - <mspace width="thinmathspace"/> - <mi>d</mi> - <mi>&pi;</mi> - <mo stretchy="false">(</mo> - <mi>t</mi> - <mo stretchy="false">)</mo> - </mrow> - </math> - </td></tr> - <tr> - <td>22</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4603/=ex52.png" width="159" height="81" alt="TeXbook, 18.41" /></td> - <td> - <math display="block"> - <mrow> - <mo stretchy="false">{</mo> - <munder> - <mrow> - <mover> - <mrow> - <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded> - <mi>a</mi> - <mo>,</mo> - <mo>...</mo> - <mo>,</mo> - <mi>a</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow> - <mi>k</mi> - <mtext>&nbsp;</mtext> - <mi>a</mi> - <mtext>'s</mtext> - </mrow> - </mover> - </mover> - <mo>,</mo> - <mover> - <mrow> - <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded> - <mi>b</mi> - <mo>,</mo> - <mo>...</mo> - <mo>,</mo> - <mi>b</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow> - <mi>&ell;</mi> - <mtext>&nbsp;</mtext> - <mi>b</mi> - <mtext>'s</mtext> - </mrow> - </mover> - </mover> - </mrow> - <munder> - <mo>&UnderBrace;</mo> - <mrow> - <mi>k</mi> - <mo>+</mo> - <mi>&ell;</mi> - <mtext>&nbsp;elements</mtext> - </mrow> - </munder> - </munder> - <mo stretchy="false">}</mo> - </mrow> - </math> - </td> - </tr> - <tr> - <td>23</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4604/=ex53.png" width="213" height="108" alt="TeXbook, 18.42" /></td> - <td> - <math display="block"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>a</mi> - </mtd> - <mtd columnalign="center"> - <mi>b</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>c</mi> - </mtd> - <mtd columnalign="center"> - <mi>d</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>e</mi> - </mtd> - <mtd columnalign="center"> - <mi>f</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>g</mi> - </mtd> - <mtd columnalign="center"> - <mi>h</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mn>0</mn> - </mtd> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>i</mi> - </mtd> - <mtd columnalign="center"> - <mi>j</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>k</mi> - </mtd> - <mtd columnalign="center"> - <mi>l</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </math> - </td></tr> - <tr> - <td>24</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4605/=ex54.png" width="344" height="130" alt="TeXbook, 18.43" /></td> - <td> - <math display="block"> - <mrow> - <mi>det</mi> - <mo>|</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>0</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>1</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>2</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mi>n</mi> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>1</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>2</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>3</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mi>n</mi> - <mo>+</mo> - <mn>1</mn> - </mrow> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>2</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>3</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>4</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mi>n</mi> - <mo>+</mo> - <mn>2</mn> - </mrow> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mi>n</mi> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mi>n</mi> - <mo>+</mo> - <mn>1</mn> - </mrow> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mi>n</mi> - <mo>+</mo> - <mn>2</mn> - </mrow> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mn>2</mn> - <mi>n</mi> - </mrow> - </msub> - </mtd> - </mtr> - </mtable> - <mo>|</mo> - <mo>&gt;</mo> - <mn>0</mn> - </mrow> - </math> - </td></tr> - <tr> - <td>25</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4598/=ex6.png" width="25" height="14" alt="TeXbook, 16.2-16.3" /></td> - <td> - <math display="block"> - <msub> - <mi>y</mi> - <msub> - <mi>x</mi> - <mn>2</mn> - </msub> - </msub> - </math> - </td></tr> - <tr> - <td>26</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4583/=ex7.png" width="90" height="23" alt="TeXbook, 16.4-16.5" /></td> - <td> - <math display="block"> - <mrow> - <msubsup> - <mi>x</mi> - <mn>92</mn> - <mn>31415</mn> - </msubsup> - <mo>+</mo> - <mi>&pi;</mi> - </mrow> - </math> - </td></tr> - <tr> - <td>27</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4584/=ex8.png" width="27" height="36" alt="TeXbook, 16.4-16.5" /></td> - <td> - <math display="block"> - <msubsup> - <mi>x</mi> - <msubsup> - <mi>y</mi> - <mi>b</mi> - <mi>a</mi> - </msubsup> - <msubsup> - <mi>z</mi> - <mi>c</mi> - <mi>d</mi> - </msubsup> - </msubsup> - </math> - </td></tr> - <tr> - <td>28</td> - <td><img src="https://developer.mozilla.org/@api/deki/files/4585/=ex9.png" width="24" height="22" alt="TeXbook, 16.4-16.5" /></td> - <td> - <math display="block"> - <msubsup> - <mi>y</mi> - <mn>3</mn> - <mo>&#x2034;</mo> - </msubsup> - </math> - </td></tr> - <tr> - <td>29</td> - <td><img src="https://mdn.mozillademos.org/files/13402/stirling29.png" width="194" height="58" alt="Stirling's approximation" /></td> - <td><math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><munder><mo lspace="0em" rspace="0em">lim</mo><mrow><mi>n</mi><mo stretchy="false">→</mo><mo>+</mo><mn>∞</mn></mrow></munder><mfrac><msqrt><mrow><mn>2</mn><mi>π</mi><mi>n</mi></mrow></msqrt><mrow><mi>n</mi><mo>!</mo></mrow></mfrac><msup><mrow><mo>(</mo><mfrac><mi>n</mi><mi>e</mi></mfrac><mo>)</mo></mrow><mi>n</mi></msup></mrow><mo>=</mo><mn>1</mn></math></td> - </tr> - <tr> - <td>30</td> - <td><img src="https://mdn.mozillademos.org/files/13438/determinant30.png" width="194" height="58" alt="Leibniz formula for the determinant" /></td> - <td><math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><mo lspace="0em" rspace="0em">det</mo><mo stretchy="false">(</mo><mi>A</mi><mo stretchy="false">)</mo></mrow><mo>=</mo><munder><mo>∑</mo><mrow><mi>σ</mi><mo>∊</mo><msub><mi>S</mi><mi>n</mi></msub></mrow></munder><mrow><mi>ϵ</mi><mo stretchy="false">(</mo><mi>σ</mi><mo stretchy="false">)</mo></mrow><mrow><munderover><mo>∏</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>a</mi><mrow><mi>i</mi><mo>,</mo><msub><mi>σ</mi><mi>i</mi></msub></mrow></msub></mrow></mrow></math></td> - </tr> -</table> -<br><br> -<table dir="rtl"> - <tr> - <td></td> - <th scope="col">Maghreb Style</th> - <th scope="col">Machrek Style</th> - <th scope="col">Persian Style</th></tr> - <tr> - <td>1</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - <msup> - <mi>&#x1EE11;</mi> - <mn>٢</mn> - </msup> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - <msup> - <mi>&#x1EE11;</mi> - <mn>٢</mn> - </msup> - </mrow> - </math> - </td> - <td> - <math display="block"> - <mrow> - <msup> - <mi>x</mi> - <mn>۲</mn> - </msup> - <msup> - <mi>y</mi> - <mn>۲</mn> - </msup> - </mrow> - </math> - </td></tr> - <tr> - <td>2</td> - <td> - <math dir="rtl" display="block"> - <!-- - <mrow> - <msub><mi></mi><mn>٢</mn></msub> - <msub><mi>F</mi><mn>٣</mn></msub> - </mrow> - --> - <mrow> - <mmultiscripts> - <mi>F</mi> - <mn>٣</mn><none/> - <mprescripts/> - <mn>٢</mn><none/> - </mmultiscripts> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <!-- - <mrow> - <msub><mi></mi><mn>٢</mn></msub> - <msub><mi>F</mi><mn>٣</mn></msub> - </mrow> - --> - <mrow> - <mmultiscripts> - <mi>F</mi> - <mn>٣</mn><none/> - <mprescripts/> - <mn>٢</mn><none/> - </mmultiscripts> - </mrow> - </math> - </td> - <td> - <math display="block"> - <!-- - <mrow> - <msub><mi></mi><mn>۲</mn></msub> - <msub><mi>F</mi><mn>۳</mn></msub> - </mrow> - --> - <mrow> - <mmultiscripts> - <mi>F</mi> - <mn>۳</mn><none/> - <mprescripts/> - <mn>۲</mn><none/> - </mmultiscripts> - </mrow> - </math> - </td> - </tr> - <tr> - <td>3</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mfrac> - <mrow> - <mi>&#x1EE0E;</mi> - <mo>+</mo> - <msup> - <mi>&#x1EE11;</mi> - <mn>٢</mn> - </msup> - </mrow> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>+</mo> - <mn>١</mn> - </mrow> - </mfrac> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mfrac> - <mrow> - <mi>&#x1EE0E;</mi> - <mo>+</mo> - <msup> - <mi>&#x1EE11;</mi> - <mn>٢</mn> - </msup> - </mrow> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>+</mo> - <mn>١</mn> - </mrow> - </mfrac> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <mfrac> - <mrow> - <mi>x</mi> - <mo>+</mo> - <msup> - <mi>y</mi> - <mn>۲</mn> - </msup> - </mrow> - <mrow> - <mi>k</mi> - <mo>+</mo> - <mn>۱</mn> - </mrow> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>4</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mi>&#x1EE0E;</mi> - <mo>+</mo> - <msup> - <mi>&#x1EE11;</mi> - <mfrac> - <mn>٢</mn> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>+</mo> - <mn>١</mn> - </mrow> - </mfrac> - </msup> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mi>&#x1EE0E;</mi> - <mo>+</mo> - <msup> - <mi>&#x1EE11;</mi> - <mfrac> - <mn>٢</mn> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>+</mo> - <mn>١</mn> - </mrow> - </mfrac> - </msup> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <mi>x</mi> - <mo>+</mo> - <msup> - <mi>y</mi> - <mfrac> - <mn>۲</mn> - <mrow> - <mi>k</mi> - <mo>+</mo> - <mn>۱</mn> - </mrow> - </mfrac> - </msup> - </mrow> - </math> - </td></tr> - <tr> - <td>5</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mfrac> - <mi>&#x1EE00;</mi> - <mrow> - <mi>&#x1EE1C;</mi> - <mo>/</mo> - <mn>٢</mn> - </mrow> - </mfrac> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mfrac> - <mi>&#x1EE00;</mi> - <mrow> - <mi>&#x1EE1C;</mi> - <mo>/</mo> - <mn>٢</mn> - </mrow> - </mfrac> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <mfrac> - <mi>a</mi> - <mrow> - <mi>b</mi> - <mo>/</mo> - <mn>۲</mn> - </mrow> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>6</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٠</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>&#x1EE00;</mi> - <mn>١</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>&#x1EE00;</mi> - <mn>٢</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>&#x1EE00;</mi> - <mn>٣</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>&#x1EE00;</mi> - <mn>٤</mn> - </msub> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٠</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>&#x1EE00;</mi> - <mn>١</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>&#x1EE00;</mi> - <mn>٢</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>&#x1EE00;</mi> - <mn>٣</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>&#x1EE00;</mi> - <mn>٤</mn> - </msub> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <msub> - <mi>a</mi> - <mn>۰</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>۱</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>a</mi> - <mn>۱</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>۱</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>a</mi> - <mn>۲</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>۱</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>a</mi> - <mn>۳</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>۱</mn> - <mstyle displaystyle="true" scriptlevel="0"> - <msub> - <mi>a</mi> - <mn>۴</mn> - </msub> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mstyle> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>7</td> - <td> - <math dir="rtl"> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٠</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>١</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٢</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٣</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٤</mn> - </msub> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </math> - </td> - <td> - <math dir="rtl"> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٠</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>١</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٢</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٣</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>١</mn> - <mrow> - <msub> - <mi>&#x1EE00;</mi> - <mn>٤</mn> - </msub> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </math> - </td><td> - <math> - <mrow> - <msub> - <mi>a</mi> - <mn>۰</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>۱</mn> - <mrow> - <msub> - <mi>a</mi> - <mn>۱</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>۱</mn> - <mrow> - <msub> - <mi>a</mi> - <mn>۲</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>۱</mn> - <mrow> - <msub> - <mi>a</mi> - <mn>۳</mn> - </msub> - <mo>+</mo> - <mfrac> - <mn>۱</mn> - <mrow> - <msub> - <mi>a</mi> - <mn>۴</mn> - </msub> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>8</td> - <td> - <math dir="rtl" display="block"> - <mmultiscripts> - <mo>ل</mo> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>/</mo> - <mn>٢</mn> - </mrow> - <none/> - <mprescripts/> - <none/> - <mi>&#x1EE1D;</mi> - </mmultiscripts> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mmultiscripts> - <mo>ل</mo> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>/</mo> - <mn>٢</mn> - </mrow> - <none/> - <mprescripts/> - <none/> - <mi>&#x1EE1D;</mi> - </mmultiscripts> - </math> - </td><td> - <math display="block"> - <mrow> - <mo>(</mo> - <mfrac linethickness="0px"> - <mi>n</mi> - <mrow> - <mi>k</mi> - <mo>/</mo> - <mn>۲</mn> - </mrow> - </mfrac> - <mo>)</mo> - </mrow> - </math> - </td></tr> - <tr> - <td>9</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mrow> - <mo>(</mo> - <mfrac linethickness="0px"> - <mi>p</mi> - <mn>٢</mn> - </mfrac> - <mo>)</mo> - </mrow> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - <msup> - <mi>&#x1EE11;</mi> - <mrow> - <mi>p</mi> - <mo>-</mo> - <mn>٢</mn> - </mrow> - </msup> - <mo>-</mo> - <mfrac> - <mn>١</mn> - <mrow> - <mn>١</mn> - <mo>-</mo> - <mi>&#x1EE0E;</mi> - </mrow> - </mfrac> - <mfrac> - <mn>١</mn> - <mrow> - <mn>١</mn> - <mo>-</mo> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - </mrow> - </mfrac> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mrow> - <mo>(</mo> - <mfrac linethickness="0px"> - <mi>p</mi> - <mn>٢</mn> - </mfrac> - <mo>)</mo> - </mrow> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - <msup> - <mi>&#x1EE11;</mi> - <mrow> - <mi>p</mi> - <mo>-</mo> - <mn>٢</mn> - </mrow> - </msup> - <mo>-</mo> - <mfrac> - <mn>١</mn> - <mrow> - <mn>١</mn> - <mo>-</mo> - <mi>&#x1EE0E;</mi> - </mrow> - </mfrac> - <mfrac> - <mn>١</mn> - <mrow> - <mn>١</mn> - <mo>-</mo> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - </mrow> - </mfrac> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <mrow> - <mo>(</mo> - <mfrac linethickness="0px"> - <mi>p</mi> - <mn>۲</mn> - </mfrac> - <mo>)</mo> - </mrow> - <msup> - <mi>x</mi> - <mn>۲</mn> - </msup> - <msup> - <mi>y</mi> - <mrow> - <mi>p</mi> - <mo>-</mo> - <mn>۲</mn> - </mrow> - </msup> - <mo>-</mo> - <mfrac> - <mn>۱</mn> - <mrow> - <mn>۱</mn> - <mo>-</mo> - <mi>x</mi> - </mrow> - </mfrac> - <mfrac> - <mn>۱</mn> - <mrow> - <mn>۱</mn> - <mo>-</mo> - <msup> - <mi>x</mi> - <mn>۲</mn> - </msup> - </mrow> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>10</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <munder> - <mo>&sum;</mo> - <mrow> - <mfrac linethickness="0px"> - <mrow> - <mn>٠</mn> - <mo>&leq;</mo> - <mi>i</mi> - <mo>&leq;</mo> - <mi>m</mi> - </mrow> - <mrow> - <mn>٠</mn> - <mo>&lt;</mo> - <mi>j</mi> - <mo>&lt;</mo> - <mi>&#x1EE1D;</mi> - </mrow> - </mfrac> - </mrow> - </munder> - <mi>P</mi> - <mo stretchy="false">(</mo> - <mi>i</mi> - <mo>,</mo> - <mi>j</mi> - <mo stretchy="false">)</mo> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <munder> - <mo>&#x1EEF0;</mo> - <mrow> - <mfrac linethickness="0px"> - <mrow> - <mn>٠</mn> - <mo>&leq;</mo> - <mi>i</mi> - <mo>&leq;</mo> - <mi>m</mi> - </mrow> - <mrow> - <mn>٠</mn> - <mo>&lt;</mo> - <mi>j</mi> - <mo>&lt;</mo> - <mi>&#x1EE1D;</mi> - </mrow> - </mfrac> - </mrow> - </munder> - <mi>P</mi> - <mo stretchy="false">(</mo> - <mi>i</mi> - <mo>,</mo> - <mi>j</mi> - <mo stretchy="false">)</mo> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <munder> - <mo>&sum;</mo> - <mrow> - <mfrac linethickness="0px"> - <mrow> - <mn>۰</mn> - <mo>&leq;</mo> - <mi>i</mi> - <mo>&leq;</mo> - <mi>m</mi> - </mrow> - <mrow> - <mn>۰</mn> - <mo>&lt;</mo> - <mi>j</mi> - <mo>&lt;</mo> - <mi>n</mi> - </mrow> - </mfrac> - </mrow> - </munder> - <mi>P</mi> - <mo stretchy="false">(</mo> - <mi>i</mi> - <mo>,</mo> - <mi>j</mi> - <mo stretchy="false">)</mo> - </mrow> - </math> - </td></tr> - <tr> - <td>11</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msup> - <mi>&#x1EE0E;</mi> - <mrow> - <mn>٢</mn> - <mi>&#x1EE11;</mi> - </mrow> - </msup> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msup> - <mi>&#x1EE0E;</mi> - <mrow> - <mn>٢</mn> - <mi>&#x1EE11;</mi> - </mrow> - </msup> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <msup> - <mi>x</mi> - <mrow> - <mn>۲</mn> - <mi>y</mi> - </mrow> - </msup> - </mrow> - </math> - </td></tr> - <tr> - <td>12</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>i</mi> - <mo>=</mo> - <mn>١</mn> - </mrow> - <mi>p</mi> - </munderover> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>j</mi> - <mo>=</mo> - <mn>١</mn> - </mrow> - <mi>q</mi> - </munderover> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>=</mo> - <mn>١</mn> - </mrow> - <mi>r</mi> - </munderover> - <msub> - <mi>&#x1EE00;</mi> - <mrow> - <mi>i</mi> - <mi>j</mi> - </mrow> - </msub> - <msub> - <mi>&#x1EE1C;</mi> - <mrow> - <mi>j</mi> - <mi>&#x1EE1F;</mi> - </mrow> - </msub> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1F;</mi> - <mi>i</mi> - </mrow> - </msub> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <munderover> - <mo>&#x1EEF0;</mo> - <mrow> - <mi>i</mi> - <mo>=</mo> - <mn>١</mn> - </mrow> - <mi>p</mi> - </munderover> - <munderover> - <mo>&#x1EEF0;</mo> - <mrow> - <mi>j</mi> - <mo>=</mo> - <mn>١</mn> - </mrow> - <mi>q</mi> - </munderover> - <munderover> - <mo>&#x1EEF0;</mo> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>=</mo> - <mn>١</mn> - </mrow> - <mi>r</mi> - </munderover> - <msub> - <mi>&#x1EE00;</mi> - <mrow> - <mi>i</mi> - <mi>j</mi> - </mrow> - </msub> - <msub> - <mi>&#x1EE1C;</mi> - <mrow> - <mi>j</mi> - <mi>&#x1EE1F;</mi> - </mrow> - </msub> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1F;</mi> - <mi>i</mi> - </mrow> - </msub> - </mrow> - </math> - </td> - <td> - <math display="block"> - <mrow> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>i</mi> - <mo>=</mo> - <mn>۱</mn> - </mrow> - <mi>p</mi> - </munderover> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>j</mi> - <mo>=</mo> - <mn>۱</mn> - </mrow> - <mi>q</mi> - </munderover> - <munderover> - <mo>&sum;</mo> - <mrow> - <mi>k</mi> - <mo>=</mo> - <mn>۱</mn> - </mrow> - <mi>r</mi> - </munderover> - <msub> - <mi>a</mi> - <mrow> - <mi>i</mi> - <mi>j</mi> - </mrow> - </msub> - <msub> - <mi>b</mi> - <mrow> - <mi>j</mi> - <mi>k</mi> - </mrow> - </msub> - <msub> - <mi>c</mi> - <mrow> - <mi>k</mi> - <mi>i</mi> - </mrow> - </msub> - </mrow> - </math> - </td> - </tr> - <tr> - <td>13</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <mi>&#x1EE0E;</mi> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <msqrt> - <mn>١</mn> - <mo>+</mo> - <mi>&#x1EE0E;</mi> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <msqrt> - <mn>۱</mn> - <mo>+</mo> - <msqrt> - <mn>۱</mn> - <mo>+</mo> - <msqrt> - <mn>۱</mn> - <mo>+</mo> - <msqrt> - <mn>۱</mn> - <mo>+</mo> - <msqrt> - <mn>۱</mn> - <mo>+</mo> - <msqrt> - <mn>۱</mn> - <mo>+</mo> - <msqrt> - <mn>۱</mn> - <mo>+</mo> - <mi>x</mi> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </msqrt> - </mrow> - </math> - </td> - </tr> - <tr> - <td>14</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mrow> - <mo>(</mo> - <mfrac> - <msup> - <mo>&part;</mo> - <mn>٢</mn> - </msup> - <mrow> - <mo>&part;</mo> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - </mrow> - </mfrac> - <mo>+</mo> - <mfrac> - <msup> - <mo>&part;</mo> - <mn>٢</mn> - </msup> - <mrow> - <mo>&part;</mo> - <msup> - <mi>&#x1EE11;</mi> - <mn>٢</mn> - </msup> - </mrow> - </mfrac> - <mo>)</mo> - </mrow> - <msup> - <mrow> - <mo minsize="150%">|</mo> - <mi>&#x3C6; <!-- \varphi --></mi> - <mo stretchy="false">(</mo> - <mi>&#x1EE0E;</mi> - <mo>+</mo> - <mi mathvariant="normal">i</mi> - <mi>&#x1EE11;</mi> - <mo stretchy="false">)</mo> - <mo minsize="150%">|</mo> - </mrow> - <mn>٢</mn> - </msup> - <mo>=</mo> - <mn>٠</mn> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mrow> - <mo>(</mo> - <mfrac> - <msup> - <mo>&part;</mo> - <mn>٢</mn> - </msup> - <mrow> - <mo>&part;</mo> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - </mrow> - </mfrac> - <mo>+</mo> - <mfrac> - <msup> - <mo>&part;</mo> - <mn>٢</mn> - </msup> - <mrow> - <mo>&part;</mo> - <msup> - <mi>&#x1EE11;</mi> - <mn>٢</mn> - </msup> - </mrow> - </mfrac> - <mo>)</mo> - </mrow> - <msup> - <mrow> - <mo minsize="150%">|</mo> - <mi>&#x3C6; <!-- \varphi --></mi> - <mo stretchy="false">(</mo> - <mi>&#x1EE0E;</mi> - <mo>+</mo> - <mi mathvariant="normal">i</mi> - <mi>&#x1EE11;</mi> - <mo stretchy="false">)</mo> - <mo minsize="150%">|</mo> - </mrow> - <mn>٢</mn> - </msup> - <mo>=</mo> - <mn>٠</mn> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <mrow> - <mo>(</mo> - <mfrac> - <msup> - <mo>&part;</mo> - <mn>۲</mn> - </msup> - <mrow> - <mo>&part;</mo> - <msup> - <mi>x</mi> - <mn>۲</mn> - </msup> - </mrow> - </mfrac> - <mo>+</mo> - <mfrac> - <msup> - <mo>&part;</mo> - <mn>۲</mn> - </msup> - <mrow> - <mo>&part;</mo> - <msup> - <mi>y</mi> - <mn>۲</mn> - </msup> - </mrow> - </mfrac> - <mo>)</mo> - </mrow> - <msup> - <mrow> - <mo minsize="150%">|</mo> - <mi>&#x3C6; <!-- \varphi --></mi> - <mo stretchy="false">(</mo> - <mi>x</mi> - <mo>+</mo> - <mi mathvariant="normal">i</mi> - <mi>y</mi> - <mo stretchy="false">)</mo> - <mo minsize="150%">|</mo> - </mrow> - <mn>۲</mn> - </msup> - <mo>=</mo> - <mn>۰</mn> - </mrow> - </math> - </td></tr> - <tr> - <td>15</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msup> - <mn>٢</mn> - <msup> - <mn>٢</mn> - <msup> - <mn>٢</mn> - <mi>&#x1EE0E;</mi> - </msup> - </msup> - </msup> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msup> - <mn>٢</mn> - <msup> - <mn>٢</mn> - <msup> - <mn>٢</mn> - <mi>&#x1EE0E;</mi> - </msup> - </msup> - </msup> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <msup> - <mn>۲</mn> - <msup> - <mn>۲</mn> - <msup> - <mn>۲</mn> - <mi>x</mi> - </msup> - </msup> - </msup> - </mrow> - </math> - </td></tr> - <tr> - <td>16</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msubsup> - <mo stretchy="false">&int;</mo> - <mn>١</mn> - <mi>&#x1EE0E;</mi> - </msubsup> - <mfrac> - <mrow><mi>د</mi><mi>t</mi></mrow> - <mi>t</mi> - </mfrac> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msubsup> - <mo stretchy="false">&int;</mo> - <mn>١</mn> - <mi>&#x1EE0E;</mi> - </msubsup> - <mfrac> - <mrow><mi>د</mi><mi>t</mi></mrow> - <mi>t</mi> - </mfrac> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <msubsup> - <mo stretchy="false">&int;</mo> - <mn>۱</mn> - <mi>x</mi> - </msubsup> - <mfrac> - <mrow><mi>d</mi><mi>t</mi></mrow> - <mi>t</mi> - </mfrac> - </mrow> - </math> - </td></tr> - <tr> - <td>17</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msub> - <mo>&#x222C; <!-- \iint --></mo> - <mi>د</mi> - </msub> - <mi>د</mi><mi>&#x1EE0E;</mi> - <mspace width="thinmathspace"/> - <mi>د</mi><mi>&#x1EE11;</mi> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msub> - <mo>&#x222C; <!-- \iint --></mo> - <mi>د</mi> - </msub> - <mi>د</mi><mi>&#x1EE0E;</mi> - <mspace width="thinmathspace"/> - <mi>د</mi><mi>&#x1EE11;</mi> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <msub> - <mo>&#x222C; <!-- \iint --></mo> - <mi>D</mi> - </msub> - <mi>d</mi><mi>x</mi> - <mspace width="thinmathspace"/> - <mi>d</mi><mi>y</mi> - </mrow> - </math> - </td></tr> - <tr> - <td>18</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mi>&#x1EE03;</mi> - <mo stretchy="false">(</mo> - <mi>&#x1EE0E;</mi> - <mo stretchy="false">)</mo> - <mo>=</mo> - <mrow> - <mo>{</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mrow> - <mn>١</mn> - <mo>/</mo> - <mn>٣</mn> - </mrow> - </mtd> - <mtd columnalign="left"> - <mrow> - <mtext>if&nbsp;</mtext> - <mn>٠</mn> - <mo>&leq;</mo> - <mi>&#x1EE0E;</mi> - <mo>&leq;</mo> - <mn>١</mn> - <mo>;</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mrow> - <mn>٢</mn> - <mo>/</mo> - <mn>٣</mn> - </mrow> - </mtd> - <mtd columnalign="center"> - <mrow> - <mtext>if&nbsp;</mtext> - <mn>٣</mn> - <mo>&leq;</mo> - <mi>&#x1EE0E;</mi> - <mo>&leq;</mo> - <mn>٤</mn> - <mo>;</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mn>٠</mn> - </mtd> - <mtd columnalign="left"> - <mtext>elsewhere.</mtext> - </mtd> - </mtr> - </mtable> - </mrow> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mi>&#x1EE03;</mi> - <mo stretchy="false">(</mo> - <mi>&#x1EE0E;</mi> - <mo stretchy="false">)</mo> - <mo>=</mo> - <mrow> - <mo>{</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mrow> - <mn>١</mn> - <mo>/</mo> - <mn>٣</mn> - </mrow> - </mtd> - <mtd columnalign="left"> - <mrow> - <mtext>if&nbsp;</mtext> - <mn>٠</mn> - <mo>&leq;</mo> - <mi>&#x1EE0E;</mi> - <mo>&leq;</mo> - <mn>١</mn> - <mo>;</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mrow> - <mn>٢</mn> - <mo>/</mo> - <mn>٣</mn> - </mrow> - </mtd> - <mtd columnalign="center"> - <mrow> - <mtext>if&nbsp;</mtext> - <mn>٣</mn> - <mo>&leq;</mo> - <mi>&#x1EE0E;</mi> - <mo>&leq;</mo> - <mn>٤</mn> - <mo>;</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mn>٠</mn> - </mtd> - <mtd columnalign="left"> - <mtext>elsewhere.</mtext> - </mtd> - </mtr> - </mtable> - </mrow> - </mrow> - </math> - </td> - <td> - <math display="block"> - <mrow> - <mi>f</mi> - <mo stretchy="false">(</mo> - <mi>x</mi> - <mo stretchy="false">)</mo> - <mo>=</mo> - <mrow> - <mo>{</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mrow> - <mn>۱</mn> - <mo>/</mo> - <mn>۳</mn> - </mrow> - </mtd> - <mtd columnalign="left"> - <mrow> - <mtext>if&nbsp;</mtext> - <mn>۰</mn> - <mo>&leq;</mo> - <mi>x</mi> - <mo>&leq;</mo> - <mn>۱</mn> - <mo>;</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mrow> - <mn>۲</mn> - <mo>/</mo> - <mn>۳</mn> - </mrow> - </mtd> - <mtd columnalign="center"> - <mrow> - <mtext>if&nbsp;</mtext> - <mn>۳</mn> - <mo>&leq;</mo> - <mi>x</mi> - <mo>&leq;</mo> - <mn>۴</mn> - <mo>;</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mn>۰</mn> - </mtd> - <mtd columnalign="left"> - <mtext>elsewhere.</mtext> - </mtd> - </mtr> - </mtable> - </mrow> - </mrow> - </math> - </td> - </tr> - <tr> - <td>19</td> - <td> - <math dir="rtl" display="block"> - <mover> - <mrow> - <mi>&#x1EE0E;</mi> - <mo>+</mo> - <mo>...</mo> - <mo>+</mo> - <mi>&#x1EE0E;</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow><mi>&#x1EE1F;</mi> <mspace width="thinmathspace"/> <mtext>times</mtext></mrow> - </mover> - </mover> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mover> - <mrow> - <mi>&#x1EE0E;</mi> - <mo>+</mo> - <mo>...</mo> - <mo>+</mo> - <mi>&#x1EE0E;</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow><mi>&#x1EE1F;</mi> <mspace width="thinmathspace"/> <mtext>times</mtext></mrow> - </mover> - </mover> - </math> - </td><td> - <math display="block"> - <mover> - <mrow> - <mi>x</mi> - <mo>+</mo> - <mo>...</mo> - <mo>+</mo> - <mi>x</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow><mi>k</mi> <mspace width="thinmathspace"/> <mtext>times</mtext></mrow> - </mover> - </mover> - </math> - </td></tr> - <tr> - <td>20</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msub> - <mi>&#x1EE11;</mi> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - </msub> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msub> - <mi>&#x1EE11;</mi> - <msup> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msup> - </msub> - </mrow> - </math> - </td><td> - <math display="block"> - <mrow> - <msub> - <mi>y</mi> - <msup> - <mi>x</mi> - <mn>۲</mn> - </msup> - </msub> - </mrow> - </math> - </td></tr> - <tr> - <td>21</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <munder> - <mo>&sum;</mo> - <mrow> - <mi>p</mi> - <mtext>&nbsp;prime</mtext> - </mrow> - </munder> - <mi>&#x1EE03;</mi> - <mo stretchy="false">(</mo> - <mi>p</mi> - <mo stretchy="false">)</mo> - <mo>=</mo> - <msub> - <mo stretchy="false">&int;</mo> - <mrow> - <mi>t</mi> - <mo>&gt;</mo> - <mn>١</mn> - </mrow> - </msub> - <mi>&#x1EE03;</mi> - <mo stretchy="false">(</mo> - <mi>t</mi> - <mo stretchy="false">)</mo> - <mspace width="thinmathspace"/> - <mi>د</mi> - <mi>&pi;</mi> - <mo stretchy="false">(</mo> - <mi>t</mi> - <mo stretchy="false">)</mo> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <munder> - <mo>&#x1EEF0;</mo> - <mrow> - <mi>p</mi> - <mtext>&nbsp;prime</mtext> - </mrow> - </munder> - <mi>&#x1EE03;</mi> - <mo stretchy="false">(</mo> - <mi>p</mi> - <mo stretchy="false">)</mo> - <mo>=</mo> - <msub> - <mo stretchy="false">&int;</mo> - <mrow> - <mi>t</mi> - <mo>&gt;</mo> - <mn>١</mn> - </mrow> - </msub> - <mi>&#x1EE03;</mi> - <mo stretchy="false">(</mo> - <mi>t</mi> - <mo stretchy="false">)</mo> - <mspace width="thinmathspace"/> - <mi>د</mi> - <mi>&pi;</mi> - <mo stretchy="false">(</mo> - <mi>t</mi> - <mo stretchy="false">)</mo> - </mrow> - </math> - </td> - <td> - <math display="block"> - <mrow> - <munder> - <mo>&sum;</mo> - <mrow> - <mi>p</mi> - <mtext>&nbsp;prime</mtext> - </mrow> - </munder> - <mi>f</mi> - <mo stretchy="false">(</mo> - <mi>p</mi> - <mo stretchy="false">)</mo> - <mo>=</mo> - <msub> - <mo stretchy="false">&int;</mo> - <mrow> - <mi>t</mi> - <mo>&gt;</mo> - <mn>۱</mn> - </mrow> - </msub> - <mi>f</mi> - <mo stretchy="false">(</mo> - <mi>t</mi> - <mo stretchy="false">)</mo> - <mspace width="thinmathspace"/> - <mi>d</mi> - <mi>&pi;</mi> - <mo stretchy="false">(</mo> - <mi>t</mi> - <mo stretchy="false">)</mo> - </mrow> - </math> - </td></tr> - <tr> - <td>22</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mo stretchy="false">{</mo> - <munder> - <mrow> - <mover> - <mrow> - <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded> - <mi>&#x1EE00;</mi> - <mo>,</mo> - <mo>...</mo> - <mo>,</mo> - <mi>&#x1EE00;</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow> - <mi>&#x1EE1F;</mi> - <mtext>&nbsp;</mtext> - <mi>&#x1EE00;</mi> - <mtext>'s</mtext> - </mrow> - </mover> - </mover> - <mo>,</mo> - <mover> - <mrow> - <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded> - <mi>&#x1EE1C;</mi> - <mo>,</mo> - <mo>...</mo> - <mo>,</mo> - <mi>&#x1EE1C;</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow> - <mi>&ell;</mi> - <mtext>&nbsp;</mtext> - <mi>&#x1EE1C;</mi> - <mtext>'s</mtext> - </mrow> - </mover> - </mover> - </mrow> - <munder> - <mo>&UnderBrace;</mo> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>+</mo> - <mi>&ell;</mi> - <mtext>&nbsp;elements</mtext> - </mrow> - </munder> - </munder> - <mo stretchy="false">}</mo> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mo stretchy="false">{</mo> - <munder> - <mrow> - <mover> - <mrow> - <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded> - <mi>&#x1EE00;</mi> - <mo>,</mo> - <mo>...</mo> - <mo>,</mo> - <mi>&#x1EE00;</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow> - <mi>&#x1EE1F;</mi> - <mtext>&nbsp;</mtext> - <mi>&#x1EE00;</mi> - <mtext>'s</mtext> - </mrow> - </mover> - </mover> - <mo>,</mo> - <mover> - <mrow> - <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded> - <mi>&#x1EE1C;</mi> - <mo>,</mo> - <mo>...</mo> - <mo>,</mo> - <mi>&#x1EE1C;</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow> - <mi>&ell;</mi> - <mtext>&nbsp;</mtext> - <mi>&#x1EE1C;</mi> - <mtext>'s</mtext> - </mrow> - </mover> - </mover> - </mrow> - <munder> - <mo>&UnderBrace;</mo> - <mrow> - <mi>&#x1EE1F;</mi> - <mo>+</mo> - <mi>&ell;</mi> - <mtext>&nbsp;elements</mtext> - </mrow> - </munder> - </munder> - <mo stretchy="false">}</mo> - </mrow> - </math> - </td> - <td> - <math display="block"> - <mrow> - <mo stretchy="false">{</mo> - <munder> - <mrow> - <mover> - <mrow> - <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded> - <mi>a</mi> - <mo>,</mo> - <mo>...</mo> - <mo>,</mo> - <mi>a</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow> - <mi>k</mi> - <mtext>&nbsp;</mtext> - <mi>a</mi> - <mtext>'s</mtext> - </mrow> - </mover> - </mover> - <mo>,</mo> - <mover> - <mrow> - <mpadded width="0em"><mphantom><mo>(</mo></mphantom></mpadded> - <mi>b</mi> - <mo>,</mo> - <mo>...</mo> - <mo>,</mo> - <mi>b</mi> - </mrow> - <mover> - <mo>&OverBrace;</mo> - <mrow> - <mi>&ell;</mi> - <mtext>&nbsp;</mtext> - <mi>b</mi> - <mtext>'s</mtext> - </mrow> - </mover> - </mover> - </mrow> - <munder> - <mo>&UnderBrace;</mo> - <mrow> - <mi>k</mi> - <mo>+</mo> - <mi>&ell;</mi> - <mtext>&nbsp;elements</mtext> - </mrow> - </munder> - </munder> - <mo stretchy="false">}</mo> - </mrow> - </math> - </td></tr> - <tr> - <td>23</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>&#x1EE00;</mi> - </mtd> - <mtd columnalign="center"> - <mi>&#x1EE1C;</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>ج</mi> - </mtd> - <mtd columnalign="center"> - <mi>د</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>e</mi> - </mtd> - <mtd columnalign="center"> - <mi>f</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>g</mi> - </mtd> - <mtd columnalign="center"> - <mi>h</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mn>٠</mn> - </mtd> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>i</mi> - </mtd> - <mtd columnalign="center"> - <mi>j</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>&#x1EE1F;</mi> - </mtd> - <mtd columnalign="center"> - <mi>l</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>&#x1EE00;</mi> - </mtd> - <mtd columnalign="center"> - <mi>&#x1EE1C;</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>ج</mi> - </mtd> - <mtd columnalign="center"> - <mi>د</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>e</mi> - </mtd> - <mtd columnalign="center"> - <mi>f</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>g</mi> - </mtd> - <mtd columnalign="center"> - <mi>h</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mn>٠</mn> - </mtd> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>i</mi> - </mtd> - <mtd columnalign="center"> - <mi>j</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>&#x1EE1F;</mi> - </mtd> - <mtd columnalign="center"> - <mi>l</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </math> - </td> - <td> - <math display="block"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>a</mi> - </mtd> - <mtd columnalign="center"> - <mi>b</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>c</mi> - </mtd> - <mtd columnalign="center"> - <mi>d</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>e</mi> - </mtd> - <mtd columnalign="center"> - <mi>f</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>g</mi> - </mtd> - <mtd columnalign="center"> - <mi>h</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mn>۰</mn> - </mtd> - <mtd columnalign="center"> - <mrow> - <mo>(</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <mi>i</mi> - </mtd> - <mtd columnalign="center"> - <mi>j</mi> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mi>k</mi> - </mtd> - <mtd columnalign="center"> - <mi>l</mi> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </mtd> - </mtr> - </mtable> - <mo>)</mo> - </mrow> - </math> - </td> - </tr> - <tr> - <td>24</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mi>det</mi> - <mo>|</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٠</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>١</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٢</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mi>&#x1EE1D;</mi> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>١</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٢</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٣</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1D;</mi> - <mo>+</mo> - <mn>١</mn> - </mrow> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٢</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٣</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٤</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1D;</mi> - <mo>+</mo> - <mn>٢</mn> - </mrow> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mi>&#x1EE1D;</mi> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1D;</mi> - <mo>+</mo> - <mn>١</mn> - </mrow> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1D;</mi> - <mo>+</mo> - <mn>٢</mn> - </mrow> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mn>٢</mn> - <mi>&#x1EE1D;</mi> - </mrow> - </msub> - </mtd> - </mtr> - </mtable> - <mo>|</mo> - <mo>&gt;</mo> - <mn>٠</mn> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <mi>det</mi> - <mo>|</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٠</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>١</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٢</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mi>&#x1EE1D;</mi> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>١</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٢</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٣</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1D;</mi> - <mo>+</mo> - <mn>١</mn> - </mrow> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٢</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٣</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mn>٤</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1D;</mi> - <mo>+</mo> - <mn>٢</mn> - </mrow> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mi>&#x1EE1D;</mi> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1D;</mi> - <mo>+</mo> - <mn>١</mn> - </mrow> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mi>&#x1EE1D;</mi> - <mo>+</mo> - <mn>٢</mn> - </mrow> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>ج</mi> - <mrow> - <mn>٢</mn> - <mi>&#x1EE1D;</mi> - </mrow> - </msub> - </mtd> - </mtr> - </mtable> - <mo>|</mo> - <mo>&gt;</mo> - <mn>٠</mn> - </mrow> - </math> - </td> - <td> - <math display="block"> - <mrow> - <mi>det</mi> - <mo>|</mo> - <mtable> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۰</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۱</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۲</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mi>n</mi> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۱</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۲</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۳</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mi>n</mi> - <mo>+</mo> - <mn>۱</mn> - </mrow> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۲</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۳</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mn>۴</mn> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mi>n</mi> - <mo>+</mo> - <mn>۲</mn> - </mrow> - </msub> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - <mtd columnalign="center"> - </mtd> - <mtd columnalign="center"> - <mo>&#x22EE;</mo> - </mtd> - </mtr> - <mtr> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mi>n</mi> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mi>n</mi> - <mo>+</mo> - <mn>۱</mn> - </mrow> - </msub> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mi>n</mi> - <mo>+</mo> - <mn>۲</mn> - </mrow> - </msub> - </mtd> - <mtd columnalign="center"> - <mo>&mldr;</mo> - </mtd> - <mtd columnalign="center"> - <msub> - <mi>c</mi> - <mrow> - <mn>۲</mn> - <mi>n</mi> - </mrow> - </msub> - </mtd> - </mtr> - </mtable> - <mo>|</mo> - <mo>&gt;</mo> - <mn>۰</mn> - </mrow> - </math> - </td> - </tr> - <tr> - <td>25</td> - <td> - <math dir="rtl" display="block"> - <msub> - <mi>&#x1EE11;</mi> - <msub> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msub> - </msub> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <msub> - <mi>&#x1EE11;</mi> - <msub> - <mi>&#x1EE0E;</mi> - <mn>٢</mn> - </msub> - </msub> - </math> - </td> - <td> - <math display="block"> - <msub> - <mi>y</mi> - <msub> - <mi>x</mi> - <mn>۲</mn> - </msub> - </msub> - </math> - </td> - </tr> - <tr> - <td>26</td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msubsup> - <mi>&#x1EE0E;</mi> - <mn>٩٢</mn> - <mn>٣١٤١٥</mn> - </msubsup> - <mo>+</mo> - <mi>&pi;</mi> - </mrow> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <mrow> - <msubsup> - <mi>&#x1EE0E;</mi> - <mn>٩٢</mn> - <mn>٣١٤١٥</mn> - </msubsup> - <mo>+</mo> - <mi>&pi;</mi> - </mrow> - </math> - </td> - <td> - <math display="block"> - <mrow> - <msubsup> - <mi>x</mi> - <mn>۹۲</mn> - <mn>۳۱۴۱۵</mn> - </msubsup> - <mo>+</mo> - <mi>&pi;</mi> - </mrow> - </math> - </td> - </tr> - <tr> - <td>27</td> - <td> - <math dir="rtl" display="block"> - <msubsup> - <mi>&#x1EE0E;</mi> - <msubsup> - <mi>&#x1EE11;</mi> - <mi>&#x1EE1C;</mi> - <mi>&#x1EE00;</mi> - </msubsup> - <msubsup> - <mi>ع</mi> - <mi>ج</mi> - <mi>د</mi> - </msubsup> - </msubsup> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <msubsup> - <mi>&#x1EE0E;</mi> - <msubsup> - <mi>&#x1EE11;</mi> - <mi>&#x1EE1C;</mi> - <mi>&#x1EE00;</mi> - </msubsup> - <msubsup> - <mi>ع</mi> - <mi>ج</mi> - <mi>د</mi> - </msubsup> - </msubsup> - </math> - </td> - <td> - <math display="block"> - <msubsup> - <mi>x</mi> - <msubsup> - <mi>y</mi> - <mi>b</mi> - <mi>a</mi> - </msubsup> - <msubsup> - <mi>z</mi> - <mi>c</mi> - <mi>d</mi> - </msubsup> - </msubsup> - </math> - </td> - </tr> - <tr> - <td>28</td> - <td> - <math dir="rtl" display="block"> - <msubsup> - <mi>&#x1EE11;</mi> - <mn>٣</mn> - <mo>&#x2034;</mo> - </msubsup> - </math> - </td> - <td> - <math dir="rtl" display="block"> - <msubsup> - <mi>&#x1EE11;</mi> - <mn>٣</mn> - <mo>&#x2034;</mo> - </msubsup> - </math> - </td> - <td> - <math display="block"> - <msubsup> - <mi>y</mi> - <mn>۳</mn> - <mo>&#x2034;</mo> - </msubsup> - </math> - </td> - </tr> - <tr> - <td>29</td> - <td><math dir="rtl" display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><munder><mo lspace="0em" rspace="0em" mathcolor="red">lim</mo><mrow><mi>&#x1EE1D;</mi><mo stretchy="false">←</mo><mo>+</mo><mn>∞</mn></mrow></munder><mfrac><msqrt><mrow><mn>٢</mn><mi>π</mi><mi>&#x1EE1D;</mi></mrow></msqrt><mrow><mi>&#x1EE1D;</mi><mo>!</mo></mrow></mfrac><msup><mrow><mo>(</mo><mfrac><mi>&#x1EE1D;</mi><mi>e</mi></mfrac><mo>)</mo></mrow><mi>&#x1EE1D;</mi></msup></mrow><mo>=</mo><mn>1</mn></math></td> - <td><math dir="rtl" display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><munder><mo lspace="0em" rspace="0em" mathcolor="red">lim</mo><mrow><mi>&#x1EE1D;</mi><mo stretchy="false">←</mo><mo>+</mo><mn>∞</mn></mrow></munder><mfrac><msqrt><mrow><mn>٢</mn><mi>π</mi><mi>&#x1EE1D;</mi></mrow></msqrt><menclose notation="madruwb"><mi>&#x1EE1D;</mi></menclose></mfrac><msup><mrow><mo>(</mo><mfrac><mi>&#x1EE1D;</mi><mi>e</mi></mfrac><mo>)</mo></mrow><mi>&#x1EE1D;</mi></msup></mrow><mo>=</mo><mn>1</mn></math></td> - <td><math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><munder><mo lspace="0em" rspace="0em">&#x1EEF1;</mo><mrow><mi>n</mi><mo stretchy="false">→</mo><mo>+</mo><mn>∞</mn></mrow></munder><mfrac><msqrt><mrow><mn>۲</mn><mi>π</mi><mi>n</mi></mrow></msqrt><mrow><mi>n</mi><mo>!</mo></mrow></mfrac><msup><mrow><mo>(</mo><mfrac><mi>n</mi><mi>e</mi></mfrac><mo>)</mo></mrow><mi>n</mi></msup></mrow><mo>=</mo><mn>1</mn></math></td> - </tr> - <tr> - <td>30</td> - <td><math dir="rtl" display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><mo lspace="0em" rspace="0em">det</mo><mo stretchy="false">(</mo><mi>A</mi><mo stretchy="false">)</mo></mrow><mo>=</mo><munder><mo>∑</mo><mrow><mi>σ</mi><mo>∊</mo><msub><mi>S</mi><mi>&#x1EE1D;</mi></msub></mrow></munder><mrow><mi>ϵ</mi><mo stretchy="false">(</mo><mi>σ</mi><mo stretchy="false">)</mo></mrow><mrow><munderover><mo>∏</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>&#x1EE1D;</mi></munderover><msub><mi>&#x1EE00;</mi><mrow><mi>i</mi><mo>,</mo><msub><mi>σ</mi><mi>i</mi></msub></mrow></msub></mrow></mrow></math></td> - <td><math dir="rtl" display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><mo lspace="0em" rspace="0em">det</mo><mo stretchy="false">(</mo><mi>A</mi><mo stretchy="false">)</mo></mrow><mo>=</mo><munder><mo>&#x1EEF0;</mo><mrow><mi>σ</mi><mo>∊</mo><msub><mi>S</mi><mi>&#x1EE1D;</mi></msub></mrow></munder><mrow><mi>ϵ</mi><mo stretchy="false">(</mo><mi>σ</mi><mo stretchy="false">)</mo></mrow><mrow><munderover><mo mathcolor="red">∏</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>&#x1EE1D;</mi></munderover><msub><mi>&#x1EE00;</mi><mrow><mi>i</mi><mo>,</mo><msub><mi>σ</mi><mi>i</mi></msub></mrow></msub></mrow></mrow></math></td> - <td><math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><mo lspace="0em" rspace="0em">det</mo><mo stretchy="false">(</mo><mi>A</mi><mo stretchy="false">)</mo></mrow><mo>=</mo><munder><mo>∑</mo><mrow><mi>σ</mi><mo>∊</mo><msub><mi>S</mi><mi>n</mi></msub></mrow></munder><mrow><mi>ϵ</mi><mo stretchy="false">(</mo><mi>σ</mi><mo stretchy="false">)</mo></mrow><mrow><munderover><mo>∏</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>a</mi><mrow><mi>i</mi><mo>,</mo><msub><mi>σ</mi><mi>i</mi></msub></mrow></msub></mrow></mrow></math></td> - </tr> -</table> -</pre> - -<h3 id="Контент_CSS">Контент CSS</h3> - -<pre class="brush: css"> /* Table style */ - - body { - text-align: center; - } - - table - { - border: solid thin; - border-collapse: collapse; - margin-left: auto; - margin-right: auto; - } - - th - { - background-color: #ddf; - border: solid thin; - color: black; - padding: 5px; - } - - td - { - border: solid thin; - padding: 5px; - text-align: center; - } - - .Asana math { font-family: Asana Math; } - .Cambria math { font-family: Cambria Math; } - .DejaVu math { font-family: DejaVu Math TeX Gyre; } - .LatinModern math { font-family: Latin Modern Math; } - .Libertinus math { font-family: Libertinus Math; } - .LucidaBright math { font-family: Lucida Bright Math; } - .Minion math { font-family: Minion Math; } - .STIXTwo math { font-family: STIX Two Math; } - .TeXGyreBonum math { font-family: TeX Gyre Bonum Math; } - .TeXGyrePagella math { font-family: TeX Gyre Pagella Math; } - .TeXGyreSchola math { font-family: TeX Gyre Schola Math; } - .TeXGyreTermes math { font-family: TeX Gyre Termes Math; } - .XITS math { font-family: XITS Math; } -</pre> - -<h3 id="Контент_JavaScript">Контент JavaScript</h3> - -<pre class="brush: js"> function updateMathFont() - { - var mathFont = document.getElementById("MathFont").value; - if (mathFont == "Default") { - document.body.removeAttribute("class"); - } else { - document.body.setAttribute("class", mathFont); - } - } - - function load() - { - document.getElementById("MathFont"). - addEventListener("change", updateMathFont, false) - } - - window.addEventListener("load", load, false); - -</pre> -</div> - -<p>Следующий тест содержит примеры формул TeX из книги Кнута (Tex book, Knuth) и эквивалентные представления MathML. Cравнивается рендеринг посредством движка XeTeX с использованием шрифта по умолчанию Latin Modern Math с рендерингом MathML вашего браузера с использованием математического шрифта по умолчанию или альтернативных шрифтов OpenType MATH. Чтобы получить лучший рендеринг, убедитесь, что <a href="/ru/docs/Mozilla_MathML_Project/Fonts" title="/ru/docs/Mozilla_MathML_Project/Fonts">математические шрифты</a> установлены в вашей системе и используется браузер с поддержкой OpenType MATH, такой как Gecko 31.0.{{GeckoRelease("31.0")}} или выше. Вы также можете попробовать эту <a href="http://fred-wang.github.io/MathFonts/"> тестовую страницу для математических шрифтов OpenType</a> на которой они заменяются веб-шрифтами. Наконец, вы можете проверить <a href="https://developer.mozilla.org/ru/docs/Mozilla/MathML_Project/a11y#mathml_torture_test">эту таблицу</a>, в которой сравнивается результат чтения тестовых формул различными программами чтения с экрана для браузеров Mozilla.</p> - -<p>{{ EmbedLiveSample('MathML_Torture_Test') }}</p> - -<div id="cke_pastebin" style="position: absolute; top: 74.6667px; width: 1px; height: 1px; overflow: hidden; left: -1000px;"> </div> diff --git a/files/ru/mozilla/mathml_project/status/index.html b/files/ru/mozilla/mathml_project/status/index.html deleted file mode 100644 index 7c94d73439..0000000000 --- a/files/ru/mozilla/mathml_project/status/index.html +++ /dev/null @@ -1,341 +0,0 @@ ---- -title: Статус поддержки MathML в контексте проекта Mozilla -slug: Mozilla/MathML_Project/Status -tags: - - MathML - - MathML Project -translation_of: Mozilla/MathML_Project/Status ---- -<p>Обзор элементов/атрибутов <a class="external" href="http://www.w3.org/TR/MathML3/" title="http://www.w3.org/TR/MathML3/">MathML 3</a> - исключая устаревшие - и текущее состояние встроенной поддержки. Приведены ссылки на MathML 3. Разделы отмечены их текущим статусом: <span style="background-color: lightgreen;">поддерживается</span>, <span style="background-color: gold;">в разработке</span>, и <span style="background-color: salmon;">не поддерживается в настоящее время</span>. Разделы, относящиеся к семантике/содержанию MathML или к чему-то нерелевантному, оставлены пустыми или не перечислены вообще. Если реализованы только основные атрибуты элемента, то он помечается как поддерживаемый, но подробности о неподдерживаемых его атрибутах указаны ниже.</p> - -<h2 id="Элемент_верхнего_уровня_math">Элемент верхнего уровня math</h2> - -<p>Смотрите <a class="external" href="http://www.w3.org/TR/MathML3/chapter2.html#interf.toplevel">§ 2.2</a>.</p> - -<table style="width: 100%;"> - <tbody> - <tr> - <th>Атрибут</th> - <th>Примечания</th> - </tr> - <tr style="background-color: #90ee90;"> - <td>display</td> - <td>Реализован.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>maxwidth, overflow</td> - <td>Не реализован. Смотрите {{ Bug("534962") }}.</td> - </tr> - <tr> - <td>altimg, altimg-width, altimg-height, altimg-valign, alttext</td> - <td>Использование допускается, но не оказывает никакого влияния на рендеринг. MathML всегда доступен, так как имеет место {{ Bug("660762") }}.</td> - </tr> - <tr> - <td>cdgroup</td> - <td>Использование допускается, но не оказывает никакого влияния на рендеринг.</td> - </tr> - </tbody> -</table> - -<h2 id="Атрибуты_общие_для_всех_элементов_MathML">Атрибуты, общие для всех элементов MathML</h2> - -<p>Смотрите <a class="external" href="http://www.w3.org/TR/MathML3/chapter2.html#fund.globatt">§ 2.1.6</a> и <a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.presatt">§ 3.1.10</a>.</p> - -<table style="width: 100%;"> - <tbody> - <tr> - <th>Атрибут</th> - <th>Примечания</th> - </tr> - <tr style="background-color: #90ee90;"> - <td>id, class, style</td> - <td>Реализованы.</td> - </tr> - <tr> - <td>xref</td> - <td>Использование допускается, но не оказывает никакого влияния на рендеринг.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td>href</td> - <td>Реализован. Пользовательский интерфейс работает корректно в Seamonkey, но не в Firefox. Смотрите {{ Bug("958957") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td>mathcolor</td> - <td>Реализован.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td>mathbackground</td> - <td>Реализован.</td> - </tr> - </tbody> -</table> - -<h2 id="Token_Elements">Token Elements</h2> - -<table style="width: 100%;"> - <tbody> - <tr> - <th>Element [- attribute]</th> - <th>Notes</th> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mi">mi</a></td> - <td>Implemented. The mathvariant attribute is fully supported starting with {{geckoRelease("28.0")}}. See {{ Bug("114365") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mn">mn</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mo">mo</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>mo - linebreaking attributes, indentation attributes</td> - <td>Not implemented. See {{ Bug("534962") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mtext">mtext</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mspace">mspace</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>mspace - linebreak</td> - <td>Not implemented. See {{ Bug("380266") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.ms">ms</a></td> - <td>Implemented.</td> - </tr> - </tbody> -</table> - -<h2 id="General_Layout_Schemata">General Layout Schemata</h2> - -<table style="width: 100%;"> - <tbody> - <tr> - <th>Element</th> - <th>Notes</th> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mrow">mrow</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mfrac">mfrac</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.msqrt">msqrt</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mroot">mroot</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mstyle">mstyle</a></td> - <td>Implemented. We are only interested in supporting <a href="http://www.w3.org/TR/MathML3/chapter3.html#id.3.3.4.1">attributes "inherited from the surrounding context"</a>, which are those effectively used in practice. See <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=838509">bug 838509</a>.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.merror">merror</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mpadded">mpadded</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mphantom">mphantom</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mfenced">mfenced</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.menclose">menclose</a></td> - <td>Implemented.</td> - </tr> - </tbody> -</table> - -<h2 id="Script_and_Limit_Schemata">Script and Limit Schemata</h2> - -<table style="width: 100%;"> - <tbody> - <tr> - <th>Element [- attribute]</th> - <th>Notes</th> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.msub">msub</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.msup">msup</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.subsup">msubsup</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.munder">munder</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mover">mover</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.munderover">munderover</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mmultiscripts">mmultiscripts</a></td> - <td>Implemented.</td> - </tr> - </tbody> -</table> - -<h2 id="Tabular_Math">Tabular Math</h2> - -<table style="width: 100%;"> - <tbody> - <tr> - <th>Element [- attribute]</th> - <th>Notes</th> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mtable">mtable</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>mtable - alignmentscope</td> - <td>Not implemented. See {{ Bug("122253") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td>mtable - columnspacing, rowspacing, framespacing</td> - <td>Implemented. See {{ Bug("330964") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>mtable - columnwidth</td> - <td>Not implemented. See {{ Bug("958953") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>mtable - equalrows, equalcolumns</td> - <td>Not implemented. See {{ Bug("958954") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>mtable - side, minlabelspacing</td> - <td>Not implemented. See {{ Bug("356870") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mtr">mtr</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mlabeledtr">mlabeledtr</a></td> - <td>Not Implemented. See {{ Bug("689641") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mtd">mtd</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>* - groupalign.</td> - <td>Not implemented. See {{ Bug("122253") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.maligngroup">maligngroup</a></td> - <td>Not implemented. See {{ Bug("122253") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.malignmark">malignmark</a></td> - <td>Not implemented. See {{ Bug("122253") }}.</td> - </tr> - </tbody> -</table> - -<h2 id="Elementary_Math">Elementary Math</h2> - -<table style="width: 100%;"> - <tbody> - <tr> - <th>Element [- attribute]</th> - <th>Notes</th> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mstack">mstack</a></td> - <td>Not implemented. See {{ Bug("534967") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mlongdiv">mlongdiv</a></td> - <td>Not implemented. See {{ Bug("534967") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.msgroup">msgroup</a></td> - <td>Not implemented. See {{ Bug("534967") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.msrow">msrow</a></td> - <td>Not implemented. See {{ Bug("534967") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mscarries">mscarries</a></td> - <td>Not implemented. See {{ Bug("534967") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mscarry">mscarry</a></td> - <td>Not implemented. See {{ Bug("534967") }}.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.msline">msline</a></td> - <td>Not implemented. See {{ Bug("534967") }}.</td> - </tr> - </tbody> -</table> - -<h2 id="Other_elements">Other elements</h2> - -<table style="width: 100%;"> - <tbody> - <tr> - <th>Element [- attribute]</th> - <th>Notes</th> - </tr> - <tr style="background-color: #fa8072;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.mglyph">mglyph</a></td> - <td>Not implemented. See {{ Bug("297465") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.maction">maction</a></td> - <td>Implemented.</td> - </tr> - <tr style="background-color: #fa8072;"> - <td>maction - tooltip</td> - <td>Not implemented. See {{ Bug("544001") }}.</td> - </tr> - <tr style="background-color: #90ee90;"> - <td><a class="external" href="http://www.w3.org/TR/MathML3/chapter3.html#presm.semantics">semantics</a></td> - <td>Implemented.</td> - </tr> - </tbody> -</table> - -<div class="originaldocinfo"> -<h2 id="Original_Document_Information">Original Document Information</h2> - -<ul> - <li>Author(s): Frédéric Wang</li> - <li>Other Contributors:</li> - <li>Copyright Information: Portions of this content are © 2010 by individual mozilla.org contributors; content available under a Creative Commons license | <a class="external" href="http://www.mozilla.org/foundation/licensing/website-content.html">Details</a>.</li> -</ul> -</div> - -<p> </p> diff --git a/files/ru/mozilla/mobile/index.html b/files/ru/mozilla/mobile/index.html deleted file mode 100644 index 0c27a429bc..0000000000 --- a/files/ru/mozilla/mobile/index.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Mobile -slug: Mozilla/Mobile -tags: - - Mozilla -translation_of: Mozilla/Mobile ---- -<h2 id="Firefox_OS" name="Firefox_OS"><a href="/en-US/docs/Mozilla/Firefox_OS">Firefox OS</a></h2> - -<p>Firefox OS является мобильной операционной системой с открытым исходным кодом, которая использует Linux и движок Gecko Mozilla, чтобы запускать пользовательский интерфейс и набор приложений, написанных полностью на HTML, CSS и JavaScript.</p> - -<p>Читайте о том, как установить Firefox OS и как разрабатывать приложения для нее.</p> - -<h2 id="Firefox_for_Android" name="Firefox_for_Android"><a href="/en-US/docs/Mozilla/Firefox_for_Android">Firefox для Android</a></h2> - -<p>Firefox для Android является мобильным веб-браузером Mozilla для Android-устройств. Он был недавно переписан, чтобы использовать собственный интерфейс Android, что делает его более быстрым, более компактным и более отзывчивым. Он обеспечивает поддержку мощных API-интерфейсов для доступа к возможностям устройств, таких как стеки камеры и телефонии.</p> - -<p>Читайте о том, как помочь создать Firefox для Android, как использовать его API-интерфейсы устройств, и как создавать мобильные дополнения.</p> - -<h2 id="Firefox_for_iOS" name="Firefox_for_iOS"><a href="/en-US/docs/Mozilla/Firefox_for_iOS">Firefox для iOS</a></h2> - -<p>Firefox для iOS является предстоящим мобильным веб-браузером от Mozilla для iOS устройств. Из-за ограничений AppStore, он использует компоненты встроенные в WebView, поставляемые iOS, а не Gecko.</p> - -<p>Читайте о том, как помочь с Firefox для iOS, и как интегрировать его с другими iOS-приложениями.</p> - -<h2 id="Mobile_web_development" name="Mobile_web_development"><a href="/en-US/docs/Web/Guide/Mobile">Mobile web development</a></h2> - -<p>У мобильные устройств разные аппаратные характеристики, отличающиеся от настольных или портативных компьютеров, и многие из API-интерфейсов, используемых для работы с ними все еще находятся в процессе стандартизации.</p> - -<p>Читайте о том, как разрабатывать веб-сайты, которые хорошо смотрятся на мобильных устройствах и воспользоваться новыми возможностями, которые они предлагают. Узнайте, как убедиться, что ваш веб-сайт хорошо работает на различных браузерах.</p> diff --git a/files/ru/mozilla/mobile/viewport_meta_tag/index.html b/files/ru/mozilla/mobile/viewport_meta_tag/index.html deleted file mode 100644 index c16a6df3a4..0000000000 --- a/files/ru/mozilla/mobile/viewport_meta_tag/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: >- - Использование метатега viewport для управления разметкой на мобильных - браузерах -slug: Mozilla/Mobile/Viewport_meta_tag -translation_of: Mozilla/Mobile/Viewport_meta_tag ---- -<h2 id="Введение">Введение</h2> - -<p>Мобильные браузеры отображают страницы в виртуальном «окне» (viewport, вьюпорт), которое, как правило, шире экрана устройства. Поэтому им не нужно сжимать макет каждой страницы в крошечное окно (что может сломать многие сайты, не оптимизированные под мобильные устройства). Пользователи могут изменять и масштабировать видимую область, чтобы видеть разные части страницы.</p> - -<p>В мобильной версии Safari появился "мета тег viewport" (viewport meta tag), который позволяет веб-разработчикам контролировать размер окна просмотра и масштаб страницы. Многие другие мобильные браузеры также поддерживают этот тег, хотя он не является частью какого-либо веб-стандарта. <a href="https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html">Документация</a> Apple хорошо описывает, как веб-разработчики могут пользоваться этим тегом. Но мы должны были провести расследование, чтобы точно выяснить, как его можно реализовать в Fennec. Например, в документации к Safari сказано, что контент представляет собой «список значений, разделенных запятыми», но существующие браузеры и веб-страницы используют любое сочетание запятых, точек с запятой и пробелов в качестве разделителей.</p> - -<p>Узнать больше о вьюпортах в разных мобильных браузерах можно в <a href="http://www.quirksmode.org/mobile/viewports2.html">Рассказе о Двух Viewport'ах</a> на quirksmode.org.</p> - -<h2 id="Основы_Viewport">Основы Viewport</h2> - -<p>Типичный сайт, оптимизированный для мобильных устройств, содержит следующий мета-тег:</p> - -<pre class="notranslate"><meta name="viewport" content="width=device-width, initial-scale=1"> -</pre> - -<p>Свойство <code>width</code> определяет размер окна просмотра. Он может быть установлен на определенное количество пикселей, скажем, <code>width=600</code> или на специальное значение <code>device-width</code>, которое означает ширину экрана в пикселях CSS в масштабе 100%. (Есть также соответствующие значения <code>height</code> и <code>device-height</code>, которые могут быть полезны для страниц с элементами, которые изменяют размер или положение на основе высоты окна просмотра).</p> - -<p>Свойство <code>initial-scale</code> контролирует уровень масштабирования при первой загрузке страницы. Свойства <code>maximum-scale</code>, <code>minimum-scale</code> и <code>user-scalable</code> определяют, как пользователям разрешено увеличивать или уменьшать страницу.</p> - -<div class="blockIndicator warning"> -<p>Использование <code>user-scalable=no</code> может вызвать проблемы с просмотром у пользователей с плохим зрением.</p> -</div> - -<h2 id="Пиксель_это_не_пиксель">Пиксель это не пиксель</h2> - -<p>В последние годы разрешение экрана увеличилось до такого размера, что отдельные пиксели трудно отличить человеческим глазом. Например, последние смартфоны обычно имеют 5-дюймовые экраны с разрешением выше 1920-1080 пикселей (~400 точек на дюйм). Из-за этого многие браузеры могут отображать свои страницы в меньшем физическом размере, переведя несколько аппаратных пикселей для каждого пикселя CSS. Первоначально это вызывало проблемы удобства использования и удобства чтения на многих веб-сайтах, оптимизированных для сенсорного экрана. Питер-Пол Кох написал об этой проблеме в <a href="http://www.quirksmode.org/blog/archives/2010/04/a_pixel_is_not.html">«Пиксель это не пиксель»</a>.</p> - -<p>На экранах с высоким разрешением экрана страницы с <code>initial-scale=1</code> будут эффективно масштабироваться браузерами. Их текст будет плавным и четким, но их растровые изображения, вероятно, не будут использовать полное разрешение экрана. Чтобы получить более четкие изображения на этих экранах, веб-разработчики могут создать изображения - или целые макеты - в более высоком масштабе, чем их конечный размер, а затем масштабировать их с помощью свойств CSS или viewport. Это соответствует <a href="http://www.w3.org/TR/CSS2/syndata.html#length-units">спецификации CSS 2.1</a>, которая гласит:</p> - -<blockquote> -<p>Если плотность пикселей устройства вывода сильно отличается от плотности изображения на типичном дисплее компьютера, пользовательский агент должен масштабировать значения пикселей. Рекомендуется, чтобы блок пикселей ссылался на все количество пикселей устройства, которые наилучшим образом приближаются к опорному пикселю. Рекомендуется, чтобы опорный пиксель представлял собой угол зрения одного пикселя на устройстве с плотностью пикселей 96dpi и расстоянием от считывателя длины руки.</p> -</blockquote> - -<p>Для веб-разработчиков это означает, что размер страницы намного меньше, чем фактическое количество пикселей, и браузеры могут соответственно изменять их макеты и изображения. Но помните, что не все мобильные устройства имеют одинаковую ширину; Вы должны следить за тем, чтобы ваши страницы хорошо работали при большом изменении размеров и ориентации экрана.</p> - -<p>Отношение пикселей по умолчанию зависит от плотности дисплея. На дисплее с плотностью менее 200 точек на дюйм отношение равно 1.0. На дисплеях с плотностью от 200 до 300 точек на дюйм отношение равно 1.5. Для дисплеев с плотностью более 300 точек на дюйм отношение представляет собой целостный пол (<em>плотность</em> / 150 точек на дюйм). Обратите внимание, что коэффициент по умолчанию равен true только тогда, когда масштаб viewport равен 1. В противном случае соотношение между пикселями CSS и пикселями устройства зависит от текущего уровня масштабирования.</p> - -<h2 id="Ширина_Viewport_и_ширина_экрана">Ширина Viewport и ширина экрана</h2> - -<p>Сайты могут устанавливать свой viewport на определенный размер. Например, определение «<code>width=320, initial-scale=1</code>» может использоваться для точного размещения на маленьком дисплее телефона в портретном режиме. Это может вызвать проблемы, когда браузер не отображает страницу большего размера. Чтобы исправить это, браузеры, если необходимо, увеличат ширину окна просмотра, чтобы заполнить экран по заданной шкале. Это особенно полезно для устройств с большим экраном, таких как iPad. (Аллен Пайк <a href="http://www.antipode.ca/2010/choosing-a-viewport-for-ipad-sites/">Выбор видового экрана для IPad сайтов</a> дает хорошее объяснение для веб-разработчиков.)</p> - -<p>Для страниц, задающих начальный или максимальный масштаб, это значит, что свойство <code>width</code> фактически переводит в <em>минимальную</em> ширину viewport. Например, если ваш макет должен иметь ширину не менее 500 пикселей, вы можете использовать следующую разметку. Когда экран шириной более 500 пикселей, браузер будет расширять область просмотра (а не увеличивать), чтобы она соответствовала экрану:</p> - -<pre class="notranslate"><meta name="viewport" content="width=500, initial-scale=1"></pre> - -<p>Другими доступными <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#Attributes">атрибутами</a> являются <code>minimum-scale</code>, <code>maximum-scale</code>, и <code>user-scalable</code>. Эти свойства влияют на начальный масштаб и ширину, а также ограничивают изменения уровня масштабирования.</p> - -<p>Не все мобильные браузеры обрабатывают изменения ориентации таким же образом. Например, Mobile Safari часто просто увеличивает масштаб страницы при смене с вертикальной ориентации на горизонтальную, вместо того, чтобы выкладывать страницу так, как если бы она была первоначально загружена в "ландшафт". Если веб-разработчики хотят, чтобы их настройки масштаба оставались неизменными при переключении ориентации на iPhone, они должны добавить значение <code>maximum-scale</code>, чтобы предотвратить это масштабирование, которое иногда имеет нежелательный побочный эффект, который мешает пользователям изменять масштаб:</p> - -<pre class="notranslate"><meta name="viewport" content="initial-scale=1, maximum-scale=1"></pre> - -<p>Чтобы убрать это небольшое масштабирование, которое делают многие смартфоны, установите настройки начального масштаба и минимального масштаба равные 0.86. В этом случае горизонтальная полоса прокрутки будет убираться в любом положении экрана, и пользователь теперь сможет масштабировать экран свободно.</p> - -<pre class="notranslate"><meta name="viewport" content="width=device-width, initial-scale=0.86, maximum-scale=3.0, minimum-scale=0.86"></pre> - -<h2 id="Общепринятые_viewport_для_мобильных_и_планшетных_устройств">Общепринятые viewport для мобильных и планшетных устройств</h2> - -<p>Если вы хотите знать, какие мобильные и планшетные устройства имеют ширину viewport, здесь представлен полный <a href="https://docs.adobe.com/content/help/en/target/using/experiences/vec/mobile-viewports.html">список размеров видовых экранов для мобильных устройств и планшетов</a>. Это дает такую информацию, как ширина видового экрана на вертикальной и горизонтальной ориентации, а также физический размер экрана, операционную систему и плотность пикселей устройства.</p> - -<h2 id="Спецификации">Спецификации</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Спецификация</th> - <th scope="col">Статус</th> - <th scope="col">Комментарий</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{SpecName('CSS3 Device', '#viewport-meta', '<meta name="viewport">')}}</td> - <td>{{Spec2('CSS3 Device')}}</td> - <td>В ненормативном порядке описывается элемент Viewport META</td> - </tr> - </tbody> -</table> - -<p>Существует явный спрос на метатег viewport, поскольку он поддерживается большинством популярных мобильных браузеров и используется тысячами веб-сайтов. Было бы неплохо иметь настоящий стандарт для веб-страниц для управления свойствами viewport. По мере того, как продолжается процесс стандартизации, мы будем писать в Mozilla об его стадиях, чтобы вы были в курсе любых изменений.</p> diff --git a/files/ru/mozilla/multiple_firefox_profiles/index.html b/files/ru/mozilla/multiple_firefox_profiles/index.html deleted file mode 100644 index 684802e9d2..0000000000 --- a/files/ru/mozilla/multiple_firefox_profiles/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Multiple Firefox profiles -slug: Mozilla/Multiple_Firefox_Profiles -translation_of: Mozilla/Firefox/Multiple_profiles ---- -<p>{{ draft() }}</p> -<p>A profile in Firefox is the collection of settings, customizations, and personalizations that a user has made in the program. You can find details about <a class="external" href="http://support.mozilla.org/kb/Profiles" title="http://support.mozilla.org/kb/Profiles">Profiles on Mozilla's end-user support site</a>.</p> -<h2 id="Reasons_to_have_multiple_profiles">Reasons to have multiple profiles</h2> -<p>The casual user may want to have different profiles for different family members. Having different profiles would allow each person to have his or her own set of bookmarks, settings, and add-ons.</p> -<p>Web developers might want a secondary profile for testing websites, apps, or other projects on different Firefox channels. For example, you might want to have the Firebug add-on installed for Web development, but not for general-purpose Web browsing. While using the Nightly channel, you may encounter some add-ons that have become temporarily incompatible with new API changes, until the add-on developer has a chance to update them. You can remove such add-ons from your profile for Nightly use, while keeping them for use with other profiles.</p> -<p>For QA, testing, and bug triaging contributors, you may want to have multiple development versions of Firefox installed, each with its own profile. Creating new profiles for testing can keep you from losing your preferences, bookmarks, and history. It takes some time to set up a new profile, but once it is complete, all of your Firefox versions will update separately and can be run simultanesouly.</p> -<h2 id="Available_browser_development_channels">Available browser development channels</h2> -<p>There are four available browser channels, each at a different level of stability and development. The four channels are <a class="link-https" href="https://www.mozilla.org/en-US/firefox/new/" title="Firefox Stable">Release</a>, <a class="link-https" href="https://www.mozilla.org/en-US/firefox/beta/" title="Firefox Beta">Beta</a>, <a class="link-https" href="https://www.mozilla.org/en-US/firefox/aurora/" title="Firefox Aurora">Aurora</a>, and <a class="external" href="http://nightly.mozilla.org/" title="Firefox Nightly">Nightly</a>. The Release channel is recommended for most users, as it is the "official release" channel. However, for those more adventurous, you can try one of the other three channels to see what is coming in Firefox and play around with emerging features. The Beta channel contains the features that are expected to be in the next release of Firefox and are in final stages of testing. Aurora contains experimental features, which are not yet at beta quality. Nightly contains the latest code from Firefox developers and is the least stable channel.</p> -<h2 id="Profile_management">Profile management</h2> -<p>{{ Note("On all operating systems, before you can start the Profile Manager, Firefox must be completely closed.") }}</p> -<p><strong>These instructions are tentatively going away in favor of a new profile manager. You can find more details at <a href="/en/Profile_Manager" title="en/Profile_Manager">Profile Manager</a></strong></p> -<h3 id="Starting_Profile_Manager_in_Windows">Starting Profile Manager in Windows</h3> -<h4 id="Windows_XP">Windows XP</h4> -<ol> - <li>Click the Start button</li> - <li>Click "Run"</li> - <li>Type "firefox -ProfileManager"</li> -</ol> -<h4 id="Windows_Vista7">Windows Vista/7</h4> -<ol> - <li>Click the Start button</li> - <li>Click the search bar at the bottom.</li> - <li>Type "firefox -ProfileManager"</li> -</ol> -<h4 id="Windows_88.1">Windows 8/8.1</h4> -<ol> - <li>Press "Windows + R" on your keyboard.</li> - <li>Type "firefox -ProfileManager".</li> -</ol> -<p>If the Profile Manager window does not open, Firefox may have been running in the background, even though it was not visible. Close all instances of Firefox or restart the computer and then try again.</p> -<h3 id="Starting_Profile_Manager_in_Linux">Starting Profile Manager in Linux</h3> -<p>If Firefox is already included in your Linux distribution or if you have installed Firefox with the package manager of your Linux distribution:</p> -<ol> - <li>At the top of the Firefox window, click on the File menu and select Quit.</li> - <li>In Terminal run:<br> - firefox --ProfileManager</li> -</ol> -<p>If the Profile Manager window does not open, Firefox may have been running in the background, even though it was not visible. Close all instances of Firefox or restart the computer and then try again.</p> -<h3 id="Starting_Profile_Manager_in_Mac_OSX">Starting Profile Manager in Mac OSX</h3> -<p>Use the following tutorial until someone can test and step-by-step on a mac directly. <a class="link-https" href="http://sonnygill.net/mac/mac-multiple-firefox-profiles/"> Easily Run Multiple Firefox Instances on a Mac</a>.</p> -<h3 id="Creating_a_profile">Creating a profile</h3> -<p>These instructions should be the same for all operating systems.</p> -<ol> - <li>To start the Create Profile Wizard, click "Create Profile..." in the Profile Manager.</li> - <li>Click Next and enter the name of the profile. Use a profile name that is descriptive, such as your personal name. This name is not exposed on the Internet.</li> - <li>You can also choose where to store the profile on your computer. To select storage location, click Choose Folder....</li> - <li>{{ Note("If you choose your own folder location for the profile, select a new or empty folder. If you choose a folder that isn't empty and you later remove the profile and choose the \"Delete Files\" option, everything inside that folder will be deleted.") }}</li> - <li>To create the new profile, click Finish.</li> -</ol> -<h3 id="Deleting_a_profile">Deleting a profile</h3> -<ol> - <li>In the Profile Manager, select the profile to remove, and click Delete Profile....</li> - <li>Confirm that you wish to delete the profile: - <ul> - <li>Don't Delete Files removes the profile from the Profile Manager yet retains the profile data files on your computer in the storage folder, so that your information is not lost. "Don't Delete Files" is the preferred option because it saves the old profile's folder and allows you to recover the files to a new profile.</li> - <li>Delete Files removes the profile and its files, including the profile bookmarks, settings, passwords, etc. {{ warning("If you use the \"Delete Files\" option, the profile folder and files will be deleted. This action cannot be undone.") }}</li> - <li>Cancel interrupts the profile deletion.</li> - </ul> - </li> -</ol> -<h3 id="Renaming_a_profile">Renaming a profile</h3> -<ol> - <li>In the Profile Manager, select the profile you want to rename, and then click "Rename Profile".</li> - <li>Enter a new name for the profile and click on OK.</li> - <li>{{ Note("The folder containing the files for the profile is not renamed. ") }}</li> -</ol> -<h2 id="Options">Options</h2> -<h3 id="Work_Offline">Work Offline</h3> -<p>Choosing this option loads the selected profile and starts Firefox offline. You can view previously viewed web pages and experiment with your profile.</p> -<h3 id="Don't_ask_at_startup">Don't ask at startup</h3> -<p>If you have multiple profiles, Firefox prompts you for the profile to use each time you start Firefox. Select this option to allow Firefox to load the selected profile without prompting at startup.</p> -<p>{{ Note("To access other profiles after selecting this option, you must start the Profile Manager first.") }}</p> -<h2 id="Using_the_profiles">Using the profiles</h2> -<h3 id="Windows">Windows</h3> -<p>If you want to have the profile manager to pop up each time you start Firefox, so you can choose a profile, you will need to edit the "Target" of the launch icon. To do this:</p> -<ol> - <li>Right click the icon and choose "Properties".</li> - <li>When the properties dialog box pops up, you should see a "Target" text field that you can edit, and it should show the current file path.</li> - <li>After the closing quote, add "-ProfileManager"</li> - <li>Click Ok.</li> -</ol> -<p>Now whenever you double click that icon, the profile manager should appear, allowing you to choose which profile you'd like to use.</p> -<p>If you want individual icons to launch specific profiles, you will need to edit the "Target" of each icon. To do this:</p> -<ol> - <li>Right click the icon and choose "Properties".</li> - <li>When the properties dialog box pops up, you should see a "Target" text field that you can edit, and it should show the current file path.</li> - <li>To permanently set a specific profile, add "-p PROFILE_NAME" to the target path, but outside of the quotes, replacing "PROFILE_NAME" with the actual profile name you chose.</li> - <li>If you would like to also allow multiple instances of Firefox to run at the same time, add "-no-remote" after the profile name.</li> -</ol> -<p>Once you are all done, click Ok. Do this for each icon you'd like to have a specific profile for. Once done, each one should automatically start with the specified profile.</p> -<h3 id="Linux">Linux</h3> -<p>There is no extremely straightforward way to create custom application launchers in Gnome 3 like there was in Gnome 2. The following tutorial will help get you going overall: <a class="external" href="http://blog.randell.ph/2011/08/01/how-to-create-custom-application-launchers-in-gnome-3/" title="How to create custom application launchers in gnome 3">Gnome 3 Custom application launcher</a>. Once you get to the point of adding a new item, you can have the profile dialog show up every time or set the launcher to launch a specific profile.</p> -<p>If you want to have the profile manager to pop up each time you start Firefox, so you can choose a profile, you will need to set the command line for your new launcher.</p> -<ol> - <li>Set the "command" text field to target the executable file, likely "/usr/bin/firefox", and add the "-p" parameter.</li> -</ol> -<p>If you want individual icons to launch specific profiles, you will need to set the command line for your new launcher. To do this:</p> -<ol> - <li>Set the "command" text field to target the executable file, likely "/usr/bin/firefox", and add the "-p PROFILE_NAME" parameter, replacing "PROFILE_NAME" with the specific profile.</li> - <li>Repeat as necessary for each profile you want to set.</li> - <li>If you would like to also allow multiple instances of Firefox to run at the same time, add "-no-remote" after the profile name.</li> -</ol> -<h3 id="Mac_OSX">Mac OSX</h3> -<p>You can find a useful tutorial to set up custom launchers here: <a href="http://spf13.com/post/managing-multiple-firefox-profiles-in-os-x/" title="Managing Multiple Firefox Profiles in OSX">Managing Multiple Firefox Profiles in OSX</a>. Do note it's best to follow all steps in the "Creating the scripts" section, including the "edit Info.plist" step. Leave off the profile name if you want the profile selector to show up every time you launch.</p> -<h2 id="Setting_up_multiple_profiles_for_different_Firefox_Channels">Setting up multiple profiles for different Firefox Channels</h2> -<p>This section will be especially helpful if you are a developer wanting to work with multiple channels and each having their own separate launcher.</p> -<h3 id="Windows_2">Windows</h3> -<p>In Windows, the Aurora and Nightly builds get their own directory in the "Programs" folder, so you don't have to worry about where to store the downloaded files. However, all three will attempt to use the same profile by default, and you'll want to not keep this because the different channels have different levels of features. To set each launcher, follow the Windows instructions at <a href="#Windows">Windows Launcher</a></p> -<h3 id="Linux_2">Linux</h3> -<p>In Linux, things aren't as automatically set up, and you will likely get a prompt to download a tar.bz2 file to extract from. Extract the files to a new directory and use the new launcher instructions from <a href="#Linux">here</a>. The only change you will need to make is the command path. You will want to set it to the directory you extracted the Firefox channel's tar.bz2 file into, and the executable "firefox" file located within. The remaining profile assignment methods will remain the same. You will want to, for sure, add the "-no-remote" part to the end of the command field, so that you could run multiple instances at the same time.</p> -<h3 id="Mac_OSX_2">Mac OSX</h3> -<p>You can find a useful tutorial to set up custom launchers here: <a href="http://spf13.com/post/managing-multiple-firefox-profiles-in-os-x/" title="Managing Multiple Firefox Profiles in OSX">Managing Multiple Firefox Profiles in OSX</a>. Do note it's best to follow all steps in the "Creating the scripts" section, including the "edit Info.plist" step. Also you'll want to change the path in the do shell script to point to the correct .app file for the Firefox channel you want to target.</p> diff --git a/files/ru/mozilla/performance/about_colon_memory/index.html b/files/ru/mozilla/performance/about_colon_memory/index.html deleted file mode 100644 index 6d29937510..0000000000 --- a/files/ru/mozilla/performance/about_colon_memory/index.html +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: 'about:memory' -slug: 'Mozilla/Performance/about:memory' -tags: - - Память - - Производительность - - диагностика -translation_of: 'Mozilla/Performance/about:memory' ---- -<p>about:memory это специальная страница браузера Firefox, позволяющая просматривать, сохранять, загружать и сравнивать информацию об использовании браузером памяти. Также, она дает возможность проводить другие операции, связанные с памятью, такие как GC и CC, сохранение логов GC & CC и сохранение отчетов DMD. Эта страница присутствует во всех сборках браузера и не требует установки дополнительных программ.</p> - -<h2 id="Как_создать_отчет_об_используемой_памяти">Как создать отчет об используемой памяти</h2> - -<p>Представим, что вам нужно узнать как и сколько памяти использует Firefox. Возможно, вам нужно провести анализ использования памяти, или кто-то попросил вас воспользоваться страницей about:memory чтобы создать отчет "memory reports" и исследовать имеющуюся у вас проблему. Выполните следующие шаги.</p> - -<ul> - <li>Когда вам понадобится сделать замер текущей памяти (например, когда количество используемой Firefox памяти резко увеличилось) откройте новую вкладку, введите "about:memory" в адресную строку и нажмите "Enter".</li> - <li>Если вам необходимо передать информацию об используемой памяти, например загрузить в Bugzilla или отправить по почте, нажмите на кнопку "Measure and save...". Откроется диалог, в котором вы сможете сохранить отчет в выбранный файл (у файла будет расширение <code>.json.gz</code>). После этого вы сможете соответственно загрузить или переслать файл, а получатель сможет открыть его в своей версии Firefox.</li> - <li>Если вам нужно передать информацию в текстовом виде, например, в виде комментария на веб-сайте, нажмите на кнопку "Measure...". После этого информация об используемой памяти будет выведена в виде дерева прямо на странице about:memory. Информация будет представлена обычным текстом, так что вы сможете копировать и вставлять его как целиком, так и частями (вам не придется делать скриншоты). В этом тексте будет менее подробная информация об использовании ппамяти, чем в файле отчета, но даже этой информации иногда достаточно для диагностики. Не стоит жать кнопку "Measure..." несколько раз. Это приведет к тому, что страница about:memory сама начнет потреблять больше памяти, из-за добавления и удаления большого количества DOM узлов.</li> -</ul> - -<p>Обратите внимание, что в обоих случаях отчет будет содержать такую приватную информацию, как, например, полный список всех ваших открытых вкладок. Если вы не хотите делиться этой информацией, то у чекбокса "anonymize" должна быть проставлена галочка перед тем, как нажимать на "Measure and save..." или "Measure...". Тогда вся приватная информация из отчета будет удалена, но это может усложнить диагностику памяти.</p> - -<h2 id="Загрузка_memory_report_из_файла">Загрузка memory report из файла</h2> - -<p>Самый простой способ загрузить memory report из файла, это использовать кнопку "Load...". Еще вы можете использовать кнопку "Load and diff..." чтобы получить diff (сравнение) между двумя отчетами.</p> - -<p>Также можно автоматически загрузить одиночный отчет, добавив в адресную сторку параметр file, у которого в качестве значения прописать путь до файла отчета:</p> - -<pre>about:memory?file=/home/username/reports.json.gz -</pre> - -<p>Это особенно полезно при загрузке отчета, полученного с устройства на Firefox OS. </p> - -<p>Отчеты сохраняются в виде заархивированого JSON. В последствии они могут быть загружены как в виде архива, так и из распокованого JSON файла.</p> - -<h2 id="Как_интерпретировать_memory_reports">Как интерпретировать memory reports</h2> - -<p>Почти все, что вы видите на странице about:memory, имеет всплывающую подсказку. Наведите курсор на любую кнопку и вы узнаете, что она делает. Наведите курсор на любую измерение и вы увидите его описание.</p> - -<h3 id="Базовые_понятия_измерений"><span class="mw-headline" id="Basics">Базовые понятия измерений</span></h3> - -<p>Большинство измерений исчисляются в байтах, однако могут использоваться также количественные и процентные единицы.</p> - -<p>Большинство измерений представлены в виде деревьев. Пример:</p> - -<pre> 585 (100.0%) -- preference-service - └──585 (100.0%) -- referent - ├──493 (84.27%) ── strong - └───92 (15.73%) -- weak - ├──92 (15.73%) ── alive - └───0 (00.00%) ── dead -</pre> - -<p>Листья этих деревьев отображают непосредтвенно затраченную память, а узлы представляют суммарные затраты памяти все своих потомков.</p> - -<p>Древовидное представление позволяет разбивать измерения на различные категории, подкатегории и т.д., на любую необходиму глубину. Все измерения в пределах одного дерева уникальны и не повторяются.</p> - -<p>Пути в дереве описываются с ипользованием '/' в качестве разделителя. Например, <code>preference/referent/weak/dead</code> это путь до листа dead в примере выше.</p> - -<p>Поддеревья могут быть свернуты или развернуты при клике по ним. Если вы хотите исследовать интересующее вас поддерево, то будет полезным сначала свернуть его в корневом узле, а потом постепенно раскрывать интересующие вас под-деревья.</p> - -<h3 id="Секции"><span class="mw-headline" id="Sections">Секции</span></h3> - -<p>Memory reports are displayed on a per-process basis, with one process per section. Within each process's measurements, there are the following subsections.</p> - -<h4 id="Явное_выделение_памяти_(Explicit_Allocations)">Явное выделение памяти (Explicit Allocations)</h4> - -<p>Эта секция содержит дерево под названием "explicit". Вся затраченная в этом дереве память выделена при помощи функций явного выделения памяти (таких как <code>malloc</code> и <code>new</code>) и функциями выделения без использования кучи (non-heap) (такими как <code>mmap</code> и <code>VirtualAlloc</code>).</p> - -<p>Далее представлен пример сессии, в которой открыты вкладки cnn.com, techcrunch.com, и arstechnica.com. Некоторые подеревья были развернуты, другие наоборот скрыты для большей наглядности. </p> - -<pre>191.89 MB (100.0%) -- explicit -├───63.15 MB (32.91%) -- window-objects -│ ├──24.57 MB (12.80%) -- top(http://edition.cnn.com/, id=8) -│ │ ├──20.18 MB (10.52%) -- active -│ │ │ ├──10.57 MB (05.51%) -- window(http://edition.cnn.com/) -│ │ │ │ ├───4.55 MB (02.37%) ++ js-compartment(http://edition.cnn.com/) -│ │ │ │ ├───2.60 MB (01.36%) ++ layout -│ │ │ │ ├───1.94 MB (01.01%) ── style-sheets -│ │ │ │ └───1.48 MB (00.77%) -- (2 tiny) -│ │ │ │ ├──1.43 MB (00.75%) ++ dom -│ │ │ │ └──0.05 MB (00.02%) ── property-tables -│ │ │ └───9.61 MB (05.01%) ++ (18 tiny) -│ │ └───4.39 MB (02.29%) -- js-zone(0x7f69425b5800) -│ ├──15.75 MB (08.21%) ++ top(http://techcrunch.com/, id=20) -│ ├──12.85 MB (06.69%) ++ top(http://arstechnica.com/, id=14) -│ ├───6.40 MB (03.33%) ++ top(chrome://browser/content/browser.xul, id=3) -│ └───3.59 MB (01.87%) ++ (4 tiny) -├───45.74 MB (23.84%) ++ js-non-window -├───33.73 MB (17.58%) ── heap-unclassified -├───22.51 MB (11.73%) ++ heap-overhead -├────6.62 MB (03.45%) ++ images -├────5.82 MB (03.03%) ++ workers/workers(chrome) -├────5.36 MB (02.80%) ++ (16 tiny) -├────4.07 MB (02.12%) ++ storage -├────2.74 MB (01.43%) ++ startup-cache -└────2.16 MB (01.12%) ++ xpconnect</pre> - -<p>Для того, чтобы понять некоторые детали необходим опыт, но вот некоторые важные моменты, на которые стоит обратить внимание.</p> - -<ul> - <li>Значение узла "explicit" представляет собой всю память, которая была выделена при помощи явных функций.</li> - <li>Поддерево "window-objects" отображает все объекты window JavaScript'а, включая открытые вкладки и окна. Например, поддерево "top(http://edition.cnn.com/, id=8)" представляет вкладку, которая была открыта со страницы cnn.com, а "top(chrome://browser/content/browser.xul, id=3)" отображает окно графического интерфейса браузера.</li> - <li>Внутри каждого измерения window есть такие поддеревья JavaScript, как ("js-compartment(...)" and "js-zone(...)"), layout, style-sheets, DOM, и так далее.</li> - <li>Понятно, что вкладка cnn.com использует больше памяти чем techcrunch.com tab, а та в свою очередь использует больше, чем arstechnica.com tab.</li> - <li>Поддеревья с именами вроде "(2 tiny)" это искуственные объединения в узлы небольших по размеру поддеревьев, которые по умолчанию свернуты. Если перед измерением выбрать чекбокс "verbose" все деревья будут раскрыты и никаких искуственных узлов добавлено не будет.</li> - <li>Поддерево "js-non-window" отображает потребление памяти JavaScript'ом не из объектов window, а из ядра браузера.</li> - <li>Поддерево "heap-unclassified" отображает затраченную память, которая не подходит под другие секции . Обычно это 10--20% от дерева "explicit". Если эти затраты становятся больше, следует использовать дополнительные методы измерения памяти. При помощи <a href="/en-US/docs/Mozilla/Performance/DMD" title="Performance/MemShrink/DMD">DMD</a> можно выяснить, где именно их следует добавлять.</li> - <li>Существуют измерения и для других видов контента, таких как изображения и workers, а также для подсистем браузера, такех как начальный кэш и XPConnect.</li> -</ul> - -<p>Как показывает следующий пример, можно измерить потребления памяти некоторыми дополнениями.</p> - -<pre>├───40,214,384 B (04.17%) -- add-ons -│ ├──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 (from: resource://gre/modules/addons/XPIProvider.jsm:4307)) -│ ├──11,583,312 B (01.20%) ++ jid1-xUfzOsOFlzSOXg@jetpack/js-non-window/zones/zone(0x100496800) -│ ├───5,574,608 B (00.58%) -- {59c81df5-4b7a-477b-912d-4e0fdf64e5f2} -│ │ ├──5,529,280 B (00.57%) -- window-objects -│ │ │ ├──4,175,584 B (00.43%) ++ top(chrome://chatzilla/content/chatzilla.xul, id=4293) -│ │ │ └──1,353,696 B (00.14%) ++ top(chrome://chatzilla/content/output-window.html, id=4298) -│ │ └─────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) -│ └───1,872,144 B (00.19%) ++ treestyletab@piro.sakura.ne.jp/js-non-window/zones/zone(0x100496800)</pre> - -<p>Моменты, на которые стоит обратить внимание. </p> - -<ul> - <li>Измерения некоторых дополнений, таких как Tree Style Tab, можно опознать по имени. Другие дополнения идентифицируются только по шестнадцатиричному идентификатору. На странице about:support вы можете узнать, к какому дополнению относится тот или иной идентификатор. Например, <code>59c81df5-4b7a-477b-912d-4e0fdf64e5f2</code> это Chatzilla.</li> - <li>Вся используемая JavaScript память, относящаяся к дополнениям, показывается в этом дереве.</li> - <li>Для дополнений, использующих отдельные окна, таких как Chatzilla, потребление памяти этими окнами также показывается в этом дереве.</li> - <li>Для дополнений, использующих XUL overlays, таких как AdBlock Plus, потребление памяти этими overlays в данном дереве отображено не будет; вместо этого оно будет отображено в поддереве non-add-on и не будет идентифицировано как вызванное определенным дополнением.</li> -</ul> - -<h4 id="Прочие_измерения_(Other_Measurements)">Прочие измерения (Other Measurements)</h4> - -<p>Этот раздел содержит деревья, которые в дереве "explicit" были урезаны и упрощены. Например, в дереве "explicit" все измерения DOM и layout были разбиты по окнам, но в секции Прочие измерения (Other Measurements) они собраны со всего браузера и сгруппированы, что и демонстрирует следующий пример.</p> - -<pre>26.77 MB (100.0%) -- window-objects -├──14.59 MB (54.52%) -- layout -│ ├───6.22 MB (23.24%) ── style-sets -│ ├───4.00 MB (14.95%) ── pres-shell -│ ├───1.79 MB (06.68%) ── frames -│ ├───0.89 MB (03.33%) ── style-contexts -│ ├───0.62 MB (02.33%) ── rule-nodes -│ ├───0.56 MB (02.10%) ── pres-contexts -│ ├───0.47 MB (01.75%) ── line-boxes -│ └───0.04 MB (00.14%) ── text-runs -├───6.53 MB (24.39%) ── style-sheets -├───5.59 MB (20.89%) -- dom -│ ├──3.39 MB (12.66%) ── element-nodes -│ ├──1.56 MB (05.84%) ── text-nodes -│ ├──0.54 MB (02.03%) ── other -│ └──0.10 MB (00.36%) ++ (4 tiny) -└───0.06 MB (00.21%) ── property-tables</pre> - -<p>Но некоторые деревья в этом разделе не включают в себя данные из дерева "explicit". К таким можно отнести "preference-service" из примера выше.</p> - -<p>В конце этого раздела находятся еденичные измерения:</p> - -<pre> 0.00 MB ── canvas-2d-pixels - 5.38 MB ── gfx-surface-xlib - 0.00 MB ── gfx-textures - 0.00 MB ── gfx-tiles-waste - 0 ── ghost-windows - 109.22 MB ── heap-allocated - 164 ── heap-chunks - 1.00 MB ── heap-chunksize - 114.51 MB ── heap-committed - 164.00 MB ── heap-mapped - 4.84% ── heap-overhead-ratio - 1 ── host-object-urls - 0.00 MB ── imagelib-surface-cache - 5.27 MB ── js-main-runtime-temporary-peak - 0 ── page-faults-hard - 203,349 ── page-faults-soft - 274.99 MB ── resident - 251.47 MB ── resident-unique -1,103.64 MB ── vsize</pre> - -<p>Среди этих измерений некоторые хочется выделить.</p> - -<ul> - <li>"resident". Использование физической памяти. Если вам нужен один единственный параметр, обощающий использование памяти, то это, возможно, лучший вариант.</li> - <li>"vsize". Использование виртульаной памяти. Зачастую бывает намного больше остальных измерений (особенно на Mac). Имеет значение только на 32-разрядных системах, например Win32. Существует также "vsize-max-contiguous" (измереяется не на всех платформах и в этом примере не показан), который показывает самый большой доступный фрагмент виртуального адрессного пространства. Если это число будет слишком маленьким, то довольно скоро попытка выделить память вызовет ошибку из-за недостатка виртуальной памяти.</li> - <li>Различные измерения, связанные с графикой ("gfx-*"). Могут варьироваться между разными платформами. Графика часто является источником высокого использования памяти, так что эти измерения могут быть полезны для обнаружения таких случаев.</li> -</ul> - -<h4 id="Система">Система</h4> - -<p>Этот раздел доступен только на Firefox OS. Он содержит все измерения устройства, полученные от операционной системы. Среди прочего, этот раздел бывает полезен для понимания как устройство использует память здесь и сейчас.</p> diff --git a/files/ru/mozilla/performance/index.html b/files/ru/mozilla/performance/index.html deleted file mode 100644 index a6f45c1158..0000000000 --- a/files/ru/mozilla/performance/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Быстродействие -slug: Mozilla/Performance -tags: - - TopicStub - - Быстродействие - - Производительность - - Профайлер - - Утечки памяти - - Энергопотребление -translation_of: Mozilla/Performance ---- -<p>Собранные здесь статьи помогут вам повысить быстродействие, если вы пишете исходный код ядра Mozilla или дополнения к нему.</p> - -<table class="topicpage-table"> - <tbody> - <tr> - <td> - <h3 id="Документация">Документация</h3> - - <dl> - <dt><a href="/en/Performance/Reporting_a_Performance_Problem" title="en/Performance/Reporting_a_Performance_Problem">Reporting a Performance Problem</a></dt> - <dd>Удобное для пользователя руководство по составлению отчетов по проблемам быстродействия. Среда разработки не требуется.</dd> - <dt><a href="https://developer.mozilla.org/ru/Add-ons/%D0%A0%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D0%BF%D0%BE%D0%B2%D1%8B%D1%88%D0%B5%D0%BD%D0%B8%D1%8E_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B9" title="en/Extensions/Performance best practices in extensions">Рекомендации по повышению производительности расширений</a></dt> - <dd>Гайд по производительности для разработчиков дополнений.</dd> - <dt><a href="/en/Performance/Measuring_add-on_startup_performance" title="en/Measuring Add-on Startup Performance">Measuring Add-on Startup Performance</a></dt> - <dd>Гайд для разработчиков дополнений по настройке окружения для тестирования производительности.</dd> - <dt><a href="/en/XUL_School/Appendix_A:_Add-on_Performance" title="en/XUL School/Appendix A: Add-on Performance">Школа XUL: Производительность дополнений</a></dt> - <dd>Заметки для разработчиков дополнений для помощи в избежании ухудшения производительности приложений.</dd> - <dt><a href="/en/Performance/GPU_performance" title="en/GPU performance">Производительность GPU</a></dt> - <dd>Заметки для профилирования и улучшения производительности при использовании GPU.</dd> - </dl> - - <p><span class="alllinks"><a class="internal" href="/Special:Tags?tag=Performance" title="Special:Tags?tag=Performance">Просмотреть все страницы с пометками «Производительность»...</a></span></p> - - <h3 id="Утилиты_профилирования_и_поиска_утечек">Утилиты профилирования и поиска утечек</h3> - - <dl> - <dt><a href="/en-US/docs/Mozilla/Performance/about:memory">about:memory</a></dt> - <dd>Страница about:memory - это простейший инструмент для измерения потребления памяти, и первое, с чего следует начинать при анализе. Позволяет выполнить относящиеся к памяти операции, такие как запуск сборщика мусора и сборщика циклических ссылок, сохранение дампа памяти сборщика мусора и сборщика циклических ссылок, сохранение дампа отчета DMD. Страница about:memory построена на верхнем уровне инфраструктуры <a href="/en-US/docs/Mozilla/Performance/Memory_reporting">отчетов памяти</a> Firefox.</dd> - <dt><a href="/en-US/docs/Mozilla/Performance/DMD">Профайлер DMD</a></dt> - <dd>DMD - это инструмент, который находит проблемные места на странице about:memory, и также может выполнять множество видов проверок кучи.</dd> - <dt><a href="https://areweslimyet.com/">areweslimyet.com</a></dt> - <dd>Сайт areweslimyet.com (аббревиатура AWSY), показывающий потребление памяти различными версиями сборок Firefox.</dd> - <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Performance/BloatView">BloatView</a></dt> - <dd>BloatView для каждого класса показывает статистику по выделенным блокам и ссылкам, а также общую величину объема памяти, подвергшегося утечке, с разбивкой по классам. Используется как часть процесса тестирования в непрерывной интеграции сборок Mozilla.</dd> - <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Refcount_tracing_and_balancing">Трассировка и балансировка ссылок</a></dt> - <dd>Трассировка и балансировка ссылок - это способы отслеживания утечек памяти, вызванных неправильным использованием механизма подсчета ссылок (reference counting). Эти способы медлительны и не просты в применении, поэтому больше подходят для опытных разработчиков.</dd> - <dt><a href="/en-US/docs/Mozilla/Performance/GC_and_CC_logs">Логи сборщика мусора и сборщика циклических ссылок</a></dt> - <dd>Логи сборщика мусора и сборщика циклических ссылок могут быть созданы и проанализированы разными способами. Например, они помогут вам понять, почему конкретный объект не был уничтожен и продолжает жить.</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> - это инструмент, который выявляет различные связанные с памятью проблемы во время выполнения, включая утечки памяти. Valgring используется как <a class="external text" href="/en-US/docs/Valgrind_test_job" rel="nofollow">часть</a> процесса тестирования в непрерывной интеграции сборок Mozilla, однако покрытие кода тестами ограничено, так как Valgring медлителен.</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> (аббревиатура LSAN) - похож на Valgrind, но выполняется быстрее, потому что использует статический анализ исходного кода. LSAN является частью процесса тестирования в непрерывной интеграции сборок Mozilla, с множеством тестов, выполняющихся через него как часть тестовых задач инструмента AdressSanitizer (ASAN).</dd> - <dt><a href="http://developer.apple.com/documentation/Performance/Conceptual/ManagingMemory/Articles/FindingLeaks.html">Инструменты Apple</a></dt> - <dd>Apple предоставляет несколько интрументов для Mac OS X, которые выявляют проблемы, аналогичные выявляемым инструментами LSAN и Valgrind. Этот инструмент для выявления "утечек" не рекомендуется использовать с движком SpiderMonkey или браузером Firefox, потому что его запутывают меченые указатели (tagged pointers) и он думает, что объекты текут, когда это не так (подробнее см. <a class="external text" href="https://bugzilla.mozilla.org/show_bug.cgi?id=390944" rel="nofollow">ошибку 390944</a>).</dd> - <dt><a href="/en-US/docs/Mozilla/Performance/Leak_Gauge">Leak Gauge</a></dt> - <dd>Leak Gauge - это инструмент, который может быть использован для выявления определенных видов утечек в движке Gecko, включая те, что связаны с документами, объектами окон, и docshell-ами.</dd> - <dt><a href="http://dxr.mozilla.org/mozilla-central/source/memory/replace/logalloc/README">LogAlloc</a></dt> - <dd>LogAlloc - это инструмент, с помощью которого можно получить лог дампа памяти движка Gecko. Этот лог можно впоследствии самостоятельно повторно воспроизвести на дефолтном распределителе памяти браузера Firefox или на другой библиотеке с измененной функцией выделения блоков памяти malloc, включая тестирование других выделенных блоков под точно такой же рабочей нагрузкой.</dd> - </dl> - - <p>Смотрите также документацию <a href="/en-US/docs/Mozilla/Performance/Leak-hunting_strategies_and_tips">Стратегии и советы по выявлению утечек памяти</a>.</p> - </td> - <td> - <h3 id="Профилировка_и_интрументы_анализа_производительности">Профилировка и интрументы анализа производительности</h3> - - <dl> - <dt><a href="https://developer.mozilla.org/en-US/docs/Tools/Performance" title="en/Performance/Profiling with the Built-in Profiler">Профилировка с помощью профайлера Developer Tools Profiler</a></dt> - <dd>Профайлер, встроенный в инструментарий разработчика, включает в себя водопад высокого уровня (high-level waterfall), детализированное дерево вызовов, профилировку размещенных блоков памяти и профилировку сборщика мусора, а также графики пламени (flame graphs). Все это доступно на всех платформах и каналах релизов, а также поддерживает удаленную профилировку в операционной системе b2g (Boot to Gecko = Firefox OS) и профилировку браузера Fennec (версия Firefox, адаптированная для смартфонов).</dd> - </dl> - - <dl> - <dt><a href="/en/Performance/Profiling_with_the_Built-in_Profiler" title="en/Performance/Profiling with the Built-in Profiler">Профилировка с помощью дополнения Gecko Profiler</a> {{ gecko_minversion_inline("16.0") }}</dt> - <dd>Дополнение Gecko Profiler - хороший инструмент, с которого можно начать исследования.</dd> - <dt><a href="/en/Performance/Profiling_with_Instruments" title="en/Performance/Profiling with Instruments">Профилировка с помощью Instruments</a></dt> - <dd>Как использовать Instruments от компании Apple для профилировки кода Mozilla.</dd> - <dt><a href="/en/Performance/Profiling_with_Xperf" title="en/Performance/Profiling with Xperf">Профилировка с помощью Xperf</a></dt> - <dd>Как использовать утилиту Xperf от компании Microsoft для профилировки кода Mozilla.</dd> - <dt><a href="/en/Performance/Profiling_with_Zoom" title="en/Performance/Profiling with Zoom">Профилировка с помощью Zoom</a></dt> - <dd>Zoom - это профайлер под Linux от создателей профайлера 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">Измерение производительности с помощью модуля PerfMeasurement.jsm</a> {{ gecko_minversion_inline("2.0") }}</dt> - <dd>Использование модуля <a href="/en/JavaScript_code_modules/PerfMeasurement.jsm" title="en/JavaScript code modules/PerfMeasurement.jsm"><code>PerfMeasurement.jsm</code></a> для измерения характеристик производительности вашего кода JavaScript.</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">Добавление нового датчика телеметрии</a></dt> - <dd>Информация о том, как добавить в отчет о производительности системы телеметрии новую характеристику для измерения.</dd> - <dt><a href="/en/Performance/Profiling_JavaScript_with_Shark" title="en/Performance/Profiling JavaScript with Shark">Профилировка JavaScript с помощью Shark</a> {{ gecko_minversion_inline("1.9") }}</dt> - <dd>Как использовать профайлер Shark под Mac OS X для анализа кода JavaScript в браузере Firefox 3.5 и более поздних версиях.</dd> - <dt><a href="/en/Performance/Profiling_with_Shark" title="en/Performance/Profiling with Shark">Профилировка с помощью Shark</a></dt> - <dd>Как использовать инструмент Shark от компании Apple для профилировки кода Mozilla.</dd> - <dt><a href="/en-US/docs/Mozilla/Performance/Investigating_CSS_Performance">Исследование производительности каскадных таблиц стилей CSS</a></dt> - <dd>Как выяснить, почему изменение стиля с помощью CSS занимает так много времени.</dd> - </dl> - - <h3 id="Профилировка_энергопотребления">Профилировка энергопотребления</h3> - - <dl> - <dt><a href="/en-US/docs/Mozilla/Performance/Power_profiling_overview">Общая информация о профилировке энергопотребления</a></dt> - <dd>На этой странице предоставлен обзор важной информации, в том числе подробная информация о принципах работы аппаратного обеспечения, о том, какие характеристики можно измерять, какие методы рекомендуется использовать. Эта статья должна стать отправной точкой для тех, кто пока мало знаком с профилировкой энергопотребления.</dd> - <dt><code><a href="/en-US/docs/Mozilla/Performance/tools_power_rapl">tools/power/rapl</a></code> (Mac, Linux)</dt> - <dd><code>tools/power/rapl</code> - это консольная утилита в наборе исходных кодов Mozilla, которая использует интерфейс Intel RAPL для оценки энергопотребления пакета, ядер процессора, графического процессора и оперативной памяти.</dd> - <dt><code><a href="/en-US/docs/Mozilla/Performance/powermetrics">powermetrics</a></code> (только для платформы Mac)</dt> - <dd><code>powermetrics</code> - это консольная утилита, которая собирает и показывает целый ряд характеристик по всем имеющимся процессам и отдельно по каждому процессу, включая использование центрального процессора, графического процессора, и частоты пробуждения потоков процесса.</dd> - <dt><a href="/en-US/docs/Mozilla/Performance/TimerFirings_logging">Журналирование TimerFirings</a> (Все платформы)</dt> - <dd>Журналирование TimerFirings - это встроенный механизм записи событий для вывода на экран данных о каждом срабатывании таймера.</dd> - <dt><code><a href="/en-US/docs/Mozilla/Performance/dtrace">dtrace</a></code> (только для платформы Mac)</dt> - <dd><code>dtrace</code> - это мощный инструмент для профилировки пробуждений потоков процесса.</dd> - <dt><a href="/en-US/docs/Mozilla/Performance/Activity_Monitor_and_top">Activity Monitor, меню Battery Status и консольная утилита <code>top</code></a> (Mac)</dt> - <dd>Эти инструменты являются основными для пользователей Mac, которые рекомендуется изучить в первую очередь.</dd> - <dt><a href="/en-US/docs/Mozilla/Performance/Intel_Power_Gadget">Intel Power Gadget</a> (Windows, Mac, Linux)</dt> - <dd>Intel Power Gadget в режиме реального времени показывает графы для пакетов и RAPL-характеристики процессора. От также дает API, посредством которых эти характеристики могут быть получены.</dd> - <dt><code><a href="/en-US/docs/Mozilla/Performance/perf">perf</a></code> (только для Linux)</dt> - <dd><code>perf</code> - это мощная консольная утилита может измерять множество различных параметров, включая характеристики энергопотребления и пробуждения потоков процесса.</dd> - <dt><code><a href="/en-US/docs/Mozilla/Performance/turbostat">turbostat</a></code> (только для Linux)</dt> - <dd><code>turbostat</code> - это консольная утилита, которая собирает и показывает разные связанные с энергопотреблением характеристики, делая акцент на показателях по каждому отдельному процессору, таких как частоты и режимы энергопотребления процессора.</dd> - <dt><code><a href="https://01.org/powertop">powertop</a></code> (только для Linux)</dt> - <dd><code>powertop</code> - это интерактивная консольная утилита, который собирает и показвает разные связанные с энергопотреблением характеристики.</dd> - </dl> - - <h3 id="Связанные_темы">Связанные темы</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/ru/mozilla/preferences/index.html b/files/ru/mozilla/preferences/index.html deleted file mode 100644 index 1169ecabf1..0000000000 --- a/files/ru/mozilla/preferences/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Preferences -slug: Mozilla/Preferences -tags: - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Preferences ---- -<p>The preference system makes it possible to store data for Mozilla applications using a key/value pairing system. These articles provide information about how to use the preference system.</p> -<table class="topicpage-table"> - <tbody> - <tr> - <td> - <h2 class="Documentation" id="Documentation" name="Documentation">Documentation</h2> - <dl> - <dt><a href="/en-US/docs/Preferences/Preferences_system" title="Preferences/Preferences system">Preferences system</a></dt> - <dd>An introduction to using the preference system in Mozilla.</dd> - <dt><a href="/en-US/docs/XUL_School/Handling_Preferences" title="XUL School/Handling Preferences">XUL School: Handling preferences</a></dt> - <dd>The XUL School tutorial chapter on preferences.</dd> - <dt><a href="/en-US/docs/Preferences/Preference_reference" title="Preferences/Preference_reference">Mozilla preference reference</a></dt> - <dd>A reference guide to all Mozilla preferences; currently a work in progress.</dd> - <dt><a href="/en-US/docs/Preferences/A_brief_guide_to_Mozilla_preferences" title="Preferences/A brief guide to Mozilla preferences">A brief guide to Mozilla preferences</a></dt> - <dd>An introductory guide to where preferences are stored and other useful information about the core preference system.</dd> - <dt><a href="/en-US/docs/Preferences/Using_preferences_from_application_code" title="Preferences/Using preferences from application code">Using preferences from application code</a> {{gecko_minversion_inline("6.0")}}</dt> - <dd>Firefox 6 introduced static functions for accessing preferences efficiently from within application code. This API is not available for add-ons, but if you're working on a Gecko application, this API is the preferred way to access preferences.</dd> - <dt><a href="/en-US/docs/Preferences/Mozilla_networking_preferences" title="Preferences/Mozilla networking preferences">Mozilla networking preferences</a></dt> - <dd>A guide to key networking-related preferences.</dd> - <dt><a href="/en-US/docs/Preferences/Mozilla_preferences_for_uber-geeks" title="Preferences/Mozilla preferences for uber-geeks">Mozilla preferences for uber-geeks</a></dt> - <dd>A guide to preferences that only truly elite geeks should play with.</dd> - </dl> - <p><span class="alllinks"><a href="/en-US/docs/tag/Preferences" title="tag/Preferences">View all pages tagged with "Preferences"...</a></span></p> - </td> - <td> - <h2 class="Community" id="Examples" name="Examples">Examples</h2> - <dl> - <dt><a href="/en-US/docs/Code_snippets/Preferences" title="Code snippets/Preferences">Code snippets</a></dt> - <dd>Preference-related code snippets.</dd> - <dt><a href="/en-US/docs/Adding_preferences_to_an_extension" title="Adding preferences to an extension">Adding preferences to an extension</a></dt> - <dd>How to add preferences to an existing extension.</dd> - </dl> - <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Related Topics</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">Extensions</a>, <a href="/en-US/docs/Developer_Guide" title="Developing_Mozilla">Developing Mozilla</a></li> - </ul> - </td> - </tr> - </tbody> -</table> diff --git a/files/ru/mozilla/preferences/preference_reference/index.html b/files/ru/mozilla/preferences/preference_reference/index.html deleted file mode 100644 index 64af848546..0000000000 --- a/files/ru/mozilla/preferences/preference_reference/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Preference reference -slug: Mozilla/Preferences/Preference_reference -tags: - - Mozilla - - NeedsTranslation - - Preferences - - Reference - - TopicStub -translation_of: Mozilla/Preferences/Preference_reference ---- -<p>{{ draft() }}</p> - -<p>{{LandingPageListSubpages()}}</p> diff --git a/files/ru/mozilla/preferences/preference_reference/javascript.options.showinconsole/index.html b/files/ru/mozilla/preferences/preference_reference/javascript.options.showinconsole/index.html deleted file mode 100644 index d1955ccfda..0000000000 --- a/files/ru/mozilla/preferences/preference_reference/javascript.options.showinconsole/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: javascript.options.showInConsole -slug: Mozilla/Preferences/Preference_reference/javascript.options.showInConsole -translation_of: Mozilla/Preferences/Preference_reference/javascript.options.showInConsole ---- -<p>Русский The preference <code>javascript.options.showInConsole</code> controls whether errors or warnings in chrome code are shown in the Error Console.</p> - -<ul style="display: table; padding: 0; border-left: 2px solid; margin-left: 0.5em;"> - <li style="display: table-row; padding: 3px; margin: 0;"><dfn>Type:</dfn><code>boolean</code></li> - <li style="display: table-row; padding: 3px; margin: 0;"><dfn>Default value: </dfn> <code>false</code> (<code>true</code> in debug builds)</li> - <li style="display: table-row; padding: 3px; margin: 0;"><dfn>Exists by default:</dfn> yes</li> - <li style="display: table-row; padding: 3px; margin: 0;"><dfn>Application support:</dfn>Firefox 1.0</li> - <li style="display: table-row; padding: 3px; margin: 0;"><dfn>Status:</dfn> Active</li> - <li style="display: table-row; padding: 3px; margin: 0;"><dfn>Introduction:</dfn><a class="external text" href="http://bonsai.mozilla.org/cvsview2.cgi?diff_mode=context&whitespace_mode=show&file=consoleBindings.xml&branch=&root=/cvsroot&subdir=mozilla/xpfe/components/console/resources/content&command=DIFF_FRAMESET&rev1=1.9&rev2=1.10" rel="nofollow" title="http://bonsai.mozilla.org/cvsview2.cgi?diff_mode=context&whitespace_mode=show&file=consoleBindings.xml&branch=&root=/cvsroot&subdir=mozilla/xpfe/components/console/resources/content&command=DIFF_FRAMESET&rev1=1.9&rev2=1.10">2002-02-26</a></li> - <li style="display: table-row; padding: 3px; margin: 0;"><dfn>Bugs:</dfn> {{ bug("125181") }} {{ bug("337875") }}</li> -</ul> - -<h2 id="Values">Values</h2> - -<dl> - <dt><code>false</code></dt> - <dd>Only errors and warnings from content code are shown.</dd> - <dt><code>true</code> (default)</dt> - <dd>Errors and warnings from both chrome and content are shown in the Error Console. - <div class="note"> - <p><strong>Note:</strong> Since the Web Console was introduced in Firefox 4 specifically for debugging content, the default value for this preference has changed to <code>true</code> as of {{Gecko ("2.0")}}.</p> - </div> - </dd> -</dl> - -<h2 id="See_also">See also</h2> - -<p><a href="/en-US/docs/Setting_up_extension_development_environment" title="/en-US/docs/Setting_up_extension_development_environment">Setting up extension development environment</a></p> diff --git a/files/ru/mozilla/projects/emscripten/index.html b/files/ru/mozilla/projects/emscripten/index.html deleted file mode 100644 index 9c3777e2f5..0000000000 --- a/files/ru/mozilla/projects/emscripten/index.html +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Emscripten -slug: Mozilla/Projects/Emscripten -translation_of: Mozilla/Projects/Emscripten ---- -<p><span class="seoSummary">Emscripten </span>—<span class="seoSummary"> это транслятор LLVM в JavaScript. Он берёт LLVM байткод (полученный, к примеру, из исходного кода на C++ с помощью Clang) и преобразует его в JavaScript, который можно в дальнейшем использовать в интернете.</span></p> - -<div class="warning"> -<p><strong>Важное замечание</strong>: Эта страница содержит краткое описание того, что такое Emscripten. Для этого, чтобы начать работу с Emscripten, воспользуйтесь <a href="http://kripken.github.io/emscripten-site/index.html/">официальной Emscripten WIki</a>.</p> -</div> - -<p>С помощью Emscripten можно:</p> - -<ul> - <li>Преобразовывать код на C и C++ в код на JavaScript.</li> - <li>Преобразовать в JavaScript код на любом другом языке, который может быть транслирован в LLVM-байткод.</li> - <li>Преобразовать среды исполнения других языков, написанные на C/C++, и запустить код, написанный на этих языках (это уже делалось для Python и Lua)!</li> -</ul> - -<p>Emscripten позволяет сделать нативный код доступным для использования в Web: платформа, базирующаяся на стандартах, имеет независимые совместимые реализации и запускается везде, с персональных компьютеров до iPad. </p> - -<p>Используя Emscripten, разработчики C/C++ могут избежать портирования кода вручную на JavaScript - и даже избежать изучения JavaScript вовсе. Web-разработчики тоже выигрывают, так как они могут использовать много тысяч существующих нативных утилит и библиотек на своих сайтах.</p> - -<p>Практически любой переносимый код на C и C++ может быть скомпилирован в JavaScript c использованием Emscripten, начиная с высокопроизводительных игр, которые требуют прорисовки графики, проигрывают звуки и загружают и обрабатывают файлы, и заканчивая фреймворками для создания приложений, например, Qt.</p> - -<p>Emscripten генерирует быстрый код, его формат по-умолчанию — <a href="/en-US/docs/Games/Tools/asm.js">asm.js</a>, высокооптимизируемое подмножество JavaScript, которое во многих случаях может исполняться со скоростью, близкой к нативной.</p> - -<div class="note"> -<p><strong>Заметка</strong>: Звучит интересно? <a href="http://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html">Прочитайте больше о Emscripten и посмотртите некоторые примеры</a>, или <a href="http://kripken.github.io/emscripten-site/docs/getting_started/index.html">начните использовать его прямо сейчас</a>.</p> -</div> - -<h2 id="Other_articles_of_interest_on_MDN">Other articles of interest on MDN</h2> - -<ul> - <li>Our <a href="/en-US/docs/Games">Games zone</a> contains some useful content related to games development, which is a common area of use for Emscripten.</li> - <li>Our <a href="/en-US/docs/Mozilla/Projects/Emscripten/Techniques">Emscripten techniques</a> page is a place to store useful Emscripten-related ideas that haven't made it onto the Emscripten Wiki.</li> -</ul> diff --git a/files/ru/mozilla/projects/index.html b/files/ru/mozilla/projects/index.html deleted file mode 100644 index c1e43934a2..0000000000 --- a/files/ru/mozilla/projects/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Projects -slug: Mozilla/Projects -tags: - - Mozilla - - NeedsContent - - NeedsTranslation - - Projects - - TopicStub -translation_of: Mozilla/Projects ---- -<p>{{ draft() }}</p> -<p>Below you'll find links to documentation about various Mozilla projects; these are often parts of Firefox or other products, but may also be used in other projects as well.</p> -<p>{{ LandingPageListSubpages() }}</p> diff --git a/files/ru/mozilla/projects/nss/nss_sample_code/index.html b/files/ru/mozilla/projects/nss/nss_sample_code/index.html deleted file mode 100644 index 2bc6d0e4fc..0000000000 --- a/files/ru/mozilla/projects/nss/nss_sample_code/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: NSS Sample Code -slug: Mozilla/Projects/NSS/NSS_Sample_Code -tags: - - Example - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Projects/NSS/NSS_Sample_Code ---- -<h2 id="NSS_Sample_Code">NSS Sample Code</h2> - -<p>The collection of sample code here demonstrates how NSS can be used for cryptographic operations, certificate handling, SSL, etc. It also demonstrates some best practices in the application of cryptography.</p> - -<p>Old samples in the process of being replaced.</p> - -<ol> - <li><a href="nss_sample_code/NSS_Sample_Code_Sample1">Sample Code 1: Key Generation and Transport Between Servers</a></li> - <li><a href="nss_sample_code/NSS_Sample_Code_sample2">Sample Code 2: Symmetric Encryption</a></li> - <li><a href="nss_sample_code/NSS_Sample_Code_sample3">Sample Code 3: Hashing, MAC</a></li> - <li><a href="nss_sample_code/NSS_Sample_Code_sample4">Sample Code 4: PKI Encryption</a></li> - <li><a href="nss_sample_code/NSS_Sample_Code_sample5">Sample Code 5: PKI Encryption with a raw public & private key in DER format</a></li> - <li><a href="nss_sample_code/NSS_Sample_Code_sample6">Sample Code 6: Persistent Symmetric Keys in NSS database</a></li> -</ol> - -<p><br> - These are very old examples in need of replacement. See <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=490238">https://bugzilla.mozilla.org/show_bug.cgi?id=490238</a></p> - -<p>You are welcome to download the new samples via:</p> - -<pre class="bz_comment_text" id="comment_text_42">hg clone https://hg.mozilla.org/projects/nss; cd nss; hg update SAMPLES_BRANCH -</pre> - -<p>The new samples: <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/New_NSS_Samples">https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/New_NSS_Samples</a></p> diff --git a/files/ru/mozilla/projects/nss/nss_sample_code/nss_sample_code_sample_2_initialization_of_nss/index.html b/files/ru/mozilla/projects/nss/nss_sample_code/nss_sample_code_sample_2_initialization_of_nss/index.html deleted file mode 100644 index d3a5983c84..0000000000 --- a/files/ru/mozilla/projects/nss/nss_sample_code/nss_sample_code_sample_2_initialization_of_nss/index.html +++ /dev/null @@ -1,255 +0,0 @@ ---- -title: NSS Sample Code Sample_2_Initialization of NSS -slug: >- - Mozilla/Projects/NSS/NSS_Sample_Code/NSS_Sample_Code_Sample_2_Initialization_of_NSS -tags: - - Example - - Mozilla firefox nss init - - NSS - - Security - - Инициализация NSS - - Пример -translation_of: >- - Mozilla/Projects/NSS/NSS_Sample_Code/NSS_Sample_Code_Sample_2_Initialization_of_NSS ---- -<h2 id="NSS_Sample_Code_2_Initializing_NSS">NSS Sample Code 2: Initializing NSS</h2> - -<p>Эта программа демонстрирует как инициализировать NSS Database. Так же эта программа иллюстрирует обработку пароля.</p> - -<h3 id="Пример_NSS_инициализации_и_обработки_пароля">Пример NSS инициализации и обработки пароля</h3> - -<pre>/* NSPR Заголовки*/ -#include <prthread.h> -#include <plgetopt.h> -#include <prprf.h> - -/* NSS Заголовки */ -#include <nss.h> -#include <pk11func.h> - -#include "util.h" - -// для того, чтобы русские буквы отображались корректно используйте setlocale(LC_ALL,"RUS") в main() :) - -/* Вывести сообщение о том, какая база данных используется и выйти */ -static void Usage(const char *progName) -{ - fprintf(stderr, "\nИспользуется: %s -d <dbdirpath> [-p <plainpasswc>]" - " [-f <passwdffile>]\n\n", - progName); - fprintf(stderr, "%-15s Укажите путь к каталогу базы данных\n\n", - "-d <dbdirpath>"); - fprintf(stderr, "%-15s Укажите незашифрованный пароль\n\n", - "-p <plainpasswc>"); - fprintf(stderr, "%-15s Укажите файл с паролями\n\n", - "-f <plainpasswc>"); - exit(-1); -} - -/* Инициализация пароля слота*/ -char *InitSlotPassword(PK11SlotInfo *slot, PRBool retry, void *arg) -{ - FILE *input; - FILE *output; - char *p0 = NULL; - char *p1 = NULL; - secuPWData *pwdata = (secuPWData *) arg; - - if (pwdata->source == PW_FROMFILE) { - return FilePasswd(slot, retry, pwdata->data); - } - if (pwdata->source == PW_PLAINTEXT) { - return PL_strdup(pwdata->data); - } - - /* Открыть терминал (linux)*/ - input = fopen("/dev/tty", "r"); - if (input == NULL) { - PR_fprintf(PR_STDERR, "Ошибка открытия терминала для чтения\n"); - return NULL; - } - - /* У нас нет паролей, давайте инициализируем базу данных*/ - PR_fprintf(PR_STDERR, - "Введите пароль который будет закодирован вашим ключом.\n" - "Пароль должен быть длиннее восьми символов ,\n" - "И содержать хотя бы одну букву из алфавита.\n\n"); - - output = fopen("/dev/tty", "w"); - if (output == NULL) { - PR_fprintf(PR_STDERR, "Ошибка открытия консоли для записи\n"); - return NULL; - } - - for (;;) { - if (p0) - PORT_Free(p0); - p0 = GetPassword(input, output, "Введите новый пароль: ", - CheckPassword); - if (p1) - PORT_Free(p1); - p1 = GetPassword(input, output, "Введите пароль повторно: ", - CheckPassword); - if (p0 && p1 && !PORT_Strcmp(p0, p1)) { - break; - } - PR_fprintf(PR_STDERR, "Пароли не совпадают. Попробуйте ещё раз.\n"); - } - - /* Убрать дубликат пароля из строки*/ - if (p1) { - PORT_Memset(p1, 0, PORT_Strlen(p1)); - PORT_Free(p1); - } - fclose(input); - fclose(output); - - return p0; -} - -/* Смена пароля */ -SECStatus ChangePW(PK11SlotInfo *slot, char *oldPass, char *newPass, - char *oldPwFile, char *newPwFile) -{ - SECStatus rv; - secuPWData pwdata; - secuPWData newpwdata; - char *oldpw = NULL; - char *newpw = NULL; - - if (oldPass) { - pwdata.source = PW_PLAINTEXT; - pwdata.data = oldPass; - } else if (oldPwFile) { - pwdata.source = PW_FROMFILE; - pwdata.data = oldPwFile; - } else { - pwdata.source = PW_NONE; - pwdata.data = NULL; - } - - if (newPass) { - newpwdata.source = PW_PLAINTEXT; - newpwdata.data = newPass; - } else if (newPwFile) { - newpwdata.source = PW_FROMFILE; - newpwdata.data = NULL; - } else { - newpwdata.source = PW_NONE; - newpwdata.data = NULL; - } - - if (PK11_NeedUserInit(slot)) { - newpw = InitSlotPassword(slot, PR_FALSE, &pwdata); - rv = PK11_InitPin(slot, (char*)NULL, newpw); - } - else { - for (;;) { - oldpw = GetModulePassword(slot, PR_FALSE, &pwdata); - - if (PK11_CheckUserPassword(slot, oldpw) != SECSuccess) { - if (pwdata.source == PW_NONE) { - PR_fprintf(PR_STDERR, "Invalid password. Try again.\n"); - } else { - PR_fprintf(PR_STDERR, "Invalid password.\n"); - PORT_Memset(oldpw, 0, PL_strlen(oldpw)); - PORT_Free(oldpw); - return SECFailure; - } - } else { - break; - } - PORT_Free(oldpw); - } - newpw = InitSlotPassword(slot, PR_FALSE, &newpwdata); - - if (PK11_ChangePW(slot, oldpw, newpw) != SECSuccess) { - PR_fprintf(PR_STDERR, "Не получилось изменить пароль.\n"); - return SECFailure; - } - PORT_Memset(oldpw, 0, PL_strlen(oldpw)); - PORT_Free(oldpw); - PR_fprintf(PR_STDOUT, "Пароль изменён успешно!.\n"); - } - PORT_Memset(newpw, 0, PL_strlen(newpw)); - PORT_Free(newpw); - return SECSuccess; -} - -/* - * Этот пример показывает как инициализировать nss базу данных. - * Он создаёт новую nss конфигурационную директорию с пустой базой данных - * и инициализирует базы данных. Так же он показывает методы - * для обработки пароля. - */ -int main(int argc, char **argv) -{ - PLOptState *optstate; - PLOptStatus status; - SECStatus rv; - SECStatus rvShutdown; - char *slotname = "internal"; - PK11SlotInfo *slot = NULL; - char *dbdir = NULL; - char *plainPass = NULL; - char *pwFile = NULL; - - char * progName = strrchr(argv[0], '/'); - progName = progName ? progName + 1 : argv[0]; - - /* Копирование аргументов командной строки */ - optstate = PL_CreateOptState(argc, argv, "d:p:q:f:g:"); - while ((status = PL_GetNextOpt(optstate)) == PL_OPT_OK) { - switch (optstate->option) { - case 'd': - dbdir = strdup(optstate->value); - break; - case 'p': - plainPass = strdup(optstate->value); - break; - case 'f': - pwFile = strdup(optstate->value); - break; - default: - Usage(progName); - break; - } - } - PL_DestroyOptState(optstate); - - if (!dbdir) - Usage(progName); - - PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0); - - /* Создать базу данных */ - rv = NSS_InitReadWrite(dbdir); - if (rv != SECSuccess) { - PR_fprintf(PR_STDERR, "NSS_Initialize Failed ( не получилось инициализировать nss )"); - PR_Cleanup(); - exit(rv); - } - - if (PL_strcmp(slotname, "internal") == 0) - slot = PK11_GetInternalKeySlot(); - - /* Если создаётся новая база данных, инициализируем пароль.*/ - rv = ChangePW(slot, plainPass, 0, pwFile, 0); - if (rv != SECSuccess) { - PR_fprintf(PR_STDERR, "Не получилось сменить пароль\n"); - } - - if (slot) { - PK11_FreeSlot(slot); - } - rvShutdown = NSS_Shutdown(); - if (rvShutdown != SECSuccess) { - PR_fprintf(PR_STDERR, "Failed : NSS_Shutdown() ( ошибка : выключение nss )\n"); - rv = SECFailure; - } - - PR_Cleanup(); - - return rv; -} -</plainpasswc></plainpasswc></dbdirpath></passwdffile></plainpasswc></dbdirpath></pk11func.h></nss.h></prprf.h></plgetopt.h></prthread.h></pre> diff --git a/files/ru/mozilla/projects/nss/reference/fc_login/index.html b/files/ru/mozilla/projects/nss/reference/fc_login/index.html deleted file mode 100644 index 5842a77b23..0000000000 --- a/files/ru/mozilla/projects/nss/reference/fc_login/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: FC_Login -slug: Mozilla/Projects/NSS/Reference/FC_Login -translation_of: Mozilla/Projects/NSS/Reference/FC_Login ---- -<p> -</p> -<h3 id="Name" name="Name"> Name </h3> -<p><code>FC_Login()</code> - log a user into a token. -</p> -<h3 id="Syntax" name="Syntax"> Syntax </h3> -<pre class="eval"><a href="en/CK_RV">CK_RV</a> FC_Login( - <a href="en/CK_SESSION_HANDLE">CK_SESSION_HANDLE</a> hSession, - <a href="en/CK_USER_TYPE">CK_USER_TYPE</a> userType, - <a href="en/CK_CHAR">CK_CHAR_PTR</a> pPin, - <a href="en/CK_ULONG">CK_ULONG</a> ulPinLen -); -</pre> -<h3 id="Parameters" name="Parameters"> Parameters </h3> -<p><code>FC_Login()</code> takes four parameters: -</p> -<dl><dt><code>hSession</code> -</dt><dd>{{ mediawiki.external('in') }} a session handle -</dd><dt><code>userType</code> -</dt><dd>{{ mediawiki.external('in') }} the user type (<code>CKU_SO</code> or <code>CKU_USER</code>) -</dd><dt><code>pPin</code> -</dt><dd>{{ mediawiki.external('in') }} a pointer that points to the user's PIN -</dd><dt><code>ulPinLen</code> -</dt><dd>{{ mediawiki.external('in') }} the length of the PIN -</dd></dl> -<h3 id="Description" name="Description"> Description </h3> -<p><code>FC_Login()</code> logs a user into a token. -</p><p>The Security Officer (<code>CKU_SO</code>) only logs in to initialize the normal user's PIN. The SO PIN is the empty string. The NSS cryptographic module doesn't allow the SO to log in if the normal user's PIN is already initialized. -</p> -<h3 id="Return_value" name="Return_value"> Return value </h3> -<p><code>FC_Login()</code> returns the following return codes. -</p> -<ul><li> <code>CKR_OK</code>: the user logged in successfully. -</li><li> <code>CKR_DEVICE_ERROR</code>: the token is in the Error state. -</li><li> <code>CKR_HOST_MEMORY</code>: memory allocation failed. -</li><li> <code>CKR_PIN_INCORRECT</code>: the PIN is incorrect. -</li><li> <code>CKR_PIN_LEN_RANGE</code>: the PIN is too long (<code>ulPinLen</code> is greater than 255).<div class="note">The function should return <code>CKR_PIN_INCORRECT</code> in this case.</div> -</li><li> <code>CKR_SESSION_HANDLE_INVALID</code>: the session handle is invalid. -</li><li> <code>CKR_USER_ALREADY_LOGGED_IN</code>: the user is already logged in. -</li><li> <code>CKR_USER_TYPE_INVALID</code> -<ul><li> The token can't authenticate the user because there is no key database or the user's password isn't initialized. -</li><li> <code>userType</code> is <code>CKU_SO</code> and the normal user's PIN is already initialized. -</li></ul> -</li></ul> -<h3 id="See_also" name="See_also"> See also </h3> -<ul><li> <a href="en/NSC_Login">NSC_Login</a> -</li></ul> -{{ languages( { "ja": "ja/FC_Login" } ) }} diff --git a/files/ru/mozilla/projects/nss/reference/index.html b/files/ru/mozilla/projects/nss/reference/index.html deleted file mode 100644 index fefd88af2a..0000000000 --- a/files/ru/mozilla/projects/nss/reference/index.html +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: NSS reference -slug: Mozilla/Projects/NSS/Reference -tags: - - NSS - - NeedsTranslation - - TopicStub -translation_of: Mozilla/Projects/NSS/Reference ---- -<p> </p> -<h3 id="Initial_Notes" name="Initial_Notes">Initial Notes</h3> -<div class="note"> - <ul> - <li>We are migrating the <a class="external" href="https://developer.mozilla.org/NSS/SSL_functions/OLD_SSL_Reference">SSL Reference</a> into the format described in the <a href="https://developer.mozilla.org/en-US/docs/Project:MDC_style_guide">MDN Style Guide</a>. If you are inclined to help with this migration, your help would be very much appreciated.</li> - </ul> - <ul> - <li>The proposed chapters below are based on the chapters of the <a class="external" href="https://developer.mozilla.org/NSS/SSL_functions/OLD_SSL_Reference">SSL Reference</a> and the categories of functions in <a class="external" href="/en/docs/NSS_functions" title="en/docs/NSS_functions">NSS Public Functions</a>.</li> - </ul> - <ul> - <li>Should a particular page require the use of an underscore, please see the documentation for the <a href="/Project:En/MDC_style_guide#Title_Override_Extension" title="Project:En/MDC_style_guide#Title_Override_Extension">Title Override Extension</a>.</li> - </ul> -</div> -<p> </p> -<h3 id="Building_and_installing_NSS" name="Building_and_installing_NSS"><a href="/en/NSS_reference/Building_and_installing_NSS" title="en/NSS_reference/Building_and_installing_NSS">Building and installing NSS</a></h3> -<h3 id="Overview_of_an_NSS_application" name="Overview_of_an_NSS_application">Overview of an NSS application</h3> -<p>Based on <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/SSL_functions/sslintro.html">"Overview of an SSL Application"</a> in the SSL Reference.</p> -<h3 id="Getting_started_with_NSS" name="Getting_started_with_NSS">Getting started with NSS</h3> -<p>Based on <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/SSL_functions/gtstd.html">"Getting Started With SSL"</a> in the SSL Reference.</p> -<h3 id="Data_types" name="Data_types">Data types</h3> -<p>Based on <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/SSL_functions/ssltyp.html">"Selected SSL Types and Structures"</a> in the SSL Reference.</p> -<h3 id="NSS_initialization_and_shutdown">NSS initialization and shutdown</h3> -<ul> - <li>NSS_Init</li> - <li>NSS_InitReadWrite</li> - <li>NSS_NoDB_Init</li> - <li><a href="/en/NSS_Initialize" title="en/NSS Initialize">NSS_Initialize</a></li> - <li>NSS_Shutdown</li> -</ul> -<h3 id="Utility_functions" name="Utility_functions">Utility functions</h3> -<p>Based on <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS_functions#Utility_functions">"Utility Functions"</a> in NSS Public Functions.</p> -<h3 id="Certificate_functions" name="Certificate_functions">Certificate functions</h3> -<p>Based on <a href="https://developer.mozilla.org/en-US/docs/NSS/SSL_functions/sslcrt.html">Certificate Functions</a> in the SSL Reference and <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS_functions#Certificate_functions">"Certificate Functions"</a> in NSS Public Functions.</p> -<ul> - <li><a href="/en/NSS_Certificate_Functions#Validating_Certificates" title="en/NSS_Certificate_Functions#Validating_Certificates">Validating Certificates</a> - <ul> - <li><a href="/en/NSS_Certificate_Functions#CERT_VerifyCertNow" title="en/NSS_Certificate_Functions#CERT_VerifyCertNow">CERT_VerifyCertNow</a></li> - <li><a href="/en/NSS_Certificate_Functions#CERT_VerifyCert" title="en/NSS_Certificate_Functions#CERT_VerifyCert">CERT_VerifyCert</a></li> - <li><a href="/en/NSS_Certificate_Functions#CERT_VerifyCertName" title="en/NSS_Certificate_Functions#CERT_VerifyCertName">CERT_VerifyCertName</a></li> - <li><a href="/en/NSS_Certificate_Functions#CERT_CheckCertValidTimes" title="en/NSS_Certificate_Functions#CERT_CheckCertValidTimes">CERT_CheckCertValidTimes</a></li> - <li><a href="/en/NSS_Certificate_Functions#NSS_CmpCertChainWCANames" title="en/NSS_Certificate_Functions#NSS_CmpCertChainWCANames">NSS_CmpCertChainWCANames</a></li> - </ul> - </li> - <li><a href="/en/NSS_Certificate_Functions#Manipulating_Certificates" title="en/NSS_Certificate_Functions#Manipulating_Certificates">Manipulating Certificates</a> - <ul> - <li><a href="/en/NSS_Certificate_Functions#CERT_DupCertificate" title="en/NSS_Certificate_Functions#CERT_DupCertificate">CERT_DupCertificate</a></li> - <li><a href="/en/NSS_Certificate_Functions#CERT_DestroyCertificate" title="en/NSS_Certificate_Functions#CERT_DestroyCertificate">CERT_DestroyCertificate</a></li> - <li>SEC_DeletePermCertificate</li> - <li>__CERT_ClosePermCertDB</li> - </ul> - </li> - <li><a href="/en/NSS_Certificate_Functions#Getting_Certificate_Information" title="en/NSS_Certificate_Functions#Getting_Certificate_Information">Getting Certificate Information</a> - <ul> - <li><a href="/en/NSS_Certificate_Functions#CERT_FindCertByName" title="en/NSS_Certificate_Functions#CERT_FindCertByName">CERT_FindCertByName</a></li> - <li><a href="/en/NSS_Certificate_Functions#CERT_GetCertNicknames" title="en/NSS_Certificate_Functions#CERT_GetCertNicknames">CERT_GetCertNicknames</a></li> - <li><a href="/en/NSS_Certificate_Functions#CERT_FreeNicknames" title="en/NSS_Certificate_Functions#CERT_FreeNicknames">CERT_FreeNicknames</a></li> - <li><a href="/en/NSS_Certificate_Functions#CERT_GetDefaultCertDB" title="en/NSS_Certificate_Functions#CERT_GetDefaultCertDB">CERT_GetDefaultCertDB</a></li> - <li><a href="/en/NSS_Certificate_Functions#NSS_FindCertKEAType" title="en/NSS_Certificate_Functions#NSS_FindCertKEAType">NSS_FindCertKEAType</a></li> - </ul> - </li> - <li><a href="/en/NSS_Certificate_Functions#Comparing_SecItem_Objects" title="en/NSS_Certificate_Functions#Comparing_SecItem_Objects">Comparing SecItem Objects</a> - <ul> - <li><a href="/en/NSS_Certificate_Functions#SECITEM_CompareItem" title="en/NSS_Certificate_Functions#SECITEM_CompareItem">SECITEM_CompareItem</a></li> - </ul> - </li> -</ul> -<h3 id="Key_functions" name="Key_functions">Key functions</h3> -<p><a href="/en/NSS_Key_Functions" title="en/NSS_Key_Functions">Key Functions</a></p> -<ul> - <li><a href="/en/NSS_Key_Functions#SECKEY_GetDefaultKeyDB" title="en/NSS_Key_Functions#SECKEY_GetDefaultKeyDB">SECKEY_GetDefaultKeyDB</a></li> - <li><a href="/en/NSS_Key_Functions#SECKEY_DestroyPrivateKey" title="en/NSS_Key_Functions#SECKEY_DestroyPrivateKey">SECKEY_DestroyPrivateKey</a></li> -</ul> -<h3 id="Digital_signatures" name="Digital_signatures">Digital signatures</h3> -<p>This API consists of the routines used to perform signature generation and the routines used to perform signature verification.</p> -<h3 id="Encryption.2Fdecryption" name="Encryption.2Fdecryption">Encryption/decryption</h3> -<h3 id="Hashing" name="Hashing">Hashing</h3> -<h3 id="Key_generation" name="Key_generation">Key generation</h3> -<p>Generate keys, key pairs, and domain parameters.</p> -<h3 id="Random_number_generation" name="Random_number_generation">Random number generation</h3> -<p>This API consists of the two routines used for pseudorandom number generation -- PK11_GenerateRandomOnSlot and PK11_GenerateRandom -- and the two routines used for seeding pseudorandom number generation -- PK11_SeedRandom and PK11_RandomUpdate.</p> -<h3 id="PKCS_.2311_functions" name="PKCS_.2311_functions">PKCS #11 functions</h3> -<p>Based on <a href="https://developer.mozilla.org/en-US/docs/NSS/SSL_functions/pkfnc.html">PKCS #11 Functions</a> in the SSL Reference and <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS_functions#Cryptography_functions">"Crypto Functions"</a> in NSS Public Functions.</p> -<ul> - <li><a href="/en/NSS_PKCS11_Functions#SECMOD_LoadUserModule" title="en/NSS_PKCS11_Functions#SECMOD_LoadUserModule">SECMOD_LoadUserModule</a></li> - <li><a href="/en/NSS_PKCS11_Functions#SECMOD_UnloadUserModule" title="en/NSS_PKCS11_Functions#SECMOD_UnloadUserModule">SECMOD_UnloadUserModule</a></li> - <li><a href="/en/NSS_PKCS11_Functions#SECMOD_CloseUserDB" title="en/NSS_PKCS11_Functions#SECMOD_CloseUserDB">SECMOD_CloseUserDB</a></li> - <li><a href="/en/NSS_PKCS11_Functions#SECMOD_OpenUserDB" title="en/NSS_PKCS11_Functions#SECMOD_OpenUserDB">SECMOD_OpenUserDB</a></li> - <li><a href="/en/NSS_PKCS11_Functions#PK11_FindCertFromNickname" title="en/NSS_PKCS11_Functions#PK11_FindCertFromNickname">PK11_FindCertFromNickname</a></li> - <li><a href="/en/NSS_PKCS11_Functions#PK11_FindKeyByAnyCert" title="en/NSS_PKCS11_Functions#PK11_FindKeyByAnyCert">PK11_FindKeyByAnyCert</a></li> - <li><a href="/en/NSS_PKCS11_Functions#PK11_GetSlotName" title="en/NSS_PKCS11_Functions#PK11_GetSlotName">PK11_GetSlotName</a></li> - <li><a href="/en/NSS_PKCS11_Functions#PK11_GetTokenName" title="en/NSS_PKCS11_Functions#PK11_GetTokenName">PK11_GetTokenName</a></li> - <li><a href="/en/NSS_PKCS11_Functions#PK11_IsHW" title="en/NSS_PKCS11_Functions#PK11_IsHW">PK11_IsHW</a></li> - <li><a href="/en/NSS_PKCS11_Functions#PK11_IsPresent" title="en/NSS_PKCS11_Functions#PK11_IsPresent">PK11_IsPresent</a></li> - <li><a href="/en/NSS_PKCS11_Functions#PK11_IsReadOnly" title="en/NSS_PKCS11_Functions#PK11_IsReadOnly">PK11_IsReadOnly</a></li> - <li><a href="/en/NSS_PKCS11_Functions#PK11_SetPasswordFunc" title="en/NSS_PKCS11_Functions#PK11_SetPasswordFunc">PK11_SetPasswordFunc</a></li> -</ul> -<h3 id="SSL_Functions" name="SSL_Functions">SSL Functions</h3> -<p>Based on <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/SSL_functions/sslfnc.html">"SSL Functions"</a> in the SSL Reference and <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS_functions#SSL_functions">"SSL Functions"</a> and <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS_functions#Deprecated_SSL_functions">"Deprecated SSL Functions"</a> in NSS Public Functions.</p> -<ul> - <li>SSL_ConfigServerSessionIDCache</li> - <li>SSL_ClearSessionCache</li> -</ul> -<h3 id="S.2FMIME" name="S.2FMIME">S/MIME</h3> -<p>Based on the <a class="external" href="http://www-archive.mozilla.org/projects/security/pki/nss/ref/smime/">S/MIME Reference</a> (which only has one written chapter) and <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS_functions#S.2FMIME_functions">"S/MIME Functions"</a> in NSS Public Functions.</p> -<h3 id="PKCS_.237_functions" name="PKCS_.237_functions">PKCS #7 functions</h3> -<p>Based on <a class="external" href="http://www-archive.mozilla.org/projects/security/pki/nss/ref/nssfunctions.html#pkcs7">"Archived PKCS #7 Functions documentation."</a></p> -<h3 id="PKCS_.235_functions" name="PKCS_.235_functions">PKCS #5 functions</h3> -<p>Password-based encryption</p> -<ul> - <li>SEC_PKCS5GetIV</li> - <li>SEC_PKCS5CreateAlgorithmID</li> - <li>SEC_PKCS5GetCryptoAlgorithm</li> - <li>SEC_PKCS5GetKeyLength</li> - <li>SEC_PKCS5GetPBEAlgorithm</li> - <li>SEC_PKCS5IsAlgorithmPBEAlg</li> -</ul> -<h3 id="PKCS_.2312_functions" name="PKCS_.2312_functions">PKCS #12 functions</h3> -<p>Based on <a class="external" href="http://www-archive.mozilla.org/projects/security/pki/nss/ref/nssfunctions.html#pkcs12">"Archived PKCS #12 Functions documentation."</a> Used to exchange data such as private keys and certificates between two parties.</p> -<ul> - <li>SEC_PKCS12CreateExportContext</li> - <li>SEC_PKCS12CreatePasswordPrivSafe</li> - <li>SEC_PKCS12CreateUnencryptedSafe</li> - <li>SEC_PKCS12AddCertAndKey</li> - <li>SEC_PKCS12AddPasswordIntegrity</li> - <li>SEC_PKCS12EnableCipher</li> - <li>SEC_PKCS12Encode</li> - <li>SEC_PKCS12DestroyExportContext</li> - <li>SEC_PKCS12DecoderStart</li> - <li>SEC_PKCS12DecoderImportBags</li> - <li>SEC_PKCS12DecoderUpdate</li> - <li>SEC_PKCS12DecoderFinish</li> - <li>SEC_PKCS12DecoderValidateBags</li> - <li>SEC_PKCS12DecoderVerify</li> - <li>SEC_PKCS12DecoderGetCerts</li> - <li>SEC_PKCS12DecoderSetTargetTokenCAs</li> - <li>SEC_PKCS12DecoderIterateInit</li> - <li>SEC_PKCS12DecoderIterateNext</li> - <li>SEC_PKCS12IsEncryptionAllowed</li> - <li>SEC_PKCS12SetPreferredCipher</li> -</ul> -<h3 id="NSPR_functions" name="NSPR_functions"><a href="/En/NSS_reference/NSPR_functions" title="en/NSS_reference/NSPR_functions">NSPR functions</a></h3> -<p>A small number of NSPR functions are required for using the certificate verification and SSL functions in NSS. These functions are listed in this section.</p> -<h3 id="Error_codes" name="Error_codes">Error codes</h3> -<p>Based on <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/SSL_functions/sslerr.html">"NSS and SSL Error Codes"</a> in the SSL Reference.</p> -<h3 id="NSS_Environment_variables" name="NSS_Environment_variables"><a href="/en/NSS_reference/NSS_environment_variables" title="en/NSS_reference/NSS_environment_variables">NSS Environment variables</a></h3> -<h3 id="NSS_cryptographic_module" name="NSS_cryptographic_module"><a href="/en/NSS_reference/NSS_cryptographic_module" title="en/NSS_reference/NSS_cryptographic_module">NSS cryptographic module</a></h3> -<h3 id="NSS_Tech_Notes" name="NSS_Tech_Notes">NSS Tech Notes</h3> -<p><a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/NSS_Tech_Notes">NSS Tech Notes</a> <a href="/en/NSS_Memory_allocation" title="en/NSS_Memory_allocation">NSS Memory allocation</a></p> -<h3 id="Tools" name="Tools">Tools</h3> -<p>Based on <a class="external" href="https://developer.mozilla.org/en-US/docs/NSS/Tools">NSS Tools</a> documentation.</p> -<p>Based on <a class="extarnal" href="/en/NSS_reference/NSS_tools" title="en/NSS_reference/NSS_tools">NSS Tools Man Pages : work in progress</a></p> -<p>{{ languages( { "ja": "ja/NSS_reference" } ) }}</p> diff --git a/files/ru/mozilla/projects/webreplay/index.html b/files/ru/mozilla/projects/webreplay/index.html deleted file mode 100644 index 62f0a521d3..0000000000 --- a/files/ru/mozilla/projects/webreplay/index.html +++ /dev/null @@ -1,217 +0,0 @@ ---- -title: WebReplay -slug: Mozilla/Projects/WebReplay -translation_of: Mozilla/Projects/WebReplay ---- -<p>Web Replay --- это проект, позволяющий процессам содержимого Firefox записывать свое поведение, проигрывать его позже и перематывать до предыдущего состояния. Проигрываемые процессы сохранаяют все то же поведение JS, структуру DOM, изменения графики и большую часть других процессов, возникающих во время записи. Браузерный JS-дебагер может быть использован для инспектирования и контроля проигрывания. На данный момент поддерживается только для macOS.</p> - -<p>Web Replay сейчас находится только в ночной сборке. Он отключен по умолчанию, пока не будет стабилизирован, но может быть включен с помощью devtools.recordreplay.enabled опции. Функция доступна через Tools -> Web Developer меню и с помощью нового интерфейса дебагера доступна при просмотре вкладки записи/проигрывания. Она все еще на стадии pre-alpha, но мы будем рады услышать ваш фидбек в #rr в Slackе или оставьте репорт об ошибке в Bugzilla для Core::WebReplay компоненты.</p> - -<p>Существующите и планируеные функции представлены <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/WebReplayRoadmap">тут</a>.</p> - -<h2 id="Архитектура">Архитектура</h2> - -<p>Проект состоит из нескольких основных частей:</p> - -<ol> - <li>Инфраструктура записи/проигрывания записывает достаточно информации во время записи, чтобы процесс проигрывания мог быть запущен и воспроизведен с тем же наблюдаемым поведением.</li> - <li>Интеграция с IPC позволяет процессу проигрывания коммуницировать с процессом chrome с помощью IPDL и разделенной памяти.</li> - <li>Инфраструктура перемотки позволяет проигрывать процесс, чтобы восстановить предыдущее состояние, все еще поддерживая общение с процессом chrome.</li> - <li>Интеграция с дебагером позволяет дебагеру JS считывать необходимую для него информацию от процесса проигрывания и контролировать выполнение обработки (продолжение/перемотка). Дебагеру не разрешено менять наблюдаемое состояние процесса проигрывания.</li> -</ol> - -<h3 id="Recordreplay_infrastructure">Record/replay infrastructure</h3> - -<p>Broadly, reliable record/replay is achieved by controlling for non-determinism in the browser. This non-determinism originates from two sources: intra-thread and inter-thread. Intra-thread non-deterministic behaviors are non-deterministic even in the absence of actions by other threads, and inter-thread non-deterministic behaviors are those affected by interleaving execution with other threads, and which always behave the same given the same interleaving.</p> - -<p>Intra-thread non-determinism is recorded and later replayed for each thread. These behaviors mainly originate from system calls (i/o and such).</p> - -<p>Inter-thread non-determinism is handled by first assuming the program is data race free: shared memory accesses which would otherwise race are either protected by locks or use APIs that perform atomic operations. If we record and later replay the order in which threads acquire locks (and, by extension, release locks and use condvars) then accesses on lock-protected memory will occur in the same order. Atomic variables can be handled by treating reads and writes as if they were wrapped by a lock acquire/release during recording.</p> - -<p>It is not enough, however, to just record all these non-deterministic sources and reproduce those behaviors exactly in the replaying process. The IPC and debugger integration components may behave differently between recording and replaying, or between different replays. Both of these involve inter-thread communication and calls to non-deterministic APIs, and the resulting non-determinism must be allowed within the replaying process.</p> - -<h4 id="Allowed_Non-determinism">Allowed Non-determinism</h4> - -<p>There is some slop in this design: The replaying process must be non-deterministic enough that the IPC and debugger components work, but not so non-deterministic that observable behaviors are affected. We resolve this slop by minimizing the tolerated non-determinism: The replaying process must be just non-deterministic enough that the IPC and debugger components work. In practice, non-deterministic replay is allowed in the following areas:</p> - -<ol> - <li>Heap allocations can be performed by the IPC and debugger components and so can differ between recording and replay.</li> - <li>JS compilations and some other internal state are affected by the debugger's presence and which hooks/breakpoints are active, and so can differ between recording and replay.</li> - <li>The debugger can allocate GC things, and allocation of other GC things can differ in the debugger's presence. For example, script compilation involves GC thing allocation, and observing changes in an object will change its shape.</li> -</ol> - -<p>Relaxing non-determinism here has a number of ripple effects in other areas. Mainly, pointer values may differ between recording and replay, and the points where GCs occur, and the set of objects collected, may differ. This non-determinism is prevented from spreading too far with the following techniques:</p> - -<ol> - <li>Different pointer values can affect the internal layout of hash tables. To prevent this from having an effect on iteration order (and execution behavior) in the table, the main table classes (for now PLHashTable and PLDHashTable) are instrumented so that they always iterate over elements in the order they were added when recording or replaying.</li> - <li>Differing GC behavior can cause object finalizers to run at different times. To prevent this from having an effect on execution behavior, GC finalizers which can affect the recording are instrumented so that the finalizer action is performed at the same time in the replay as it was during the recording. Even if the associated JS object has not been destroyed yet during the replay, it will never be used again because at this point in the recording it has been finalized.</li> - <li>Similarly, GC behavior can cause values read from weak pointers to differ between recording and replay. If this difference can affect the recording, the weak pointer must be instrumented so that during replay it holds onto its target for the same duration it was held while recording.</li> -</ol> - -<h4 id="Recording">Recording</h4> - -<p>A recording content process differs from a normal content process in the following ways:</p> - -<ol> - <li>Calls to certain functions are intercepted by hooking them (rewriting the machine code at their entry points to call a different function with the same signature), including the function used to dispatch mach messages. When a call or message is intercepted, the wrapped call/message is first performed normally and then it and its outputs are recorded in a data stream for the thread performing the call. During execution of the wrapped call/message, recording of any inner calls is suppressed, so that they are performed normally without affecting the recording. The functions which are intercepted are generally at the system call and the system library level. In general, any function which is not compiled as part of Gecko is fair game.</li> - <li>Acquisition order of locks is recorded in a data stream for each lock. Some locks which are associated with non-deterministic components are not recorded, such as the JS GC and helper threads locks.</li> - <li>Accesses on atomic variables/fields are recorded in a global data stream, as if they were all protected by a global lock. Some atomics are related to non-deterministic components and are excluded from this stream.</li> - <li>Threads use file descriptors to wait on locks and notify each other, instead of using the native implementation for locking and condition variables. At least on Mac, pthreads locks/cvars seem to use a mix of process-local and kernel state, and sometimes don't work correctly after rewinding the process.</li> - <li>Some behaviors are changed to simplify recording, in ways that should not affect observable behaviors. For example, incremental GCs (a non-deterministic component) work by posting events to the main thread (a deterministic component), so for now incremental GCs are disabled. Many of these behavioral changes should eventually be removable.</li> - <li>Graphics rendering is entirely local to the content process. Instead of communicating via IPC with a Compositor in the UI process, there is a Compositor in the recording process itself which performs the rendering.</li> - <li>Some additional instrumentation is performed, per the 'Allowed Non-determinism', section above.</li> - <li>The IPC, rewind, and debugger components are all active while recording. These spawn a number of threads which do not participate in the recording: any events they execute are live. See the sections below for details on how these affect the process' behavior.</li> -</ol> - -<p>To make it easier to ensure that the non-deterministic components do not have an effect on recorded behavior, certain code regions can be marked as disallowing events --- while executing them no thread, lock, or atomic events should be recorded. This is done in code associated with the non-deterministic components, such as during GC or Ion compilation, to help track down behaviors that should go unrecorded.</p> - -<h4 id="Replaying">Replaying</h4> - -<p>A replaying content process behaves in the same way as a recording process, except for the following:</p> - -<ol> - <li>The calls and mach messages which were intercepted during recording are also intercepted here. When a call/message is intercepted, the wrapped call/message is <strong>not</strong> performed, but rather the results of the call/message are read from the data stream and returned to the caller, emulating the behavior of the call/message. This requires the process to be deterministic enough that events play out in the same order on each thread between recording and replay. The data stream should have enough error checking in place that we can immediately detect if the replay has gone out of sync with the recording.</li> - <li>The recorded data streams which specify the acquisition order for each lock are read from and used so that locks are acquired in the same order. When a thread tries to acquire a lock, it first waits until it is next in line to do so.</li> - <li>Similarly, atomic accesses which were included in the recording will occur in the same order during replay, as if they were all protected by a single global lock. Note that while this could potentially be a big drag on performance during both replay and recording, many of the hottest atomics (refcounts, GC counters, and so forth) are associated with non-deterministic components and are not recorded.</li> -</ol> - -<h3 id="IPC_integration">IPC integration</h3> - -<p>Communication between the chrome process and a recording or replaying process --- hereafter referred to as the child process --- is managed via a separate middleman content process. The child process is extended so that it can communicate with the middleman, using a special bidirectional channel and messages separate from IPDL state.</p> - -<h4 id="Middleman_process">Middleman process</h4> - -<p>The middleman is the same as a normal content process, except that it spawns and communicates with the child process, and avoids creating any documents itself. Using the middleman provides the following advantages:</p> - -<ol> - <li>IPDL communication is greatly simplified. The chrome and middleman processes communicate using the standard browser protocols (PContent, PBrowser, etc.) and implementations for their actors, while the middleman and child processes communicate with their own channel and messages, which is tuned to the demands of the recording/replaying process.</li> - <li>The middleman can perform actions that would be extremely difficult to manage in a replaying process without going out of sync with the recording. This mainly includes running devtools content-side scripts.</li> - <li>The middleman can spawn multiple child processes at once, and coordinate their behavior so they run in parallel. There can be up to one recording child and two replaying children at once. The advantage of spawning both recording and replaying children is that by switching between different children the middleman can effectively rewind a live recording, then play forward and allow the user to resume interacting with the tab after they have finished inspecting state in the past. The advantage of using two replaying processes is to provide a smoother experience when rewinding.</li> -</ol> - -<h4 id="Recordingreplaying_process_extensions">Recording/replaying process extensions</h4> - -<p>During initialization the child process spawns a thread that does not participate in the recording --- any IPC or other system calls it performs are live, even when replaying. This thread sends and receives messages from the middleman.</p> - -<p>Messages describe actions the child process is able to do independently from the recording; currently this includes sending graphics updates, taking and restoring process snapshots, and responding to debugger requests.</p> - -<h3 id="Rewinding_infrastructure">Rewinding infrastructure</h3> - -<p>A child process can be rewound to an earlier state in response to a message from the middleman. After a recording process rewinds, it becomes a replaying process. Rewinding happens by periodically taking memory snapshots during execution, and then later restoring them. Care must be taken for efficiency when taking/restoring snapshots and for managing system resources when restoring.</p> - -<h4 id="Snapshots">Snapshots</h4> - -<p>Late in process initialization the first snapshot is taken, which is simply a copy of the stacks/registers for each thread. Each subsequent snapshot includes copies of thread stacks/registers as well as a diff containing the original contents of all pages of heap and static memory that were modified since the previous snapshot. Certain memory regions are excluded from snapshots; these memory regions are allocated with a special API and are used for state that needs to be preserved when rewinding. Snapshot data may be stored in memory or on disk. Diffs are computed by first setting up an exception handler thread (mac only) very similar to the one used by asm.js. When taking the first snapshot all addressable memory in the process is enumerated and write-protected, and as faults occur a special exception handler thread unprotects the memory, copies its contents and marks it as dirty. When the next snapshot is taken, only the dirty memory is examined for any changes vs. the copy made.</p> - -<p>This mechanism requires intercepting mmap (or similar low level allocation functions) so that any newly addressable memory is known --- anonymous mappings would not otherwise be intercepted or included in the recording, as heap allocation is non-deterministic while replaying. mprotect is intercepted and nop'ed to avoid interference with the dirty memory mechanism, and munmap is intercepted with no actual unmapping performed, so that memory does not need to be remapped when restoring a snapshot (a set of free regions is maintained to allow reusing this memory).</p> - -<p>All snapshots are taken from the main thread. Before taking the snapshot, all threads participating in the recording must enter an idle state, waiting on a thread-specific condition variable. Threads enter this state whenever they are waiting to acquire a lock or perform an atomic action that is part of the recording. While recording, threads may make blocking calls to libraries (e.g. kevent). To allow these threads to be snapshotted, the call is instead performed on a separate thread that does not participate in the recording, so that the calling thread may enter the correct idle state even while its progress is blocked on the call completing. Once all thread are idle, the main thread computes the memory diff, reads the stacks from each thread and their register state (which each thread recorded by calling setjmp before idling).</p> - -<p>Restoring snapshots is also done from the main thread. As for taking a snapshot, all other threads enter an idle state. The dirty memory information computed since the last snapshot was taken is used to restore the heap to the state at that last snapshot, and then the memory diffs can be used to restore an earlier snapshot if necessary. Threads are individually responsible for restoring their stacks; when they wake up from the idle state they see the main thread has prepared a new stack to restore to, so they longjmp to the new register state and copy in the new stack's contents.</p> - -<h4 id="Managing_system_resources">Managing system resources</h4> - -<p>When the child process restores a snapshot, the state of any system resources it has open is unchanged. Care must be taken to make sure these resources are coherent to the process after the restore completes. This is done in the following ways:</p> - -<ol> - <li>Instead of creating or destroying threads on demand, while recording/replaying all threads which will be needed are created during process initialization. If during the recording the content tries to create more threads than were spawned up front, then the recording fails. These threads idle until the recording/replaying content tries to 'create' them, then they run their main function, and after completing it will idle indefinitely. This ensures that no matter when we create or restore a snapshot, the same set of threads will exist and will have consistent stacks locations.</li> - <li>Locks and condition variables are to some extent system resources, and to avoid problems we make sure each thread is waiting on a consistent variable when saving or restoring a snapshot (see section above).</li> - <li>IPC integration uses a file descriptor for communicating with the middleman. This is left alone when restoring a snapshot, so whenever saving or restoring a snapshot they should be in a consistent state for the child process. Constraints are used for when messages may be sent between the middleman and child process, ensuring that the middleman process cannot send a message at a time when the child process may be rewinding.</li> -</ol> - -<h3 id="Debugger_integration">Debugger integration</h3> - -<p>When debugging a normal content process, the devtools JS debugger runs quite a bit of JS code in the content process, communicating with the chrome process primarily through streams of JSON data. When debugging a child content process, this JS code runs in the middleman process. When the code creates a Debugger object, that Debugger provides information about the child process rather than the current (middleman) process. While the Debugger can indicate it is for a child process, the interface should be as transparent as possible to the devtools JS code; the Debugger can still create script/object/etc. debug objects, which refer to specific things in the child process.</p> - -<p>As with the devtools JS code, this Debugger lives in the middleman process, and instead of wrapping things from another compartment the debug objects hold heap structures with information about some thing in the child process. The Debugger can explore the heap by sending messages to the child process to fill in the contents of the debug objects it creates. Whenever the Debugger is interacting with the child process the child process is paused at some point in execution, and the contents of the debug objects are only valid until the middleman notifies the child process that it can resume forward execution or must rewind to an earlier snapshot. When the child process pauses again (at a breakpoint, say) the debug objects must be reconstructed.</p> - -<p>There is an exception to this, for scripts and script source objects; debug objects for these will continue to hold the same referent after resuming or rewinding the replaying process. This is necessary for script breakpoints to work, and is implemented by ensuring that the ordering of creation of scripts and script sources is deterministic (mainly by disabling off thread parsing, which is one of the behavior changes during recording/replay).</p> - -<p>The user's interface to the devtools for a child process is the same as for a normal content process, except that new UI buttons are added for rewinding (find the last time a breakpoint was hit), and for reverse step/step-in/step-out. For now only JS state can be inspected by the debugger, though extending this to cover DOM inspection and other devtools features should not be too hard.</p> - -<h2 id="Unrecordable_executions">Unrecordable executions</h2> - -<p>There are restrictions on the executions that can be recorded. These should all be detectable during recording, so that we don't attempt to replay an execution we know will not match up with the recording. The following executions run into fundamental limits of the approach and cannot be replayed:</p> - -<ol> - <li>Executions which throw overrecursion JS exceptions can't be reliably replayed; overrecursion happens at different times depending on how scripts are compiled, which can vary between recording and replaying.</li> - <li>Similarly, executions which run out of memory at some point can't be reliably replayed.</li> - <li>Executions which are stopped at some point by the slow script dialog can't be reliably replayed. Keeping track of the exact point where an interrupt occurred would require quite a bit of recording overhead, and it doesn't seem worth it to try to do this.</li> -</ol> - -<p>The following executions are unlikely to be supported by the initial release, but should be able to be handled at some point in the future:</p> - -<ol> - <li>On x64, asm.js code relies on mprotect to handle out of bounds heap accesses; mprotect works differently while replaying, so some cooperation will be needed between the asm.js exception handler and the dirty memory exception handler.</li> - <li>Shared array buffers can be used by web content to introduce data races to the browser on the contents of those buffers, going against a fundamental assumption of the record/replay infrastructure. Recording and replaying executions using these buffers will require new techniques like treating all accesses on the buffers as atomic (probably unacceptable overhead) or performing all accesses on the buffer on a single core and keeping track of context switches.</li> - <li>DOM workers are not supported yet. For simplicity, debugger integration is currently only able to handle JS code that runs on the main thread.</li> - <li>WebGL is not supported yet, as it uses a pretty different rendering path from normal web content.</li> - <li>Media elements are not supported yet, as many of these run third party multithreaded code which hasn't been tested with the infrastructure.</li> -</ol> - -<h2 id="Porting">Porting</h2> - -<p>Almost all implementation work so far has been on macOS. Windows port work is underway, but is not yet working. The difficulties are in figuring out the set of system library APIs to intercept, in getting the memory management and dirty memory parts of the rewind infrastructure to work, and in handling the different graphics and IPC pathways on different platforms.</p> - -<h2 id="Comparison_with_other_projects">Comparison with other projects</h2> - -<p>There is lots of existing work in this area. The closest projects are <a href="http://rr-project.org/">rr</a>, WebKit's <a href="https://trac.webkit.org/wiki/WebReplayMechanics">replay project</a>, and Microsoft's <a href="https://channel9.msdn.com/blogs/Marron/Time-Travel-Debugging-for-JavaScriptHTML">Time-Travel Debugger</a>. Compared to rr:</p> - -<ol> - <li>This should work on all platforms and architectures supported by Gecko, though with substantial port work required.</li> - <li>This will be part of Gecko itself, rather than a separate tool, which means both that developers won't need additional software to use it and that this can't be used to debug other software.</li> - <li>This can use multiple cores during recording and replay.</li> - <li>This does not preserve exact behavior. Context switches can occur at different times and data races can lead to different behavior between recording and replay. Data races are bugs in and of themselves, however, so this sort of non-determinism should be fixed regardless.</li> - <li>This design allows the replaying process to behave differently from the recording process, which allows for a fairly straightforward implementation of IPC and Debugger integration.</li> -</ol> - -<p>Microsoft's and WebKit's replay projects operate at a higher level than rr. Inputs to the browser and non-deterministic behaviors are recorded so that they can be replayed later. In Microsoft's project the abstraction layer appears to be the boundary between the JS engine and the rest of the browser, while in WebKit's project the layer appears to be at internal WebKit APIs that can cause JS to run or the behavior of JS code to vary.</p> - -<p>Broadly, all of these projects sit on a spectrum: at what level is the boundary between components whose behavior is recorded and the rest of the system? rr records all behavior in the user space of a process; the boundary is the system calls which are made into the kernel. This project records all behavior outside of system library calls which the process makes, with exceptions carved out for the allowed non-determinism and for draw targets. Microsoft's and WebKit's projects record a smaller subset of the browser's behavior.</p> - -<p>This project is at a good point on this spectrum. Compared to a higher level project, this is able to operate on stable, thoroughly documented library APIs. By focusing on intercepting these APIs, browser instrumentation, recording overhead, and the maintenance burden going forward are all minimized. Compared to a lower level project, this is able to tolerate more non-determinism. All code whose behavior is recorded is compiled into Gecko (rather than being part of immutable, usually closed-source libraries) and can be lightly modified to deal with behaviors that function intercepting cannot handle, such as varying hash table layouts and the ordering of atomic accesses.</p> - -<h2 id="Appendix_Debugger_Details">Appendix: Debugger Details</h2> - -<p>Here is some more detailed information about how a recording/replaying process affects the debugger, and options for future improvements.</p> - -<h4 id="Debugger_changes">Debugger changes</h4> - -<p>From the perspective of a devtools server, debugging a recording/replaying process is very similar to debugging a live process. When execution is paused, the Debugger JS object and its various child objects can be used to inspect the execution state in the same way for a either kind of process. Here are the main differences:</p> - -<ol> - <li>Explicit commands must be sent to the debugger to control execution. The replayResumeBackward() and replayResumeForward() members may be called to resume execution, and the replayPause() member may be called to pause execution at the next opportunity. A child process can only pause at breakpoints and at snapshot points (currently these only happen when graphics updates are performed, at which point there is no JS on the stack).</li> - <li>There is a new onPopFrame handler, which is needed when doing reverse-step-in operations.</li> - <li>Operations on the debuggee which require interaction with the system will fail. These operations may be property accesses, evals, or object calls, and an example is accessing the "font" property of a CanvasRenderingContext2D. Failed operations currently just produce a placeholder "INCOMPLETE" result.</li> - <li>Operations on the debuggee which have side effects --- eval("x.f = 3") --- should be avoided. When the process resumes forward or backward these side effects will be lost (the process reverts to its original state) and while paused at a breakpoint these effects can cause some strange behavior --- after the above eval, getting the x.f property directly could produce a different value from eval("x.f"). While the strange behavior could be fixed (it's due to caching) it would be good to prevent or at least discourage users from performing such effectful operations.</li> - <li>The underlying object of a Debugger.Object is inaccessible; object.unsafeDereference is null.</li> - <li>As described above under "Debugger integration", child objects besides scripts and script sources become invalid when the debugger resumes execution, and must be reconstructed each time the replaying process pauses.</li> -</ol> - -<h4 id="Inspecting_a_replaying_process">Inspecting a replaying process</h4> - -<p>Access to JS objects in the replaying process is currently only done through the JS Debugger interface --- Debugger.Object, Debugger.Frame.eval, and so forth. This interface overlays a separate implementation from the C++ Debugger, implemented in devtools/server/actors/replay/debugger.js. This communicates with the replaying process via JSON and is fairly easy to extend for new features (such as web console support).</p> - -<h2 id="Appendix_Impacts_on_Gecko_Development">Appendix: Impacts on Gecko Development</h2> - -<p>Web replay is designed to minimize the places where other parts of Gecko need to know about it or interact with it. There are, however, areas where Gecko development is impacted by Web Replay. This section describes the main areas where ongoing development can break Web Replay and cause its tests to fail. needinfo? :bhackett on Bugzilla with any questions or concerns.</p> - -<p>On treeherder, Web Replay tests currently only run on MacOS opt builds, and are prefixed with browser_dbg_rr.</p> - -<h4 id="Calls_to_new_library_functions">Calls to new library functions</h4> - -<p>Most non-deterministic behaviors in a recorded/replayed process are captured by redirecting the system library functions which the process calls into --- rewriting their machine code so they invoke a record/replay specific function with the same signature, which records any results of the function and then replays those results later without actually invoking the underlying library function. Redirected functions include both low level system call wrappers like sendmsg/recvmsg, and higher level functions such as various Cocoa interfaces. The list of redirected functions can be found in toolkit/recordreplay/ProcessRedirectDarwin.cpp.</p> - -<p>When calls are added to Gecko for new system library functions, those functions may need redirections. In general, redirections are needed for any function that is (a) not compiled as part of Gecko, and either (b) may behave differently between recording and replaying, or (c) depends on data produced by other redirected functions (for example, CoreFoundation types like CFArrayRef and CFStringRef). A simpler way of telling that a redirection is needed for a function is that the web replay tests crash inside it while replaying.</p> - -<p>New redirections can be added to toolkit/recordreplay/ProcessRedirectDarwin.cpp, adding just a few lines for functions with simple interfaces using the various RRFunction macros. Missing redirections can also be temporarily worked around by avoiding the call when mozilla::recordreplay::IsRecordingOrReplaying().</p> - -<h4 id="Recording_events_in_disallowed_areas">Recording events in disallowed areas</h4> - -<p>GC marking and finalization may behave differently when recording and replaying, and recording events for a thread --- calling redirected library functions, using recorded locks or recorded atomics --- is disallowed at these times. There are some other areas where recorded events are also disallowed, such as during JS interrupt callbacks. Recording an event in one of these areas will fail a !AreThreadEventsDisallowed() assertion.</p> - -<p>These failures usually result from accessing a recorded lock or atomic. Core xpcom and mozglue lock classes and mozilla::Atomic atomics are recorded by default, but many locks and atomics don't actually need to be recorded in order to correctly replay. Recording for a lock or atomic can be turned off by specifying recordreplay::Behavior::DontPreserve in either the lock's contructor argument or the atomic's template arguments.</p> - -<h4 id="Interactions_with_the_middleman_process">Interactions with the middleman process</h4> - -<p>When recording or replaying an execution, there is an extra content process involved, the middleman process as described above. The presence of the middleman requires special handling in IPC internals and some graphics code. Additionally, IPC channels used to communicate with middleman processes can also communicate with the recording process child of the middleman. Problems can happen if IPDL actors for a protocol are setup by both the recording and middleman processes, while the UI process only expects to see one such actor. The usual solution here is to avoid setting up the actor in the middleman process, when mozilla::recordreplay::IsMiddleman().</p> diff --git a/files/ru/mozilla/setting_up_an_update_server/index.html b/files/ru/mozilla/setting_up_an_update_server/index.html deleted file mode 100644 index 280b4d7d0b..0000000000 --- a/files/ru/mozilla/setting_up_an_update_server/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Setting up an update server -slug: Mozilla/Setting_up_an_update_server -tags: - - корпорация - - сервер обновлений -translation_of: Mozilla/Setting_up_an_update_server ---- -<h3 id="Creating_a_simple_Firefox.2FThunderbird_update_server_with_Apache_and_PHP" name="Creating_a_simple_Firefox.2FThunderbird_update_server_with_Apache_and_PHP">Создание простейшего сервера обновления Firefox/Thunderbird при помощи Apache и PHP</h3> - -<p>Цель этого документа заключается в предоставлении основных инструкций по настройке собственного сервера обновлений.</p> - -<p>Firefox обеспечивает службы обновления с помощью веб-службы REST - которая содержится в URL при условии наличия XML-файла в этом URL, описывающего доступное обновление.</p> - -<p>Во-первых, давайте поговорим о формате URL. Вот URL используемый для обновления Firefox с версии 3.5.2 до Firefox версии 3.5.3:</p> - -<dl> - <dt>Windows</dt> - <dd><code><a class="link-https" href="https://aus2.mozilla.org/update/3/Firefox/3.5.2/20090729225027/WINNT_x86-msvc/en-US/release/Windows_NT%206.0/default/default/update.xml" rel="freelink">https://aus2.mozilla.org/update/3/Fi...ult/update.xml</a></code></dd> - <dt>Mac OS X</dt> - <dd><code><a class="link-https" href="https://aus2.mozilla.org/update/3/Firefox/3.5.2/20090729211433/Darwin_Universal-gcc3/en-US/release/Darwin%208.11.1/default/default/update.xml" rel="freelink">https://aus2.mozilla.org/update/3/Fi...ult/update.xml</a></code></dd> -</dl> - -<p>Формат URL выглядит так:</p> - -<pre>https://aus2.mozilla.org/update/3/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml -</pre> - -<p>Этот URL-адрес может отображаться в браузере через <code>about:config</code> как <code>app.update.url</code>, но чтобы изменить его, вы должны создать новую строку под названием <code>app.update.url.override</code> которая содержит ваше новое значение.</p> - -<p>В нашем примере, мы должны поместить <code>update.xml</code> на сервере в полном пути, указанном в URL обновлений. Таким образом, в корне вашего веб-сервера, нужно создать путь:</p> - -<pre>mkdir -p update.dir/3/Firefox/3.5.2/20090729225027/WINNT_x86-msvc/en-US/release/Windows_NT\ 6.0/default/default -</pre> - -<p>Взять файл <code>update.xml</code> из <a class="link-https" href="https://aus2.mozilla.org/update/3/Firefox/3.5.2/20090729225027/WINNT_x86-msvc/en-US/release/Windows_NT%206.0/default/default/update.xml">aus2.mozilla.org</a> и поместить его в самой последней папке <code>default</code>:</p> - -<pre><?xml version="1.0"?> -<updates> - <update type="minor" version="3.5.3" extensionVersion="3.5.3" buildID="20090824101458" detailsURL="http://www.mozilla.com/en-US/firefox/3.5.3/releasenotes/"> - <patch type="complete" URL="http://download.mozilla.org/?product=firefox-3.5.3-complete&os=win&lang=en-US" hashFunction="SHA512" hashValue="f8abbaea98bd453b651c24025dbb8cea5908e532ca64ad7150e88778ccb77c0325341c0fecbec37f31f31cdf7e13955c28140725282d2ce7c4a37c89a25319a1" size="10728423"/> - <patch type="partial" URL="http://download.mozilla.org/?product=firefox-3.5.3-partial-3.5.2&os=win&lang=en-US" hashFunction="SHA512" hashValue="20b133f1bd2025360bda8ef0c53132a5806dbd0606e0fe7c6d1291d1392532cc960262f87b0c7d4fbe8f9bc9fba64ed28ecd89b664c17f51f98acdd76b26ea6a" size="2531877"/> - </update> -</updates> -</pre> - -<p>Если вы хотите, чтобы эти сборки были загружены с вашего сервера вместо download.mozilla.org, скопируйте их на сервер и отредактируйте файл <code>update.xml</code> чтобы изменить ссылки URL.</p> - -<p>Далее, мы должны настроить сервер Apache, так чтобы можно было создать файл PHP для обработки веб-службы.</p> - -<p>Сначала в <code>httpd.conf</code>, убедитесь что параметр <code>AllowOverride</code> установлен в значение <code>FileInfo</code> для корневого каталога. Затем добавьте следующие строки в ваш файл <code>.htaccess</code> (вам, возможно, придется создать его) в корневом каталоге:</p> - -<pre><FILES update> -ForceType application/x-httpd-php -</FILES> -</pre> - -<p>Это укажет веб-серверу обработать <code>update</code> в виде файла PHP. Теперь создайте файл PHP с именем <code>update</code> в корневом каталоге:</p> - -<pre><?php -header("Content-type: text/xml"); -$path = preg_replace('/^\/update/', 'update.dir', urldecode($_SERVER["REQUEST_URI"])); -echo (file_exists($path)) ? file_get_contents($path) : '<?xml version="1.0"?><updates></updates>'; -?> -</pre> - -<p>Теперь, если вы идете по следующему адресу, вы должны увидеть содержимое XML.</p> - -<pre>http://localhost/update/3/Firefox/3.5.2/20090729225027/WINNT_x86-msvc/en-US/release/Windows_NT%206.0/default/default/update.xml -</pre> - -<p>Наконец, установите параметр <code>app.update.url.override</code> в следующее значение URL через <code>about:config</code> (или <a href="/en/MCD/Getting_Started">MCD</a>), а затем выберите Проверка обновлений в меню Справка. Вы должны получить обновление, если оно имеется.</p> - -<pre>http://localhost/update/3/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml -</pre> - -<h3 id="Security_Considerations" name="Security_Considerations">Соображения безопасности</h3> - -<p>Вы можете заметить, что URL обновления Firefox по умолчанию использует HTTPS выше и обслуживается поверх SSL. SSL действительно помещает дополнительную нагрузку на сервер, и вы можете захотеть использовать обычный HTTP - нет!</p> - -<p>Каждый пользователь будет пинговать сервер обновлений регулярно, есть ли обновление или нет (один раз в день по умолчанию). Любой пользователь, который подключается снаружи защищенной сети - в частности, из общественной точки доступа WiFi - потенциально может подключиться и подложить вредоносное обновление. SSL защищает от этой атаки. Файл <code>update.xml</code> маленькие, не увеличивают нагрузку SSL.</p> - -<p>Большие обновления могут быть безопасно обслужены с незащищенного сервера, потому что файлы обновления содержат хэш, который клиент проверять. Хэшу можно доверять, только если update.xml доставляется надежно.</p> - -<h3 id="See_Also" name="See_Also">Смотрите также</h3> - -<ul> - <li><a href="/en/XULRunner/Application_Update" title="en/XULRunner/Application_Update">XULRunner:Application Update</a></li> -</ul> - -<p>{{ languages( { "ja": "ja/Setting_up_an_update_server" } ) }}</p> diff --git a/files/ru/mozilla/tech/index.html b/files/ru/mozilla/tech/index.html deleted file mode 100644 index f9682e62e1..0000000000 --- a/files/ru/mozilla/tech/index.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -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. (flesh out this text).</p> -<p>{{LandingPageListSubpages}}</p> diff --git a/files/ru/mozilla/tech/places/index.html b/files/ru/mozilla/tech/places/index.html deleted file mode 100644 index 261e8beab0..0000000000 --- a/files/ru/mozilla/tech/places/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Places -slug: Mozilla/Tech/Places -tags: - - Add-ons - - Developing Mozilla - - Extensions - - NeedsTranslation - - Places - - TopicStub -translation_of: Mozilla/Tech/Places ---- -<p></p> - -<p><strong>Places</strong> is the bookmarks and history management system introduced in Firefox 3. It offers increased flexibility and complex querying to make handling the places the user goes easier and more convenient. It also includes new features including favicon storage and the ability to annotate pages with arbitrary information. It also introduces new user interfaces for managing all this information; see <a class="wikimo" href="https://wiki.mozilla.org/Places" title="Places on the Mozilla wiki">Places on the Mozilla wiki</a>.</p> - -<p>Places stores its data in an <a class="external" href="http://sqlite.org/">SQLite</a> database using the <a href="/en-US/docs/Storage" title="Storage">mozStorage</a> interfaces.</p> - -<table class="topicpage-table"> - <tbody> - <tr> - <td> - <h2 class="Documentation" id="Documentation" name="Documentation">Documentation</h2> - - <dl> - <dt><a href="/en-US/docs/Places_Developer_Guide" title="Places_Developer_Guide">Places migration guide</a></dt> - <dd>Migrating existing code to use the Places API.</dd> - <dt><a href="/en-US/docs/Manipulating_bookmarks_using_Places" title="Manipulating_bookmarks_using_Places">Manipulating bookmarks using Places</a></dt> - <dd>Examples for how to work with bookmarks using the Places API.</dd> - <dt><a href="/en-US/docs/Using_the_Places_tagging_service" title="Using_the_Places_tagging_service">Using the Places tagging service</a></dt> - <dd>How to use the tagging service.</dd> - <dt><a href="/en-US/docs/Using_the_Places_history_service" title="Using_the_Places_history_service">Using the Places history service</a></dt> - <dd>How to access history information using the Places API.</dd> - <dt><a href="/en-US/docs/Using_the_Places_favicon_service" title="Using_the_Places_favicon_service">Using the Places favicon service</a></dt> - <dd>How to manipulate favicons using the Places API.</dd> - <dt><a href="/en-US/docs/Using_the_Places_livemark_service" title="Using_the_Places_livemark_service">Using the Places livemark service</a></dt> - <dd>How to create and manage livemarks.</dd> - <dt><a href="/en-US/docs/Using_the_Places_annotation_service" title="Using_the_Places_annotation_service">Using the Places annotation service</a></dt> - <dd>How to work with the annotation service.</dd> - <dt><a href="/en-US/docs/Mozilla/Tech/Places/Using_the_Places_keywords_API">Using the Places keywords API</a></dt> - <dd>How to manage Places keywords</dd> - </dl> - - <dl> - <dt><a href="/en-US/docs/Querying_Places" title="Querying_Places">Querying Places</a></dt> - <dd>How to query the bookmarks and history system with specific parameters.</dd> - <dt><a href="/en-US/docs/Retrieving_part_of_the_bookmarks_tree" title="Retrieving_part_of_the_bookmarks_tree">Retrieving part of the bookmarks tree</a></dt> - <dd>How to fetch a section of the bookmarks tree using queries.</dd> - <dt><a href="/en-US/docs/Displaying_Places_information_using_views" title="Displaying_Places_information_using_views">Displaying Places information using views</a></dt> - <dd>How to use Places views to display Places data in your own applications or extensions.</dd> - <dt><a href="/en-US/docs/Places_utilities_for_JavaScript" title="Places_utilities_for_JavaScript">Places utilities for JavaScript</a></dt> - <dd>A library of convenient routines that make it easier to work with Places.</dd> - <dt><a href="/en-US/docs/Mozilla/Tech/Places/places.sqlite_Database_Troubleshooting">Places Database troubleshooting</a></dt> - <dd>How to deal with a corrupt places.sqlite database.</dd> - </dl> - - <p><span class="alllinks"><a href="/en-US/docs/tag/Places" title="tag/Places">View All...</a></span></p> - </td> - <td> - <h2 class="Related_Topics" id="Design_documents" name="Design_documents">Design documents</h2> - - <dl> - <dt><a href="/en-US/docs/The_Places_database" title="The_Places_database">The Places database</a></dt> - <dd>High-level overview of the Places database design.</dd> - <dt><a href="/en-US/docs/Places/History_Service_Design" title="Places/History_Service_Design">History Service Design</a></dt> - <dd>Design of the history service.</dd> - <dt><a href="/en-US/docs/Places/Bookmarks_Service/Design" title="Places/Bookmarks_Service/Design">Bookmark Service Design</a></dt> - <dd>Design of the bookmarks service.</dd> - <dt><a href="/en-US/docs/Places/Annotation_Service/Design" title="Places/Annotation_Service/Design">Annotation Service Design</a></dt> - <dd>Design of the annotation service.</dd> - <dt><a href="/en-US/docs/The_Places_frecency_algorithm" title="The_Places_frecency_algorithm">The Places "frecency" algorithm</a></dt> - <dd>The algorithm behind the Places location bar (sometimes called the "awesomebar").</dd> - </dl> - </td> - </tr> - </tbody> -</table> diff --git a/files/ru/mozilla/tech/xpcom/index.html b/files/ru/mozilla/tech/xpcom/index.html deleted file mode 100644 index 07687c0f82..0000000000 --- a/files/ru/mozilla/tech/xpcom/index.html +++ /dev/null @@ -1,47 +0,0 @@ ---- -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/ru/mozilla/tech/xpcom/reference/index.html b/files/ru/mozilla/tech/xpcom/reference/index.html deleted file mode 100644 index 7724292115..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/index.html +++ /dev/null @@ -1,21 +0,0 @@ ---- -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></p><div class="row topicpage-table"> - <div class="section"><dl><dl><dt></dt></dl></dl></div> - <div class="section"><dl><dt class="landingPageList"><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface">XPCOM Interface Reference</a></dt><dd class="landingPageList">This is a reference to the XPCOM interfaces provided by the Mozilla platform.</dd></dl></div> - </div><p></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 (Firefox 19 / Thunderbird 19 / SeaMonkey 2.16), 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/ru/mozilla/tech/xpcom/reference/interface/index.html b/files/ru/mozilla/tech/xpcom/reference/interface/index.html deleted file mode 100644 index 61f0ae4fca..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/interface/index.html +++ /dev/null @@ -1,17 +0,0 @@ ---- -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"> - <ul><li><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager">nsILoginManager</a></li><li><a href="/ru/docs/nsIObserver">nsIObserver</a></li><li><a href="/ru/docs/nsIOutputStream">nsIOutputStream</a></li></ul></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/ru/mozilla/tech/xpcom/reference/interface/nsidomhtmlmediaelement/index.html b/files/ru/mozilla/tech/xpcom/reference/interface/nsidomhtmlmediaelement/index.html deleted file mode 100644 index 90109df203..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/interface/nsidomhtmlmediaelement/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: nsIDOMHTMLMediaElement -slug: Mozilla/Tech/XPCOM/Reference/Interface/NsIDOMHTMLMediaElement -translation_of: Web/API/DOMMatrixReadOnly/translate ---- -<div> -<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/dom/interfaces/html/nsIDOMHTMLMediaElement.idl" rel="custom">dom/interfaces/html/nsIDOMHTMLMediaElement.idl</a></code><span style="float: right; text-align: 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;">The basis for the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMHTMLAudioElement" title="">nsIDOMHTMLAudioElement</a></code> and <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMHTMLVideoElement" title="">nsIDOMHTMLVideoElement</a></code> interfaces, which in turn implement the <a href="/en-US/docs/Web/HTML/Element/audio" title="The HTML <audio> element is used to embed sound content in documents. It may contain one or more audio sources, represented using the src attribute or the <source> element: the browser will choose the most suitable one. It can also be the destination for streamed media, using a MediaStream."><code><audio></code></a> and <a href="/en-US/docs/Web/HTML/Element/video" title="The HTML Video element (<video>) embeds a media player which supports video playback into the document."><code><video></code></a> HTML5 elements. </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%;">67</div> - -<div style="height: 8px; top: 16px; background: #dd0000; left: 0px; position: absolute; width: 9.389671267605634%;"></div> - -<div style="height: 8px; top: 16px; left: 9.389671267605634%; background: #00dd00; position: absolute; width: 90.61032873239436%;" title="Introduced in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)"></div> - -<div style="top: 0px; font-size: 11px; position: absolute; left: 9.389671267605634%;">Introduced</div> - -<div style="top: 22px; font-size: 11px; position: absolute; left: 9.389671267605634%;">Gecko 1.9.1</div> -</div> - -<div style="background: #eee; padding: 2px;">Inherits from: <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMHTMLElement" title="">nsIDOMHTMLElement</a></code> <span style="float: right; text-align: right;">Last changed in Gecko 1.1 </span></div> -</div> -</div> - -<div>The <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMHTMLMediaElement">nsIDOMHTMLMediaElement</a></code> interface implements the DOM <a href="/en-US/docs/Web/API/HTMLMediaElement"><code>HTMLMediaElement</code></a> interface. See that page for details.</div> diff --git a/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/index.html b/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/index.html deleted file mode 100644 index 8fe801e95f..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/index.html +++ /dev/null @@ -1,372 +0,0 @@ ---- -title: nsILoginManager -slug: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager -tags: - - Firefox 3 - - Interfaces - - 'Interfaces:Scriptable' - - Login Manager - - NeedsTranslation - - Thunderbird 3 - - TopicStub - - XPCOM - - XPCOM API Reference - - thunderbird -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager ---- -<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/toolkit/components/passwordmgr/public/nsILoginManager.idl" rel="custom">toolkit/components/passwordmgr/public/nsILoginManager.idl</a></code><span style="text-align: right; float: right;"><a href="/ru/docs/Interfaces/About_Scriptable_Interfaces" style="color: #00cc00; font-weight: 700;">Со скриптами</a></span></div> -<span style="padding: 4px 2px;"> - -Used to interface with the built-in Password Manager -</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: 8.571428571428571%;"></div> - -<div style="height: 8px; top: 16px; left: 8.571428571428571%; background: #00dd00; position: absolute; width: 91.42857142857143%;" title="Introduced in Gecko 1.9 (Firefox 3)"></div> - -<div style="top: 0px; font-size: 11px; position: absolute; left: 8.571428571428571%;">Introduced</div> -<div style="top: 22px; font-size: 11px; position: absolute; left: 8.571428571428571%;">Gecko 1.9</div> - - <div style="height: 8px; top: 16px; left: 9.976190285714287%; background: #eeee00; position: absolute; width: 1%; border-radius: 4px; -webkit-border-radius: 4px;" title="Last changed in Gecko 1.9.2 (Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)"></div> - -</div> - -<div style="background: #eee; padding: 2px;"> -Наследуется из: <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsISupports" title="">nsISupports</a></code> -<span style="text-align: right; float: right;">Последнее изменение в Gecko 1.9.2 (Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)</span></div> -</div><p></p> -<p>Replaces <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIPasswordManager" title="">nsIPasswordManager</a></code> which was used in older versions of Gecko.</p> -<p>Implemented by: <code>@mozilla.org/login-manager;1</code>. To create an instance, use:</p> -<pre class="eval">var loginManager = Components.classes["@mozilla.org/login-manager;1"] - .getService(Components.interfaces.nsILoginManager); -</pre> -<h2 id="Method_overview" name="Method_overview">Method overview</h2> -<table class="standard-table"> - <tbody> - <tr> - <td><code>void <a href="#addLogin()">addLogin</a>(in nsILoginInfo aLogin);</code></td> - </tr> - <tr> - <td><code>nsIAutoCompleteResult <a href="#autoCompleteSearch()">autoCompleteSearch</a>(in AString aSearchString, in nsIAutoCompleteResult aPreviousResult, in nsIDOMHTMLInputElement aElement);</code></td> - </tr> - <tr> - <td><code>unsigned long <a href="#countLogins()">countLogins</a>(in AString aHostname, in AString aActionURL, in AString aHttpRealm);</code></td> - </tr> - <tr> - <td><code>boolean <a href="#fillForm()">fillForm</a>(in nsIDOMHTMLFormElement aForm);</code> </td> - </tr> - <tr> - <td><code>void <a href="#findLogins()">findLogins</a>(out unsigned long count, in AString aHostname, in AString aActionURL, in AString aHttpRealm, [retval, array, size_is(count)] out nsILoginInfo logins);</code></td> - </tr> - <tr> - <td><code>void <a href="#getAllDisabledHosts()">getAllDisabledHosts</a>([optional] out unsigned long count, [retval, array, size_is(count)] out wstring hostnames);</code></td> - </tr> - <tr> - <td><code>void <a href="#getAllLogins()">getAllLogins</a>([optional] out unsigned long count, [retval, array, size_is(count)] out nsILoginInfo logins);</code></td> - </tr> - <tr> - <td><code>boolean <a href="#getLoginSavingEnabled()">getLoginSavingEnabled</a>(in AString aHost);</code></td> - </tr> - <tr> - <td><code>void <a href="#modifyLogin()">modifyLogin</a>(in nsILoginInfo oldLogin, in nsISupports newLoginData);</code></td> - </tr> - <tr> - <td><code>void <a href="#removeAllLogins()">removeAllLogins</a>();</code></td> - </tr> - <tr> - <td><code>void <a href="#removeLogin()">removeLogin</a>(in nsILoginInfo aLogin);</code></td> - </tr> - <tr> - <td><code>void <a href="#searchLogins()">searchLogins</a>(out unsigned long count, in nsIPropertyBag matchData, [retval, array, size_is(count)] out nsILoginInfo logins);</code> </td> - </tr> - <tr> - <td><code>void <a href="#setLoginSavingEnabled()">setLoginSavingEnabled</a>(in AString aHost, in boolean isEnabled);</code></td> - </tr> - </tbody> -</table> -<h2 id="Methods" name="Methods">Methods</h2> -<h3 id="addLogin()" name="addLogin()">addLogin()</h3> -<p>Stores a new login in the Login Manager.</p> -<p></p><div class="blockIndicator note"><strong>Примечание:</strong> Default values for the <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginMetaInfo" title="">nsILoginMetaInfo</a></code> properties are created if the specified login doesn't explicitly specify them.</div><p></p> -<pre class="eval">void addLogin( - in nsILoginInfo aLogin -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>aLogin</code></dt> - <dd> - The login to store.</dd> -</dl> -<h6 id="Exceptions_thrown" name="Exceptions_thrown">Exceptions thrown</h6> -<dl> - <dt> - </dt> - <dd> - An exception is thrown if the login information is already stored in the Login Manager. To change a login, you have to use <code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager#modifyLogin()">modifyLogin()</a></code>.</dd> -</dl> -<h3 id="autoCompleteSearch()" name="autoCompleteSearch()">autoCompleteSearch()</h3> -<p>Generates results for a user field autocomplete menu.</p> -<p></p><div class="blockIndicator note"><strong>Примечание:</strong> This method is provided for use only by the <code>FormFillController</code>, which calls it directly. It should not be used for any other purpose.</div><p></p> -<pre class="eval">nsIAutoCompleteResult autoCompleteSearch( - in AString aSearchString, - in nsIAutoCompleteResult aPreviousResult, - in nsIDOMHTMLInputElement aElement -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>aSearchString</code></dt> - <dd> - Missing Description</dd> - <dt> - <code>aPreviousResult</code></dt> - <dd> - Missing Description</dd> - <dt> - <code>aElement</code></dt> - <dd> - Missing Description</dd> -</dl> -<h6 id="Return_value" name="Return_value">Return value</h6> -<p>Missing Description</p> -<h3 id="countLogins()" name="countLogins()">countLogins()</h3> -<p>Returns the number of logins matching the specified criteria. Called when only the number of logins is needed, and not the actual logins (which avoids prompting the user for a Master Password, as the logins don't need to be decrypted).</p> -<pre class="eval">unsigned long countLogins( - in AString aHostname, - in AString aActionURL, - in AString aHttpRealm -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>aHostname</code></dt> - <dd> - The hostname to which to restrict searches, formatted as a URL. For example, "<a class="external" href="http://www.bar.com" rel="freelink">http://www.bar.com</a>". To match all hostnames, specify <code>""</code> (empty string). A value of <code>null</code> will cause countLogins() to not match any logins.</dd> - <dt> - <code>aActionURL</code></dt> - <dd> - For form logins, this parameter should specify the URL to which the form will be submitted. To match any form login, specify <code>""</code> (empty string). To not match any form logins (For example when interested in protocol logins only), specify <code>null</code>.</dd> - <dt> - <code>aHttpRealm</code></dt> - <dd> - For protocol logins, specify the HTTP Realm for which the login applies; this is obtained from the WWW-Authenticate header (see <a class="external" href="http://tools.ietf.org/html/rfc2617" title="http://tools.ietf.org/html/rfc2617">RFC 2617</a>). To match any protocol login, specify <code>""</code> (empty string). To not match any protocol logins (For example when interested in form logins only), specify <code>null</code>.</dd> -</dl> -<h6 id="Return_value" name="Return_value">Return value</h6> -<p>The number of logins matching the parameters passed.</p> -<p></p><h3 id="fillForm()">fillForm()</h3><p></p> -<p>Fills out a form with login information, if appropriate information is available.</p> -<p></p><div class="blockIndicator note"><strong>Примечание:</strong> This method will attempt to fill out the form regardless of the setting of the <code>signon.autofillForms</code> preference.</div><p></p> -<pre class="eval">boolean fillForm( - in nsIDOMHTMLFormElement aForm -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>aForm</code></dt> - <dd> - The HTMLform to attempt to fill out.</dd> -</dl> -<h6 id="Return_value" name="Return_value">Return value</h6> -<p><code>true</code> if the form was successfully filled out; otherwise <code>false</code>.</p> -<h3 id="findLogins()" name="findLogins()">findLogins()</h3> -<p>Searches for logins matching the specified criteria. Called when looking for logins that might be applicable to a given form or authentication request.</p> -<pre class="eval">void findLogins( - out unsigned long count, - in AString aHostname, - in AString aActionURL, - in AString aHttpRealm, - [retval, array, size_is(count)] out nsILoginInfo logins -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>count</code></dt> - <dd> - The number of elements in the returned array. JavaScript callers can simply use the array's <code>length</code> property and supply a dummy argument for this parameter.</dd> - <dt> - <code>aHostname</code></dt> - <dd> - The hostname to restrict searches to, formatted as a URL. For example, "<a class="external" href="http://www.bar.com" rel="freelink">http://www.bar.com</a>".</dd> - <dt> - <code>aActionURL</code></dt> - <dd> - For form logins, this parameter should specify the URL to which the form will be submitted. For protocol logins, specify <code>null</code>. An empty string ("") will match any value (except <code>null</code>).</dd> - <dt> - <code>aHttpRealm</code></dt> - <dd> - For protocol logins, specify the HTTP Realm for which the login applies; this is obtained from the WWW-Authenticate header (see <a class="external" href="http://tools.ietf.org/html/rfc2617" title="http://tools.ietf.org/html/rfc2617">RFC 2617</a>). For form logins, this parameter should be <code>null</code>. An empty string ("") will match any value (except <code>null</code>).</dd> - <dt> - <code>logins</code></dt> - <dd> - An array of <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginInfo" title="">nsILoginInfo</a></code> objects.</dd> -</dl> -<h6 id="Example" name="Example">Example</h6> -<p>This method can be called from JavaScript like this:</p> -<pre class="brush: js"> var logins = myLoginMgr.findLogins({}, hostname, ...); -</pre> -<h3 id="getAllDisabledHosts()" name="getAllDisabledHosts()">getAllDisabledHosts()</h3> -<p>Returns a list of all hosts for which login saving is disabled.</p> -<pre class="eval">void getAllDisabledHosts( - [optional] out unsigned long count, - [retval, array, size_is(count)] out wstring hostnames -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>count</code></dt> - <dd> - The number of elements in the returned array. JavaScript callers can simply use the array's <code>length</code> property and supply a dummy argument for this parameter.</dd> - <dt> - <code>hostnames</code></dt> - <dd> - An array of hostname strings in URL format without a pathname. For example: <span class="nowiki">"https://www.site.com"</span>.</dd> -</dl> -<h6 id="Example" name="Example">Example</h6> -<p>You can call this method from JavaScript like this:</p> -<pre class="brush: js"> var disabledHosts = myLoginMgr.getAllDisabledHosts({}); -</pre> -<h3 id="getAllLogins()" name="getAllLogins()">getAllLogins()</h3> -<p>Returns an array containing all logins recorded by the Login Manager.</p> -<p>If you just want to see if any logins are stored, use <code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager#countLogins()">countLogins()</a></code> instead. It's more efficient, and avoids the possibility of the user being prompted for their master password.</p> -<pre class="eval">void getAllLogins( - [optional] out unsigned long count, - [retval, array, size_is(count)] out nsILoginInfo logins -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>count</code></dt> - <dd> - The number of elements in the returned array. JavaScript callers can simply use the array's <code>length</code> property and supply a dummy argument for this parameter.</dd> - <dt> - <code>logins</code></dt> - <dd> - An array of <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginInfo" title="">nsILoginInfo</a></code> objects containing all the logins the Login Manager has on record.</dd> -</dl> -<h6 id="Example" name="Example">Example</h6> -<p>You can call this method from JavaScript like this:</p> -<pre class="brush: js"> var logins = myLoginMgr.getAllLogins({}); -</pre> -<h3 id="getLoginSavingEnabled()" name="getLoginSavingEnabled()">getLoginSavingEnabled()</h3> -<p>Reports whether or not saving login information is enabled for a host.</p> -<pre class="eval">boolean getLoginSavingEnabled( - in AString aHost -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>aHost</code></dt> - <dd> - The hostname to check. This argument should be in the origin URL format, with no pathname. For example: <span class="nowiki">"https://www.site.com"</span>.</dd> -</dl> -<h6 id="Return_value" name="Return_value">Return value</h6> -<p><code>true</code> if login saving is enabled for the host, otherwise <code>false</code>.</p> -<h3 id="modifyLogin()" name="modifyLogin()">modifyLogin()</h3> -<p>Modifies an existing login by replacing it with a new one.</p> -<p>If newLoginData is a <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginInfo" title="">nsILoginInfo</a></code>, all of the old login's <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginInfo" title="">nsILoginInfo</a></code> properties are changed to the values from newLoginData (but the old login's <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginMetaInfo" title="">nsILoginMetaInfo</a></code> properties are unmodified).</p> -<p>If newLoginData is a <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIPropertyBag" title="">nsIPropertyBag</a></code>, only the specified properties will be changed. The <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginMetaInfo" title="">nsILoginMetaInfo</a></code> properties of oldLogin can be changed in this manner.</p> -<p>If the propertybag contains an item named "timesUsedIncrement", the login's timesUsed property will be incremented by the item's value.</p> -<pre class="eval">void modifyLogin( - in nsILoginInfo oldLogin, - in nsISupports newLoginData -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>oldLogin</code></dt> - <dd> - The login to be modified.</dd> - <dt> - <code>newLoginData</code></dt> - <dd> - The login information to replace the <code>oldLogin</code> with. This may be specified as either an <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginInfo" title="">nsILoginInfo</a></code> or an <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIPropertyBag2" title="">nsIPropertyBag2</a></code> object.</dd> -</dl> -<h3 id="removeAllLogins()" name="removeAllLogins()">removeAllLogins()</h3> -<p>Removes all logins known by the Login Manager. This works without a need for the master password, if one is set.</p> -<pre class="eval">void removeAllLogins(); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<p>None.</p> -<h3 id="removeLogin()" name="removeLogin()">removeLogin()</h3> -<p>Removes a login from the Login Manager.</p> -<p></p><div class="blockIndicator note"><strong>Примечание:</strong> The specified login must exactly match a stored login. However, the values of any <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginMetaInfo" title="">nsILoginMetaInfo</a></code> properties are ignored.</div><p></p> -<pre class="eval">void removeLogin( - in nsILoginInfo aLogin -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>aLogin</code></dt> - <dd> - The login to remove from the Login Manager. Only a login that is an exact match is deleted.</dd> -</dl> -<p></p><h3 id="searchLogins()">searchLogins()</h3><p></p> -<p>Searches for logins in the login manager's data store, returning an array of matching logins. If there are no matching logins, an empty array is returned.</p> -<pre class="eval">void searchLogins( - out unsigned long count, - in nsIPropertyBag matchData, - [retval, array, size_is(count)] out nsILoginInfo logins -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>count</code></dt> - <dd> - The number of elements in the returned array.</dd> - <dt> - <code>matchData</code></dt> - <dd> - The data used for the search. This does not follow the same requirements as <code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager#findLogins()">findLogins()</a></code> for those fields; wildcard matches are not specified.</dd> - <dt> - <code>logins</code></dt> - <dd> - An array of matching <code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginInfo" title="">nsILoginInfo</a></code> objects.</dd> -</dl> -<h6 id="Example" name="Example">Example</h6> -<p>This method can be called from JavaScript like this:</p> -<pre class="brush: js"> var logins = myLoginMgr.searchLogins({}, matchData); - var numLogins = logins.length; -</pre> -<h3 id="setLoginSavingEnabled()" name="setLoginSavingEnabled()">setLoginSavingEnabled()</h3> -<p>Enables or disables storing logins for a specified host. When login storing is disabled, the Login Manager won't prompt the user to store logins for that host. Existing logins are not affected.</p> -<pre class="eval">void setLoginSavingEnabled( - in AString aHost, - in boolean isEnabled -); -</pre> -<h6 id="Parameters" name="Parameters">Parameters</h6> -<dl> - <dt> - <code>aHost</code></dt> - <dd> - The hostname to adjust the setting for. This argument should be in the origin URL format, with no pathname. For example: <span class="nowiki">"https://www.site.com"</span>.</dd> - <dt> - <code>isEnabled</code></dt> - <dd> - If <code>true</code>, login saving is enabled for the specified host. If <code>false</code>, login saving is disabled.</dd> -</dl> -<h2 id="See_also" name="See_also">See also</h2> -<ul> - <li><code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginInfo" title="">nsILoginInfo</a></code></li> - <li><a href="/en/XPCOM_Interface_Reference/nsILoginManager/Using_nsILoginManager" title="en/Using_nsILoginManager">Using nsILoginManager</a></li> -</ul> -<p></p> diff --git a/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/using_nsiloginmanager/index.html b/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/using_nsiloginmanager/index.html deleted file mode 100644 index 16c2c5a029..0000000000 --- a/files/ru/mozilla/tech/xpcom/reference/interface/nsiloginmanager/using_nsiloginmanager/index.html +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: Using nsILoginManager -slug: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager/Using_nsILoginManager -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager/Using_nsILoginManager ---- -<div> - </div> -<h2 id="Working_with_the_Login_Manager" name="Working_with_the_Login_Manager">Working with the Login Manager</h2> -<p>Extensions often need to securely store passwords to external sites, web applications, and so on. To do so securely, they can use <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginManager" title="en-US/docs/nsILoginManager">nsILoginManager</a></code>, which provides for secure storage of sensitive password information and <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginInfo" title="en-US/docs/nsILoginInfo">nsILoginInfo</a></code>, which provides a way of storing login information.</p> -<h2 id="Getting_nsILoginManager" name="Getting_nsILoginManager">Getting <code>nsILoginManager</code></h2> -<p>To get a component implementing <code>nsILoginManager</code>, use the following:</p> -<div style="margin-right: 270px;"> - <pre class="brush: js">var passwordManager = Components.classes["@mozilla.org/login-manager;1"].getService( - Components.interfaces.nsILoginManager -);</pre> -</div> -<p>Most Login Manager functions take an <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginInfo" title="en-US/docs/nsILoginInfo">nsILoginInfo</a></code> object as a parameter. An <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginInfo" title="en-US/docs/nsILoginInfo">nsILoginInfo</a></code> object contains the following attributes: hostname, form submit URL, HTTP realm, username, username field, password, and password field. The hostname, username and password attributes are mandatory, while the other fields are set based on whether the login is for a web page form or an HTTP/FTP authentication site login. See the <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginInfo" title="en-US/docs/nsILoginInfo">nsILoginInfo</a></code> attribute definitions for more details. Defining an <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginInfo" title="en-US/docs/nsILoginInfo">nsILoginInfo</a></code> object is simple:</p> -<div style="margin-right: 270px;"> - <pre class="brush: js">var nsLoginInfo = new Components.Constructor( - "@mozilla.org/login-manager/loginInfo;1", - Components.interfaces.nsILoginInfo, - "init" -); - -var loginInfo = new nsLoginInfo( - hostname, formSubmitURL, httprealm, username, password, usernameField, passwordField -); -</pre> -</div> -<h2 id="Examples" name="Examples">Examples</h2> -<h3 id="Creating_a_login_for_a_web_page" name="Creating_a_login_for_a_web_page">Creating a login for a web page</h3> -<pre class="brush: js">var formLoginInfo = new nsLoginInfo( - 'http://www.example.com', - 'http://login.example.com', - null, - 'joe', - 'SeCrEt123', - 'uname', - 'pword' -);</pre> -<p>This login would correspond to a HTML form such as:</p> -<pre class="brush: html"><form action="http://login.example.com/foo/authenticate.cgi"> - <div>Please log in.</div> - <label>Username:</label> <input type="text" name="uname"> - <label>Password:</label> <input type="password" name="pword"> -</form> -</pre> -<h3 id="Creating_a_site_authentication_login" name="Creating_a_site_authentication_login">Creating a site authentication login</h3> -<pre class="brush: js">var authLoginInfo = new nsLoginInfo( - 'http://www.example.com', - null, - 'ExampleCo Login', - 'alice', - 'SeCrEt321', - "", - "" -); -</pre> -<p>This would correspond to a login on <span class="nowiki">http://www.example.com</span> when the server sends a reply such as:</p> -<pre class="eval"> HTTP/1.0 401 Authorization Required - Server: Apache/1.3.27 - WWW-Authenticate: Basic realm="ExampleCo Login" - -</pre> -<h3 id="Creating_a_local_extension_login" name="Creating_a_local_extension_login">Creating a local extension login</h3> -<pre class="brush: js">var extLoginInfo = new nsLoginInfo( - 'chrome://firefoo', - null, - 'User Registration', - 'bob', - '123sEcReT', - "", - "" -);</pre> -<p>From a component creating a new info block is done slightly differently:</p> -<pre>var nsLoginInfo = <span class="k"><span class="s0">new</span></span> <a class="r" title='Search for references of "Components"'>Components</a>.<a class="r" title='Search for references of "Constructor"'>Constructor</a>("@<a class="r" title='Search for references of "mozilla"'>mozilla</a>.<a class="r" title='Search for references of "org"'>org</a>/<a class="r" title='Search for references of "login"'>login</a>-<a class="r" title='Search for references of "manager"'>manager</a>/<a class="r" title='Search for references of "loginInfo"'>loginInfo</a>;1", <a class="r" title='Search for references of "Ci"'>Ci</a>.<a class="r" title='Search for references of "nsILoginInfo"'>nsILoginInfo</a>, "<a class="r" title='Search for references of "init"'>init</a>"); -<span class="k">var</span> extLoginInfo = <span class="k"><span class="s0">new</span></span> <a class="r" title='Search for references of "nsLoginInfo"'><span class="s1">nsLoginInfo</span></a>('<a class="r" title='Search for references of "chrome"'>chrome</a>:<span class="c">//firefoo',</span> null, 'User Registration', 'bob', '123sEcReT', '', ''); -//var extLoginInfo = new nsLoginInfo(<a class="r" title='Search for references of "aHostname"'>aHostname</a>, <a class="r" title='Search for references of "aFormSubmitURL"'>aFormSubmitURL</a>, <a class="r" title='Search for references of "aHttpRealm"'>aHttpRealm</a>, <a class="r" title='Search for references of "aUsername"'>aUsername</a>, <a class="r" title='Search for references of "aPassword"'>aPassword</a>, <a class="r" title='Search for references of "aUsernameField"'>aUsernameField</a>, <a class="r" title='Search for references of "aPasswordField"'>aPasswordField)</a> -</pre> -<p>The Login Manager treats this as if it was a web site login. You should use your extension's chrome:// URL to prevent conflicts with other extensions, and a realm string which briefly denotes the login's purpose.</p> -<h2 id="Storing_a_password" name="Storing_a_password">Storing a password</h2> -<p>To store a password in the Login Manager, you first need to create an <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginInfo" title="en-US/docs/nsILoginInfo">nsILoginInfo</a></code> object as defined above. Then you simply need to call the <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginManager" title="en-US/docs/nsILoginManager">nsILoginManager</a></code> method <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginManager#addLogin.28.29" title="en-US/docs/nsILoginManager#addLogin.28.29">addLogin()</a></code>.</p> -<pre class="brush: js">myLoginManager.addLogin(loginInfo); -</pre> -<p></p><div class="blockIndicator note"><strong>Примечание:</strong> This will throw an exception if both the <code>httprealm</code> and <code>formSubmitURL</code> parameters are <code>NULL</code>. One must be specified when storing a password. The <code>hostname</code>, <code>username</code> and <code>password</code> parameters are also mandatory.</div><p></p> -<h2 id="Retrieving_a_password" name="Retrieving_a_password">Retrieving a password</h2> -<p>Retrieving a password from the Login Manager is slightly more difficult. In order to locate a password, the <code>hostname</code>, <code>formSubmitURL</code> and <code>httprealm</code> must <strong>match exactly</strong> what is stored for the password to be found. The only exception is that if the stored <code>formSubmitURL</code> is blank, in which case the <code>formSubmitURL</code> parameter is ignored. Note that the <code>hostname</code> and <code>formSubmitURL</code> arguments should not include the path from the full URL. The example below should serve as a starting point for matching form logins:</p> -<pre class="brush: js">var hostname = 'http://www.example.com'; -var formSubmitURL = 'http://www.example.com'; // not http://www.example.com/foo/auth.cgi -var httprealm = null; -var username = 'user'; -var password; - -try { - // Get Login Manager - var myLoginManager = Components.classes["@mozilla.org/login-manager;1"]. - getService(Components.interfaces.nsILoginManager); - - // Find users for the given parameters - var logins = myLoginManager.findLogins({}, hostname, formSubmitURL, httprealm); - - // Find user from returned array of nsILoginInfo objects - for (var i = 0; i < logins.length; i++) { - if (logins[i].username == username) { - password = logins[i].password; - break; - } - } -} - -catch(ex) { - // This will only happen if there is no nsILoginManager component class -}</pre> -<p>Note that the user will be prompted for their master password if they have chosen to set one to secure their passwords.</p> -<h2 id="Removing_a_password" name="Removing_a_password">Removing a password</h2> -<p>Removing a password is simple:</p> -<pre class="brush: js">myLoginManager.removeLogin(loginInfo); -</pre> -<p>When removing a password the specified <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginInfo" title="en-US/docs/nsILoginInfo">nsILoginInfo</a></code> object must <strong>exactly match</strong> what was stored or an exception will be thrown. This includes the password attribute. Here's an example on how to remove the password without actually knowing what the password is:</p> -<pre class="brush: js">// example values -var hostname = 'http://www.example.com'; -var formSubmitURL = 'http://www.example.com'; -var httprealm = null; -var username = 'user'; - -try { - // Get Login Manager - var passwordManager = Components.classes["@mozilla.org/login-manager;1"]. - getService(Components.interfaces.nsILoginManager); - - // Find users for this extension - var logins = passwordManager.findLogins({}, hostname, formSubmitURL, httprealm); - - for (var i = 0; i < logins.length; i++) { - if (logins[i].username == username) { - passwordManager.removeLogin(logins[i]); - break; - } - } -} -catch(ex) { - // This will only happen if there is no nsILoginManager component class -}</pre> -<h2 id="Changing_stored_login_information" name="Changing_stored_login_information">Changing stored login information</h2> -<p>Changing a password is rather simple. Since all this does is make a <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginManager#removeLogin.28.29" title="en-US/docs/nsILoginManager#removeLogin.28.29">removeLogin()</a></code> call followed by an <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginManager#addLogin.28.29" title="en-US/docs/nsILoginManager#addLogin.28.29">addLogin()</a></code> call, it has the same caveats as both of them: namely that the <code>oldLogin</code> must match an existing login exactly (see above) and that the <code>newLogin</code> attributes must be set correctly.:</p> -<pre class="brush: js">myLoginManager.modifyLogin(oldLogin, newLogin);</pre> -<h2 id="Debugging" name="Debugging">Login Manager notifications</h2> -<p></p><div class="blockIndicator standardNote"> - <p><a href="https://developer.mozilla.org/ru/docs/Mozilla/Firefox/Releases/3.5">Замечание по Firefox 3.5</a></p> - <p style="font-weight: 400;">The Login Manager notifications were added in Firefox 3.5.</p> -</div><p></p> -<p>Firefox 3.5 and later send assorted notifications when various Login Manager related events occur, including when form autofill does not occur for various reasons, as well as when changes are made to the Login Manager's database. See the <a class="internal" href="/en-US/docs/Observer_Notifications#Login_Manager" title="en-US/docs/Observer Notifications#Login Manager">Login Manager</a> section of the article on observer notifications for details.</p> -<h2 id="Debugging" name="Debugging">Debugging</h2> -<p>The login manager implementation has the ability to send debug messages to the Error Console, which can provide some visibility into what it's doing. To enable the debug logging, see <a class="external" href="http://wiki.mozilla.org/Firefox:Password_Manager_Debugging" rel="freelink">http://wiki.mozilla.org/Firefox:Pass...ager_Debugging</a>.</p> -<h2 id="Supporting_older_versions_of_Firefox" name="Supporting_older_versions_of_Firefox">Supporting older versions of Gecko</h2> -<p>If you want your extension to support both Gecko 1.9 (Firefox 3, Thunderbird 3, SeaMonkey 2) and older versions it will need to implement both the <code><a href="/en-US/docs/XPCOM_Interface_Reference/nsILoginManager" title="en-US/docs/nsILoginManager">nsILoginManager</a></code> and <code><a href="/en-US/docs/nsIPasswordManager" title="en-US/docs/nsIPasswordManager">nsIPasswordManager</a></code> components. A simple method to do this is as follows:</p> -<pre class="brush: js">if ("@mozilla.org/passwordmanager;1" in Components.classes) { - // Password Manager exists so this is not Firefox 3 (could be Firefox 2, Netscape, SeaMonkey, etc). - // Password Manager code -} else if ("@mozilla.org/login-manager;1" in Components.classes) { - // Login Manager exists so this is Firefox 3 - // Login Manager code -}</pre> -<h2 id="See_also" name="See_also">See also</h2> -<ul> - <li><code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginManager" title="">nsILoginManager</a></code></li> - <li><code><a href="/ru/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsILoginInfo" title="">nsILoginInfo</a></code></li> - <li><a href="/en-US/docs/Creating_a_Login_Manager_storage_module" title="en-US/docs/Creating_a_Login_Manager_storage_module">Creating a Login Manager storage module</a></li> -</ul> diff --git a/files/ru/mozilla/tech/xul/action/index.html b/files/ru/mozilla/tech/xul/action/index.html deleted file mode 100644 index 3f4ec0f4de..0000000000 --- a/files/ru/mozilla/tech/xul/action/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: action -slug: Mozilla/Tech/XUL/action -tags: - - XUL Elements - - XUL ссылки -translation_of: Archive/Mozilla/XUL/action ---- -<div class="noinclude"><span class="breadcrumbs XULRef_breadcrumbs"> - « <a href="/ru/docs/XUL/Справочник">Справочник по XUL</a> [ - <a href="#Examples">Примеры</a> | - <a href="#Атрибуты">Атрибуты</a> | - <a href="#Property">Свойства</a> | - <a href="#Методы">Методы</a> | - <a href="#Related">См. также</a> ] -</span></div> - -<div class="noinclude">Действие должно содержаться в <code><a href="/ru/docs/Mozilla/Tech/XUL/query" title="query">query</a></code> или <code><a href="/ru/docs/Mozilla/Tech/XUL/rule" title="rule">rule</a></code> элементе. Используется для указания содержимого, генерируемого для каждого совпадающего узла. Внутри <code>action</code>, атрибуты анализируются и выявляются <code id="a-uri"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/uri">uri</a></code>, <a class="external" href="http://xul.com/tutorials/xultu/templateex.html">ссылки на ресурсы и переменные</a>.</div> - -<p>Дополнительная информация доступна в -<a href="/ru/XUL_Tutorial/Advanced_Rules">руководстве по XUL</a>.<br> - Зарубежный источник: <a href="/en-US/docs/XUL/Template_Guide/Actions">Actions</a>.</p> - -<h3 id="Examples" name="Examples">Примеры</h3> - -<pre> пример использования -</pre> -<pre><code><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" - ref="http://www.xulplanet.com/rdf/A"> - <template> - <query> - <content uri="?start"/> - <triple subject="?start" - predicate="http://www.xulplanet.com/rdf/relatedItem" - object="?relateditem"/> - </query> - <action> - <button uri="?relateditem" label="?relateditem"/> - </action> - </template> -</vbox></code></pre> - -<h3 id="Attributes" name="Attributes">Атрибуты</h3> - -<p></p><table style="border: 1px solid rgb(204, 204, 204); margin: 0 0 10px 10px; padding: 0 10px; background: rgb(238, 238, 238);"> -<tbody> -<tr> -<td><p><strong>Наследуется с XUL элемента</strong><br> <small> -<code id="a-align"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/align">align</a></code>, -<code id="a-allowevents"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/allowevents">allowevents</a></code>, -<code id="a-allownegativeassertions"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/allownegativeassertions">allownegativeassertions</a></code>, -<code id="a-class"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/class">class</a></code>, -<code id="a-coalesceduplicatearcs"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/coalesceduplicatearcs">coalesceduplicatearcs</a></code>, -<code id="a-collapsed"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/collapsed">collapsed</a></code>, -<code id="a-container"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/container">container</a></code>, -<code id="a-containment"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/containment">containment</a></code>, -<code id="a-context"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/context">context</a></code>, -<code id="a-contextmenu"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/contextmenu">contextmenu</a></code>, -<code id="a-datasources"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/datasources">datasources</a></code>, -<code id="a-dir"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/dir">dir</a></code>, -<code id="a-empty"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/empty">empty</a></code>, -<code id="a-equalsize"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/equalsize">equalsize</a></code>, -<code id="a-flags"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/flags">flags</a></code>, -<code id="a-flex"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/flex">flex</a></code>, -<code id="a-height"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/height">height</a></code>, -<code id="a-hidden"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/hidden">hidden</a></code>, -<code id="a-id"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/id">id</a></code>, -<code id="a-insertafter"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/insertafter">insertafter</a></code>, -<code id="a-insertbefore"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/insertbefore">insertbefore</a></code>, -<code id="a-left"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/left">left</a></code>, -<code id="a-maxheight"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/maxheight">maxheight</a></code>, -<code id="a-maxwidth"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/maxwidth">maxwidth</a></code>, -<code id="a-menu"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/menu">menu</a></code>, -<code id="a-minheight"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/minheight">minheight</a></code>, -<code id="a-minwidth"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/minwidth">minwidth</a></code>, -<code id="a-mousethrough"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/mousethrough">mousethrough</a></code>, -<code id="a-observes"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/observes">observes</a></code>, -<code id="a-ordinal"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/ordinal">ordinal</a></code>, -<code id="a-orient"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/orient">orient</a></code>, -<code id="a-pack"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/pack">pack</a></code>, -<code id="a-persist"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/persist">persist</a></code>, -<code id="a-popup"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/popup">popup</a></code>, -<code id="a-position"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/position">position</a></code>, -<code id="a-preference-editable"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/preference-editable">preference-editable</a></code>, -<code id="a-querytype"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/querytype">querytype</a></code>, -<code id="a-ref"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/ref">ref</a></code>, -<code id="a-removeelement"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/removeelement">removeelement</a></code>, -<code id="a-sortDirection"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/sortDirection">sortDirection</a></code>, -<code id="a-sortResource"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/sortResource">sortResource</a></code>, -<code id="a-sortResource2"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/sortResource2">sortResource2</a></code>, -<code id="a-statustext"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/statustext">statustext</a></code>, -<code id="a-style"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/style">style</a></code>, -<code id="a-template"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/template">template</a></code>, -<code id="a-tooltip"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/tooltip">tooltip</a></code>, -<code id="a-tooltiptext"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/tooltiptext">tooltiptext</a></code>, -<code id="a-top"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/top">top</a></code>, -<code id="a-uri"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/uri">uri</a></code>, -<code id="a-wait-cursor"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/wait-cursor">wait-cursor</a></code>, -<code id="a-width"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/width">width</a></code> </small></p> -</td> -</tr> -</tbody> -</table><p></p> - -<h3 id=".D0.A1.D0.B2.D0.BE.D0.B9.D1.81.D1.82.D0.B2.D0.B0" name=".D0.A1.D0.B2.D0.BE.D0.B9.D1.81.D1.82.D0.B2.D0.B0">Свойства</h3> - -<p></p><table style="border: 1px solid rgb(204, 204, 204); margin: 0px 0px 10px 10px; padding: 0px 10px; background: rgb(238, 238, 238) none repeat scroll 0% 50%;"> <tbody> <tr> <td> <p><strong>Наследуемые свойства</strong><br> <small> <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/align">align</a></span></code>, , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/allowEvents">allowEvents</a></span></code>, , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/boxObject">boxObject</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/builder">builder</a></span></code>, , , , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/className">className</a></span></code>, , , , , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/collapsed">collapsed</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/contextMenu">contextMenu</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/controllers">controllers</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/database">database</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/datasources">datasources</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/dir">dir</a></span></code>, , , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/flex">flex</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/height">height</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/hidden">hidden</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/id">id</a></span></code>, , , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/left">left</a></span></code>, , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/maxHeight">maxHeight</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/maxWidth">maxWidth</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/menu">menu</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/minHeight">minHeight</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/minWidth">minWidth</a></span></code>, , , , , , , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/observes">observes</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/ordinal">ordinal</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/orient">orient</a></span></code>, , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/pack">pack</a></span></code>, , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/persist">persist</a></span></code>, , , , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/ref">ref</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/resource">resource</a></span></code>, , , , , <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/statusText">statusText</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/style">style</a></span></code>, ,, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/tooltip">tooltip</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/tooltipText">tooltipText</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/top">top</a></span></code>, <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/width">width</a></span></code></small></p> </td> </tr> </tbody> -</table><p></p> - -<h3 id=".D0.9C.D0.B5.D1.82.D0.BE.D0.B4.D1.8B" name=".D0.9C.D0.B5.D1.82.D0.BE.D0.B4.D1.8B">Методы</h3> - -<p></p><table style="border: 1px solid rgb(204, 204, 204); margin: 0px 0px 10px 10px; padding: 0px 10px; background: rgb(238, 238, 238) none repeat scroll 0% 50%;"> <tbody> <tr> <td> <p><strong>Inherited Methods</strong><br> <small><code><a href="https://developer.mozilla.org/ru/docs/DOM/element.addEventListener">addEventListener()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.appendChild">appendChild()</a></code>, <span id="m-blur"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/blur">blur</a></code></span>, <span id="m-click"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/click">click</a></code></span>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.cloneNode">cloneNode()</a></code>, <a class="internal" href="/ru/DOM/Node.compareDocumentPosition" title="En/DOM/Node.compareDocumentPosition">compareDocumentPosition</a>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.dispatchEvent">dispatchEvent()</a></code>, <span id="m-doCommand"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/doCommand">doCommand</a></code></span>, <span id="m-focus"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/focus">focus</a></code></span>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getAttribute">getAttribute()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getAttributeNode">getAttributeNode()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getAttributeNodeNS">getAttributeNodeNS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getAttributeNS">getAttributeNS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getBoundingClientRect">getBoundingClientRect()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getClientRects">getClientRects()</a></code>, <span id="m-getElementsByAttribute"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/getElementsByAttribute">getElementsByAttribute</a></code></span>, <span id="m-getElementsByAttributeNS"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/getElementsByAttributeNS">getElementsByAttributeNS</a></code></span>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getElementsByClassName">getElementsByClassName()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getElementsByTagName">getElementsByTagName()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getElementsByTagNameNS">getElementsByTagNameNS()</a></code>, <a class="internal" href="/ru/DOM/Node.getFeature" title="En/DOM/Node.getFeature">getFeature</a>, <a class="internal" href="/ru/DOM/Node.getUserData" title="En/DOM/Node.getUserData">getUserData</a>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.hasAttribute">hasAttribute()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.hasAttributeNS">hasAttributeNS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.hasAttributes">hasAttributes()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.hasChildNodes">hasChildNodes()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.insertBefore">insertBefore()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.isDefaultNamespace">isDefaultNamespace()</a></code>, <a class="internal" href="/ru/DOM/Node.isEqualNode" title="En/DOM/Node.isEqualNode">isEqualNode</a>, <a class="internal" href="/ru/DOM/Node.isSameNode" title="En/DOM/Node.isSameNode">isSameNode</a>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.isSupported">isSupported()</a></code>, <a class="internal" href="/ru/DOM/Node.lookupNamespaceURI" title="En/DOM/Node.lookupNamespaceURI">lookupNamespaceURI</a>, <a class="internal" href="/ru/DOM/Node.lookupPrefix" title="En/DOM/Node.lookupPrefix">lookupPrefix</a>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.normalize">normalize()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.querySelector">querySelector()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.querySelectorAll">querySelectorAll()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeAttribute">removeAttribute()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeAttributeNode">removeAttributeNode()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeAttributeNS">removeAttributeNS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeChild">removeChild()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeEventListener">removeEventListener()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.replaceChild">replaceChild()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.setAttribute">setAttribute()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.setAttributeNode">setAttributeNode()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.setAttributeNodeNS">setAttributeNodeNS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.setAttributeNS">setAttributeNS()</a></code>, <a class="internal" href="/ru/DOM/Node.setUserData" title="En/DOM/Node.setUserData">setUserData</a></small></p> </td> </tr> </tbody> -</table><p></p> - -<h3 id=".D0.A1.D0.BC._.D1.82.D0.B0.D0.BA.D0.B6.D0.B5" name=".D0.A1.D0.BC._.D1.82.D0.B0.D0.BA.D0.B6.D0.B5">См. также</h3> - -<p></p> diff --git a/files/ru/mozilla/tech/xul/attribute/disabled/index.html b/files/ru/mozilla/tech/xul/attribute/disabled/index.html deleted file mode 100644 index aa8ff7ebb9..0000000000 --- a/files/ru/mozilla/tech/xul/attribute/disabled/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: disabled -slug: Mozilla/Tech/XUL/Attribute/disabled -tags: - - XUL Attributes - - XUL Reference -translation_of: Archive/Mozilla/XUL/Attribute/disabled ---- -<div class="noinclude"> - <span class="breadcrumbs xulRefAttr_breadcrumbs">« <a href="/ru/docs/XUL/Справочник">Справочник по XUL</a></span></div> -<dl> - <dt> - <code id="a-disabled"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/disabled">disabled</a></code></dt> - <dd> - Тип: <em>булево</em></dd> - <dd> - Указывает, отключен ли элемент или нет. В случае, если элемент имеет значение <code>true</code>, он отключается. Отключенные элементы имеют, как правило, так называемый "затенённый" цветовой эффект. Если элемент отключен, он не будет отвечать на какие-либо действия пользователя, он не может быть выбран, и событие <code>command</code> в этом случае не вызывается. - <div class="noinclude"> - <br> - Тем не менее, элемент всё ещё будет отвечать событиям, связанным с мышью (т.е. реагировать на <code>mouse events</code>). Для активации элемента, присвойте атрибуту значение <code>false</code>.</div> - </dd> - <dd> - Графические элементы управления имеют свойство <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/disabled">disabled</a></span></code>, которое (кроме меню и их элементов) принято использовать в качестве атрибута на случай, если понадобится расширить функционал: добавить/изменить режим работы элемента, задействовать/отключить элемент и так далее.</dd> -</dl> -<div class="noinclude"> - <img alt="Image:XUL_ref_attr_disabled.png" class="internal" src="/@api/deki/files/1807/=XUL_ref_attr_disabled.png"> - <pre class="brush: js">// Отключение элемента -document.getElementById('buttonRemove').setAttribute("disabled", "true"); - -// Задействование элемента путём снятия атрибута "disabled" -document.getElementById('buttonRemove').removeAttribute("disabled"); -</pre> - <p></p><div class="blockIndicator standardNote"> - <p><a href="https://developer.mozilla.org/ru/docs/Mozilla/Firefox/Releases/3.5">Замечание по Firefox 3.5</a></p> - <p style="font-weight: 400;">Поддержка данного атрибута была добавлена в Firefox 3.5 для элементов <a class="internal" href="/en-US/docs/XUL/keyset" title="en/XUL/Keyset"><code>keyset</code></a>.</p> -</div><p></p> -</div> -<p> </p> diff --git a/files/ru/mozilla/tech/xul/attribute/hidden/index.html b/files/ru/mozilla/tech/xul/attribute/hidden/index.html deleted file mode 100644 index f3a704e075..0000000000 --- a/files/ru/mozilla/tech/xul/attribute/hidden/index.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: hidden -slug: Mozilla/Tech/XUL/Attribute/hidden -tags: - - XUL Attributes - - XUL Reference -translation_of: Archive/Mozilla/XUL/Attribute/hidden ---- -<div class="noinclude"> - <span class="breadcrumbs xulRefAttr_breadcrumbs">« <a href="/ru/docs/XUL/Справочник">Справочник по XUL</a></span></div> -<dl> - <dt> - <code id="a-hidden"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/hidden">hidden</a></code></dt> - <dd> - Тип: <em>булево</em></dd> - <dd> - В случае, если значение установлено как <code>true</code>, элемент не отображается. Аналогом является установка в CSS свойства отображения '<code>none</code>'.</dd> -</dl> -<div class="noinclude"> - <h2 id="Смотрите_также">Смотрите также</h2> - <ul> - <li><a class="internal" href="/en/XUL/Attribute/collapsed" title="en/XUL/Attribute/collapsed">collapsed</a></li> - </ul> - <p></p> -</div> -<p> </p> diff --git a/files/ru/mozilla/tech/xul/attribute/index.html b/files/ru/mozilla/tech/xul/attribute/index.html deleted file mode 100644 index ef0984c948..0000000000 --- a/files/ru/mozilla/tech/xul/attribute/index.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Attribute -slug: Mozilla/Tech/XUL/Attribute ---- -<p> </p> - -<p>This page was auto-generated because a user created a sub-page to this page.</p> - -<p> </p> diff --git a/files/ru/mozilla/tech/xul/index.html b/files/ru/mozilla/tech/xul/index.html deleted file mode 100644 index 326dbea5cf..0000000000 --- a/files/ru/mozilla/tech/xul/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: XUL -slug: Mozilla/Tech/XUL -tags: - - XUL -translation_of: Archive/Mozilla/XUL ---- -<p> </p> - -<div class="callout-box"><strong><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL" title="ru/Руководство_по_XUL">Руководство по XUL</a></strong><br> -Подробное руководство, которое поможет вам легко начать работать с XUL. Первоначально было опубликовано на XULPlanet.</div> - -<div><strong>XUL</strong> (XML User Interface Language) — это основанный на <a href="/ru/XML" title="ru/XML">XML</a> язык разметки, используемый в приложениях Mozilla. XUL позволяет создавать кроссплатформенные приложения с интерфейсами любой сложности, как использующие интернет, так и работающие локально. В приложениях легко изменить графику, всплывающие подсказки и расположение элементов так, чтобы их интерфейс отвечал требованиям бренда или был переведен на любой язык. Веб-разработчики, уже хорошо знакомые с Dynamic HTML (<a href="/ru/DHTML" title="ru/DHTML">DHTML</a>), легко изучат XUL и так же легко смогут создавать приложения с его помощью. Чтобы посмотреть примеры интерфейсов на XUL, откройте страницу <a class="external" href="http://www.hevanet.com/acorbin/xul/top.xul">XUL Periodic Table</a> в браузере Firefox или любом другом браузере на движке <a href="/ru/Gecko" title="ru/Gecko">Gecko</a>.</div> - -<table class="topicpage-table"> - <tbody> - <tr> - <td> - <h4 id=".D0.94.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0.D1.86.D0.B8.D1.8F" name=".D0.94.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0.D1.86.D0.B8.D1.8F"><a href="/Special:Tags?tag=XUL&language=ru" title="Special:Tags?tag=XUL&language=ru">Документация</a></h4> - - <dl> - <dt><a href="/ru/XUL/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA" title="ru/XUL/Справочник">Справочник по XUL</a></dt> - <dd><small>См. также: докуметация MDC на <a href="/ru/Preferences_System" title="ru/Preferences_System">prefwindow</a>.</small></dd> - </dl> - - <dl> - <dt><a href="/en-US/docs/The_Joy_of_XUL" title="en-US/docs/The_Joy_of_XUL">Радости XUL</a></dt> - <dd><small>Здесь перечисленны основные возможности компонентов XUL.</small></dd> - </dl> - - <dl> - <dt><a href="/ru/%D0%A1%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9_%D1%81_Firefox_1.5" title="ru/Совместимость_приложений_с_Firefox_1.5">Совместимость приложений с Firefox 1.5</a></dt> - <dd><small>Список изменений в <a href="/ru/Firefox_1.5" title="ru/Firefox_1.5">Firefox 1.5</a>, важных для разработчиков на XUL.</small></dd> - </dl> - - <dl> - <dt><a href="/ru/XUL/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B" title="ru/XUL/Шаблоны">Руководство по шаблонам в XUL</a></dt> - <dd><small>Детальное руководство, рассказывающее о шаблонах, которые генерируют содержимое документа XUL на основе динамических источников данных.</small></dd> - </dl> - - <dl> - <dt><a href="/ru/XUL/%D0%9E%D0%B2%D0%B5%D1%80%D0%BB%D0%B5%D0%B8" title="ru/XUL/Оверлеи">Оверлеи</a></dt> - <dd><small>Статья про оверлеи. Оверлеи используются для добавления элементов в уже существующие интерфейсы. Оверлеи — это очень удобный механизм для функционального или частичного расширения основанных на XUL приложений.</small></dd> - </dl> - - <p><span class="alllinks"><a href="/Special:Tags?tag=XUL&language=ru" title="Special:Tags?tag=XUL&language=ru">Все ссылки…</a></span></p> - </td> - <td> - <h4 id=".D0.A1.D0.BE.D0.BE.D0.B1.D1.89.D0.B5.D1.81.D1.82.D0.B2.D0.BE" name=".D0.A1.D0.BE.D0.BE.D0.B1.D1.89.D0.B5.D1.81.D1.82.D0.B2.D0.BE">Сообщество</h4> - - <ul> - <li>Форумы Mozilla…</li> - </ul> - - <p></p><ul> - <li><a href="https://lists.mozilla.org/listinfo/dev-tech-xul"> Почтовая рассылка</a></li> - - - <li><a href="http://groups.google.com/group/mozilla.dev.tech.xul"> newsgroup</a></li> - <li><a href="http://groups.google.com/group/mozilla.dev.tech.xul/feeds"> Новостная лента</a></li> -</ul><p></p> - - <ul> - <li><a class="link-irc" href="irc://irc.mozilla.org/xul">#xul на irc.mozilla.org</a></li> - </ul> - - <h4 id=".D0.A3.D1.82.D0.B8.D0.BB.D0.B8.D1.82.D1.8B" name=".D0.A3.D1.82.D0.B8.D0.BB.D0.B8.D1.82.D1.8B">Утилиты</h4> - - <ul> - <li><a class="external" href="http://ted.mielczarek.org/code/mozilla/extensiondev/">Расширение для разработчиков других расширений</a> (в том числе Live XUL Editor)</li> - <li><a class="external" href="http://www.extensionsmirror.nl/index.php?showtopic=751">XULRef сайдбар</a></li> - <li><a href="/ru/%D0%98%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D0%BE%D1%80_DOM" title="ru/Инспектор_DOM">Инспектор DOM</a></li> - </ul> - - <p><span class="alllinks"><a href="/Special:Tags?tag=XUL:%D0%A3%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B&language=ru" title="Special:Tags?tag=XUL:Утилиты&language=ru">Все ссылки…</a></span></p> - - <h4 id=".D0.A1.D0.BC._.D1.82.D0.B0.D0.BA.D0.B6.D0.B5" name=".D0.A1.D0.BC._.D1.82.D0.B0.D0.BA.D0.B6.D0.B5">См. также</h4> - - <dl> - <dd><a href="/ru/JavaScript" title="ru/JavaScript">JavaScript</a>, <a href="/ru/XBL" title="ru/XBL">XBL</a>, <a href="/ru/CSS" title="ru/CSS">CSS</a>, <a href="/ru/RDF" title="ru/RDF">RDF</a>, <a href="/ru/%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F" title="ru/Расширения">Расширения</a>, <a href="/ru/XULRunner" title="ru/XULRunner">XULRunner</a></dd> - </dl> - </td> - </tr> - </tbody> -</table> - -<p><span class="comment">Категории</span></p> - -<p><span class="comment">Interwiki Language Links</span></p> - -<p> </p> - -<p></p> diff --git a/files/ru/mozilla/tech/xul/property/dateleadingzero/index.html b/files/ru/mozilla/tech/xul/property/dateleadingzero/index.html deleted file mode 100644 index ea5b2dd298..0000000000 --- a/files/ru/mozilla/tech/xul/property/dateleadingzero/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: dateLeadingZero -slug: Mozilla/Tech/XUL/Property/dateLeadingZero -translation_of: Archive/Mozilla/XUL/Property/dateLeadingZero ---- -<div class="noinclude"> - <span class="breadcrumbs XULRefProp_breadcrumbs">« <a href="/ru/docs/XUL/Справочник" title="XUL/Справочник">XUL Справочник</a></span></div> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/dateLeadingZero">dateLeadingZero</a></span></code></dt> - <dd> - Type: <em>булево</em></dd> - <dd> - Значение, имеющее атрибут "только чтение", и указывающее, надо ли отображать ноль перед числом дня даты в случае, если число меньше 10.</dd> -</dl> diff --git a/files/ru/mozilla/tech/xul/property/datepicker.value/index.html b/files/ru/mozilla/tech/xul/property/datepicker.value/index.html deleted file mode 100644 index 9585adae32..0000000000 --- a/files/ru/mozilla/tech/xul/property/datepicker.value/index.html +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: datepicker.value -slug: Mozilla/Tech/XUL/Property/datepicker.value -translation_of: Archive/Mozilla/XUL/Property/datepicker.value ---- -<div class="noinclude"> - <span class="breadcrumbs XULRefProp_breadcrumbs">« <a href="/ru/docs/XUL/Справочник" title="XUL/Справочник">XUL Справочник</a></span></div> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/datepicker.value">value</a></span></code></dt> - <dd> - Type: <em>строка</em></dd> - <dd> - Служит для отображения выбранной даты в формате <em><var>ГГГГ-ММ-ДД</var></em>. В отличие от свойства <code><code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/month">month</a></span></code></code>, в этом значении месяцы ранжируются от 01 до 12. Используйте это свойство для установки нужной даты.</dd> -</dl> diff --git a/files/ru/mozilla/tech/xul/property/index.html b/files/ru/mozilla/tech/xul/property/index.html deleted file mode 100644 index e6a3fd7eae..0000000000 --- a/files/ru/mozilla/tech/xul/property/index.html +++ /dev/null @@ -1,295 +0,0 @@ ---- -title: Property -slug: Mozilla/Tech/XUL/Property -tags: - - NeedsTranslation - - TopicStub - - XUL Properties - - XUL Reference -translation_of: Archive/Mozilla/XUL/Property ---- -<p><span class="breadcrumbs XULRefProp_breadcrumbs">« <a href="/ru/docs/XUL/Справочник" title="XUL/Справочник">XUL Справочник</a></span></p> -<ul> - <li><a href="/en/XUL/Property/accessible" title="en/XUL/Property/accessible">accessible</a></li> - <li><a href="/en/XUL/Property/accessibleType" title="en/XUL/Property/accessibleType">accessibleType</a></li> - <li><a href="/en/XUL/Property/accessKey" title="en/XUL/Property/accessKey">accessKey</a></li> - <li><a href="/en/XUL/Property/align" title="en/XUL/Property/align">align</a></li> - <li><a href="/en/XUL/Property/allNotifications" title="en/XUL/Property/allNotifications">allNotifications</a></li> - <li><a href="/en/XUL/Property/allowEvents" title="en/XUL/Property/allowEvents">allowEvents</a></li> - <li><a href="/en/XUL/Property/alwaysOpenPopup" title="en/XUL/Property/alwaysOpenPopup">alwaysOpenPopup</a></li> - <li><a href="/en/XUL/Property/amIndicator" title="en/XUL/Property/amIndicator">amIndicator</a></li> - <li><a href="/en/XUL/Property/appLocale" title="en/XUL/Property/appLocale">appLocale</a></li> - <li><a href="/en/XUL/Property/autoCheck" title="en/XUL/Property/autoCheck">autoCheck</a></li> - <li><a href="/en/XUL/Property/autoFill" title="en/XUL/Property/autoFill">autoFill</a></li> - <li><a href="/en/XUL/Property/autoFillAfterMatch" title="en/XUL/Property/autoFillAfterMatch">autoFillAfterMatch</a></li> - <li><a href="/en/XUL/Property/boxObject" title="en/XUL/Property/boxObject">boxObject</a></li> - <li><a href="/en/XUL/Property/browsers" title="en/XUL/Property/browsers">browsers</a></li> - <li><a href="/en/XUL/Property/builder" title="en/XUL/Property/builder">builder</a></li> - <li><a href="/en/XUL/Property/builderView" title="en/XUL/Property/builderView">builderView</a></li> - <li><a href="/en/XUL/Property/buttons" title="en/XUL/Property/buttons">buttons</a></li> - <li><a href="/en/XUL/Property/canAdvance" title="en/XUL/Property/canAdvance">canAdvance</a></li> - <li><a href="/en/XUL/Property/canGoBack" title="en/XUL/Property/canGoBack">canGoBack</a></li> - <li><a href="/en/XUL/Property/canGoForward" title="en/XUL/Property/canGoForward">canGoForward</a></li> - <li><a href="/en/XUL/Property/canRewind" title="en/XUL/Property/canRewind">canRewind</a></li> - <li><a href="/en/XUL/Property/checked" title="en/XUL/Property/checked">checked</a></li> - <li><a href="/en/XUL/Property/checkState" title="en/XUL/Property/checkState">checkState</a></li> - <li><a href="/en/XUL/Property/child" title="en/XUL/Property/child">child</a></li> - <li><a href="/en/XUL/Property/children" title="en/XUL/Property/children">children</a></li> - <li><a href="/en/XUL/Property/className" title="en/XUL/Property/className">className</a></li> - <li><a href="/en/XUL/Property/clickSelectsAll" title="en/XUL/Property/clickSelectsAll">clickSelectsAll</a></li> - <li><a class="internal" href="/en/XUL/Property/clientHeight" title="en/XUL/Property/clientHeight">clientHeight</a> </li> - <li><a class="internal" href="/en/XUL/Property/clientWidth" title="en/XUL/Property/clientWidth">clientWidth</a> </li> - <li><a href="/en/XUL/Property/collapsed" title="en/XUL/Property/collapsed">collapsed</a></li> - <li><a href="/en/XUL/Property/color" title="en/XUL/Property/color">color</a></li> - <li><a href="/en/XUL/Property/columns" title="en/XUL/Property/columns">columns</a></li> - <li><a href="/en/XUL/Property/command" title="en/XUL/Property/command">command</a></li> - <li><a href="/en/XUL/Property/commandManager" title="en/XUL/Property/commandManager">commandManager</a></li> - <li><a href="/en/XUL/Property/completeDefaultIndex" title="en/XUL/Property/completeDefaultIndex">completeDefaultIndex</a></li> - <li><a href="/en/XUL/Property/container" title="en/XUL/Property/container">container</a></li> - <li><a href="/en/XUL/Property/contentDocument" title="en/XUL/Property/contentDocument">contentDocument</a></li> - <li><a href="/en/XUL/Property/contentPrincipal" title="en/XUL/Property/contentPrincipal">contentPrincipal</a></li> - <li><a href="/en/XUL/Property/contentTitle" title="en/XUL/Property/contentTitle">contentTitle</a></li> - <li><a href="/en/XUL/Property/contentView" title="en/XUL/Property/contentView">contentView</a></li> - <li><a href="/en/XUL/Property/contentViewerEdit" title="en/XUL/Property/contentViewerEdit">contentViewerEdit</a></li> - <li><a href="/en/XUL/Property/contentViewerFile" title="en/XUL/Property/contentViewerFile">contentViewerFile</a></li> - <li><a href="/en/XUL/Property/contentWindow" title="en/XUL/Property/contentWindow">contentWindow</a></li> - <li><a href="/en/XUL/Property/contextMenu" title="en/XUL/Property/contextMenu">contextMenu</a></li> - <li><a href="/en/XUL/Property/control" title="en/XUL/Property/control">control</a></li> - <li><a href="/en/XUL/Property/controller" title="en/XUL/Property/controller">controller</a></li> - <li><a href="/en/XUL/Property/controllers" title="en/XUL/Property/controllers">controllers</a></li> - <li><a href="/en/XUL/Property/crop" title="en/XUL/Property/crop">crop</a></li> - <li><a href="/en/XUL/Property/current" title="en/XUL/Property/current">current</a></li> - <li><a href="/en/XUL/Property/currentIndex" title="en/XUL/Property/currentIndex">currentIndex</a></li> - <li><a href="/en/XUL/Property/currentItem" title="en/XUL/Property/currentItem">currentItem</a></li> - <li><a href="/en/XUL/Property/currentNotification" title="en/XUL/Property/currentNotification">currentNotification</a></li> - <li><a href="/en/XUL/Property/currentPage" title="en/XUL/Property/currentPage">currentPage</a></li> - <li><a href="/en/XUL/Property/currentPane" title="en/XUL/Property/currentPane">currentPane</a></li> - <li><a href="/en/XUL/Property/currentSet" title="en/XUL/Property/currentSet">currentSet</a></li> - <li><a href="/en/XUL/Property/currentURI" title="en/XUL/Property/currentURI">currentURI</a></li> - <li><a href="/en/XUL/Property/customToolbarCount" title="en/XUL/Property/customToolbarCount">customToolbarCount</a></li> - <li><a href="/en/XUL/Property/database" title="en/XUL/Property/database">database</a></li> - <li><a href="/en/XUL/Property/datasources" title="en/XUL/Property/datasources">datasources</a></li> - <li><a href="/en/XUL/Property/date" title="en/XUL/Property/date">date</a></li> - <li><a href="/en/XUL/Property/dateLeadingZero" title="en/XUL/Property/dateLeadingZero">dateLeadingZero</a></li> - <li><a href="/en/XUL/Property/dateValue" title="en/XUL/Property/dateValue">dateValue</a></li> - <li><a href="/en/XUL/Property/decimalPlaces" title="en/XUL/Property/decimalPlaces">decimalPlaces</a></li> - <li><a href="/en/XUL/Property/decimalSymbol" title="en/XUL/Property/decimalSymbol">decimalSymbol</a></li> - <li><a href="/en/XUL/Property/defaultButton" title="en/XUL/Property/defaultButton">defaultButton</a></li> - <li><a href="/en/XUL/Property/defaultValue" title="en/XUL/Property/defaultValue">defaultValue</a></li> - <li><a href="/en/XUL/Property/description" title="en/XUL/Property/description">description</a></li> - <li><a href="/en/XUL/Property/dir" title="en/XUL/Property/dir">dir</a></li> - <li><a href="/en/XUL/Property/disableAutocomplete" title="en/XUL/Property/disableAutocomplete">disableAutocomplete</a></li> - <li><a href="/en/XUL/Property/disableAutocomplete" title="en/XUL/Property/disableAutocomplete">disableAutoComplete</a></li> - <li><a href="/en/XUL/Property/disableautoselect" title="en/XUL/Property/disableautoselect">disableautoselect</a></li> - <li><a href="/en/XUL/Property/disabled" title="en/XUL/Property/disabled">disabled</a></li> - <li><a href="/en/XUL/Property/disableKeyNavigation" title="en/XUL/Property/disableKeyNavigation">disableKeyNavigation</a></li> - <li><a href="/en/XUL/Property/dlgType" title="en/XUL/Property/dlgType">dlgType</a></li> - <li><a href="/en/XUL/Property/docShell" title="en/XUL/Property/docShell">docShell</a></li> - <li><a href="/en/XUL/Property/documentCharsetInfo" title="en/XUL/Property/documentCharsetInfo">documentCharsetInfo</a></li> - <li><a href="/en/XUL/Property/editable" title="en/XUL/Property/editable">editable</a></li> - <li><a href="/en/XUL/Property/editingColumn" title="en/XUL/Property/editingColumn">editingColumn</a></li> - <li><a href="/en/XUL/Property/editingRow" title="en/XUL/Property/editingRow">editingRow</a></li> - <li><a href="/en/XUL/Property/editingSession" title="en/XUL/Property/editingSession">editingSession</a></li> - <li><a href="/en/XUL/Property/editor" title="en/XUL/Property/editor">editor</a></li> - <li><a href="/en/XUL/Property/editortype" title="en/XUL/Property/editortype">editortype</a></li> - <li><a href="/en/XUL/Property/emptyText" title="en/XUL/Property/emptyText">emptyText</a> <span class="inlineIndicator deprecated deprecatedInline" title="(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)">Устарело Gecko 2</span></li> - <li><a href="/en/XUL/Property/enableColumnDrag" title="en/XUL/Property/enableColumnDrag">enableColumnDrag</a></li> - <li><a href="/en/XUL/Property/eventNode" title="en/XUL/Property/eventNode">eventNode</a></li> - <li><a href="/en/XUL/Property/firstOrdinalColumn" title="en/XUL/Property/firstOrdinalColumn">firstOrdinalColumn</a></li> - <li><a href="/en/XUL/Property/firstPermanentChild" title="en/XUL/Property/firstPermanentChild">firstPermanentChild</a></li> - <li><a href="/en/XUL/Property/flex" title="en/XUL/Property/flex">flex</a></li> - <li><a href="/en/XUL/Property/focused" title="en/XUL/Property/focused">focused</a></li> - <li><a href="/en/XUL/Property/focusedItem" title="en/XUL/Property/focusedItem">focusedItem</a></li> - <li><a href="/en/XUL/Property/forceComplete" title="en/XUL/Property/forceComplete">forceComplete</a></li> - <li><a href="/en/XUL/Property/group" title="en/XUL/Property/group">group</a></li> - <li><a href="/en/XUL/Property/handleCtrlPageUpDown" title="en/XUL/Property/handleCtrlPageUpDown">handleCtrlPageUpDown</a></li> - <li><a href="/en/XUL/Property/handleCtrlTab" title="en/XUL/Property/handleCtrlTab">handleCtrlTab</a></li> - <li><a href="/En/XUL/Property/HasUserValue" title="en/XUL/Property/hasUserValue">hasUserValue</a></li> - <li><a href="/en/XUL/Property/height" title="en/XUL/Property/height">height</a></li> - <li><a href="/en/XUL/Property/hidden" title="en/XUL/Property/hidden">hidden</a></li> - <li><a href="/en/XUL/Property/hideSeconds" title="en/XUL/Property/hideSeconds">hideSeconds</a></li> - <li><a href="/En/XUL/Property/HighlightNonMatches" title="en/XUL/Property/highlightNonMatches">highlightNonMatches</a> </li> - <li><a href="/en/XUL/Property/homePage" title="en/XUL/Property/homePage">homePage</a></li> - <li><a href="/en/XUL/Property/hour" title="en/XUL/Property/hour">hour</a></li> - <li><a href="/en/XUL/Property/hourLeadingZero" title="en/XUL/Property/hourLeadingZero">hourLeadingZero</a></li> - <li><a href="/en/XUL/Property/id" title="en/XUL/Property/id">id</a></li> - <li><a href="/en/XUL/Property/ignoreBlurWhileSearching" title="en/XUL/Property/ignoreBlurWhileSearching">ignoreBlurWhileSearching</a></li> - <li><a href="/en/XUL/Property/image" title="en/XUL/Property/image">image</a></li> - <li><a href="/en/XUL/Property/increment" title="en/XUL/Property/increment">increment</a></li> - <li><a href="/en/XUL/Property/inputField" title="en/XUL/Property/inputField">inputField</a></li> - <li><a href="/en/XUL/Property/inverted" title="en/XUL/Property/inverted">inverted</a></li> - <li><a href="/en/XUL/Property/is24HourClock" title="en/XUL/Property/is24HourClock">is24HourClock</a></li> - <li><a href="/en/XUL/Property/isPM" title="en/XUL/Property/isPM">isPM</a></li> - <li><a href="/en/XUL/Property/isSearching" title="en/XUL/Property/isSearching">isSearching</a></li> - <li><a href="/en/XUL/Property/isWaiting" title="en/XUL/Property/isWaiting">isWaiting</a></li> - <li><a href="/en/XUL/Property/itemCount" title="en/XUL/Property/itemCount">itemCount</a></li> - <li><a href="/en/XUL/Property/label" title="en/XUL/Property/label">label</a></li> - <li><a href="/en/XUL/Property/labelElement" title="en/XUL/Property/labelElement">labelElement</a></li> - <li><a href="/en/XUL/Property/lastPermanentChild" title="en/XUL/Property/lastPermanentChild">lastPermanentChild</a></li> - <li><a href="/en/XUL/Property/lastSelected" title="en/XUL/Property/lastSelected">lastSelected</a></li> - <li><a href="/en/XUL/Property/left" title="en/XUL/Property/left">left</a></li> - <li><a href="/en/XUL/Property/linkedPanel" title="en/XUL/Property/linkedPanel">linkedPanel</a></li> - <li><a href="/en/XUL/Property/listBoxObject" title="en/XUL/Property/listBoxObject">listBoxObject</a></li> - <li><a href="/en/XUL/Property/locked" title="en/XUL/Property/locked">locked</a></li> - <li><a href="/en/XUL/Property/markupDocumentViewer" title="en/XUL/Property/markupDocumentViewer">markupDocumentViewer</a></li> - <li><a href="/en/XUL/Property/max" title="en/XUL/Property/max">max</a></li> - <li><a href="/en/XUL/Property/maxHeight" title="en/XUL/Property/maxHeight">maxHeight</a></li> - <li><a href="/en/XUL/Property/maxLength" title="en/XUL/Property/maxLength">maxLength</a></li> - <li><a href="/en/XUL/Property/maxRows" title="en/XUL/Property/maxRows">maxRows</a></li> - <li><a href="/en/XUL/Property/maxWidth" title="en/XUL/Property/maxWidth">maxWidth</a></li> - <li><a href="/en/XUL/Property/menu" title="en/XUL/Property/menu">menu</a></li> - <li><a href="/en/XUL/Property/menuBoxObject" title="en/XUL/Property/menuBoxObject">menuBoxObject</a></li> - <li><a href="/en/XUL/Property/menupopup" title="en/XUL/Property/menupopup">menupopup</a></li> - <li><a href="/en/XUL/Property/min" title="en/XUL/Property/min">min</a></li> - <li><a href="/en/XUL/Property/minHeight" title="en/XUL/Property/minHeight">minHeight</a></li> - <li><a href="/en/XUL/Property/minResultsForPopup" title="en/XUL/Property/minResultsForPopup">minResultsForPopup</a></li> - <li><a href="/en/XUL/Property/minWidth" title="en/XUL/Property/minWidth">minWidth</a></li> - <li><a href="/en/XUL/Property/minute" title="en/XUL/Property/minute">minute</a></li> - <li><a href="/en/XUL/Property/minuteLeadingZero" title="en/XUL/Property/minuteLeadingZero">minuteLeadingZero</a></li> - <li><a href="/en/XUL/Property/mode" title="en/XUL/Property/mode">mode</a></li> - <li><a href="/en/XUL/Property/month" title="en/XUL/Property/month">month</a></li> - <li><a href="/en/XUL/Property/monthLeadingZero" title="en/XUL/Property/monthLeadingZero">monthLeadingZero</a></li> - <li><a href="/en/XUL/Property/name" title="en/XUL/Property/name">name</a></li> - <li><a href="/en/XUL/Property/next" title="en/XUL/Property/next">next</a></li> - <li><a href="/en/XUL/Property/noMatch" title="en/XUL/Property/noMatch">noMatch</a></li> - <li><a href="/en/XUL/Property/notificationsHidden" title="en/XUL/Property/notificationsHidden">notificationsHidden</a></li> - <li><a href="/en/XUL/Property/object" title="en/XUL/Property/object">object</a></li> - <li><a href="/en/XUL/Property/observes" title="en/XUL/Property/observes">observes</a></li> - <li><a href="/en/XUL/Property/onFirstPage" title="en/XUL/Property/onFirstPage">onFirstPage</a></li> - <li><a href="/en/XUL/Property/onLastPage" title="en/XUL/Property/onLastPage">onLastPage</a></li> - <li><a href="/en/XUL/Property/open" title="en/XUL/Property/open">open</a></li> - <li><a href="/en/XUL/Property/ordinal" title="en/XUL/Property/ordinal">ordinal</a></li> - <li><a href="/en/XUL/Property/orient" title="en/XUL/Property/orient">orient</a></li> - <li><a href="/en/XUL/Property/pack" title="en/XUL/Property/pack">pack</a></li> - <li><a href="/en/XUL/Property/pageCount" title="en/XUL/Property/pageCount">pageCount</a></li> - <li><a href="/en/XUL/Property/pageid" title="en/XUL/Property/pageid">pageid</a></li> - <li><a href="/en/XUL/Property/pageIncrement" title="en/XUL/Property/pageIncrement">pageIncrement</a></li> - <li><a href="/en/XUL/Property/pageIndex" title="en/XUL/Property/pageIndex">pageIndex</a></li> - <li><a href="/en/XUL/Property/pageStep" title="en/XUL/Property/pageStep">pageStep</a></li> - <li><a href="/en/XUL/Property/parentContainer" title="en/XUL/Property/parentContainer">parentContainer</a></li> - <li><a href="/en/XUL/Property/palette" title="en/XUL/Property/palette">palette</a></li> - <li><a href="/en/XUL/Property/persist" title="en/XUL/Property/persist">persist</a></li> - <li><a href="/en/XUL/Property/persistence" title="en/XUL/Property/persistence">persistence</a></li> - <li><a href="/en/XUL/Property/placeholder" title="en/XUL/Property/placeholder">placeholder</a> </li> - <li><a href="/en/XUL/Property/pmIndicator" title="en/XUL/Property/pmIndicator">pmIndicator</a></li> - <li><a href="/en/XUL/Property/popup" title="en/XUL/Property/popup">popup</a></li> - <li><a href="/en/XUL/Property/popupBoxObject" title="en/XUL/Property/popupBoxObject">popupBoxObject</a></li> - <li><a href="/en/XUL/Property/popupOpen" title="en/XUL/Property/popupOpen">popupOpen</a></li> - <li><a href="/en/XUL/Property/position" title="en/XUL/Property/position">position</a></li> - <li><a href="/en/XUL/Property/predicate" title="en/XUL/Property/predicate">predicate</a></li> - <li><a href="/en/XUL/Property/preferenceElements" title="en/XUL/Property/preferenceElements">preferenceElements</a></li> - <li><a href="/en/XUL/Property/preferencePanes" title="en/XUL/Property/preferencePanes">preferencePanes</a></li> - <li><a href="/en/XUL/Property/preferences" title="en/XUL/Property/preferences">preferences</a></li> - <li><a href="/en/XUL/Property/priority" title="en/XUL/Property/priority">priority</a></li> - <li><a href="/en/XUL/Property/radioGroup" title="en/XUL/Property/radioGroup">radioGroup</a></li> - <li><a href="/en/XUL/Property/readOnly" title="en/XUL/Property/readOnly">readonly</a></li> - <li><a href="/en/XUL/Property/readOnly" title="en/XUL/Property/readOnly">readOnly</a></li> - <li><a href="/en/XUL/Property/ref" title="en/XUL/Property/ref">ref</a></li> - <li><a href="/en/XUL/Property/resource" title="en/XUL/Property/resource">resource</a></li> - <li><a href="/en/XUL/Property/resultsPopup" title="en/XUL/Property/resultsPopup">resultsPopup</a></li> - <li><a href="/en/XUL/Property/scrollBoxObject" title="en/XUL/Property/scrollBoxObject">scrollBoxObject</a></li> - <li><a href="/en/XUL/Property/scrollIncrement" title="en/XUL/Property/scrollIncrement">scrollIncrement</a></li> - <li><a class="internal" href="/en/XUL/Property/scrollHeight" title="en/XUL/Property/scrollHeight">scrollHeight</a> </li> - <li><a class="internal" href="/en/XUL/Property/scrollWidth" title="en/XUL/Property/scrollWidth">scrollWidth</a> </li> - <li><a href="/En/XUL/Property/SearchButton" title="en/XUL/Property/searchButton">searchButton</a></li> - <li><a href="/en/XUL/Property/searchCount" title="en/XUL/Property/searchCount">searchCount</a></li> - <li><a href="/en/XUL/Property/searchLabel" title="en/XUL/Property/searchLabel">searchLabel</a></li> - <li><a href="/en/XUL/Property/searchParam" title="en/XUL/Property/searchParam">searchParam</a></li> - <li><a href="/en/XUL/Property/searchSessions" title="en/XUL/Property/searchSessions">searchSessions</a></li> - <li><a href="/en/XUL/Property/second" title="en/XUL/Property/second">second</a></li> - <li><a href="/en/XUL/Property/secondLeadingZero" title="en/XUL/Property/secondLeadingZero">secondLeadingZero</a></li> - <li><a href="/en/XUL/Property/securityUI" title="en/XUL/Property/securityUI">securityUI</a></li> - <li><a href="/en/XUL/Property/selected" title="en/XUL/Property/selected">selected</a></li> - <li><a href="/en/XUL/Property/selectedBrowser" title="en/XUL/Property/selectedBrowser">selectedBrowser</a></li> - <li><a href="/en/XUL/Property/selectedCount" title="en/XUL/Property/selectedCount">selectedCount</a></li> - <li><a href="/en/XUL/Property/selectedIndex" title="en/XUL/Property/selectedIndex">selectedIndex</a></li> - <li><a href="/en/XUL/Property/selectedItem" title="en/XUL/Property/selectedItem">selectedItem</a></li> - <li><a href="/en/XUL/Property/selectedItems" title="en/XUL/Property/selectedItems">selectedItems</a></li> - <li><a href="/en/XUL/Property/selectedPanel" title="en/XUL/Property/selectedPanel">selectedPanel</a></li> - <li><a href="/en/XUL/Property/selectedTab" title="en/XUL/Property/selectedTab">selectedTab</a></li> - <li><a href="/en/XUL/Property/selectionEnd" title="en/XUL/Property/selectionEnd">selectionEnd</a></li> - <li><a href="/en/XUL/Property/selectionStart" title="en/XUL/Property/selectionStart">selectionStart</a></li> - <li><a href="/en/XUL/Property/selstyle" title="en/XUL/Property/selstyle">selstyle</a></li> - <li><a href="/en/XUL/Property/selType" title="en/XUL/Property/selType">selType</a></li> - <li><a href="/en/XUL/Property/sessionCount" title="en/XUL/Property/sessionCount">sessionCount</a></li> - <li><a href="/en/XUL/Property/sessionHistory" title="en/XUL/Property/sessionHistory">sessionHistory</a></li> - <li><a href="/en/XUL/Property/showCommentColumn" title="en/XUL/Property/showCommentColumn">showCommentColumn</a></li> - <li><a href="/en/XUL/Property/showPopup" title="en/XUL/Property/showPopup">showPopup</a></li> - <li><a href="/en/XUL/Property/size" title="en/XUL/Property/size">size</a></li> - <li><a href="/en/XUL/Property/smoothScroll" title="en/XUL/Property/smoothScroll">smoothScroll</a></li> - <li><a href="/en/XUL/Property/spinButtons" title="en/XUL/Property/spinButtons">spinButtons</a></li> - <li><a href="/en/XUL/Property/src" title="en/XUL/Property/src">src</a></li> - <li><a href="/en/XUL/Property/state" title="en/XUL/Property/state">state</a></li> - <li><a href="/en/XUL/Property/statusbar" title="en/XUL/Property/statusbar">statusbar</a></li> - <li><a href="/en/XUL/Property/statusText" title="en/XUL/Property/statusText">statusText</a></li> - <li><a href="/en/XUL/Property/stringBundle" title="en/XUL/Property/stringBundle">stringBundle</a></li> - <li><a href="/en/XUL/Property/strings" title="en/XUL/Property/strings">strings</a></li> - <li><a href="/en/XUL/Property/style" title="en/XUL/Property/style">style</a></li> - <li><a href="/en/XUL/Property/subject" title="en/XUL/Property/subject">subject</a></li> - <li><a href="/en/XUL/Property/suppressOnSelect" title="en/XUL/Property/suppressOnSelect">suppressOnSelect</a></li> - <li><a href="/en/XUL/Property/tabContainer" title="en/XUL/Property/tabContainer">tabContainer</a></li> - <li><a href="/en/XUL/Property/tabIndex" title="en/XUL/Property/tabIndex">tabIndex</a></li> - <li><a href="/en/XUL/Property/tabs" title="en/XUL/Property/tabs">tabs</a></li> - <li><a href="/en/XUL/Property/tabScrolling" title="en/XUL/Property/tabScrolling">tabScrolling</a></li> - <li><a href="/en/XUL/Property/tabpanels" title="en/XUL/Property/tabpanels">tabpanels</a></li> - <li><a href="/en/XUL/Property/tag" title="en/XUL/Property/tag">tag</a></li> - <li><a href="/en/XUL/Property/textLength" title="en/XUL/Property/textLength">textLength</a></li> - <li><a href="/en/XUL/Property/textValue" title="en/XUL/Property/textValue">textValue</a></li> - <li><a href="/en/XUL/Property/timeout" title="en/XUL/Property/timeout">timeout</a></li> - <li><a href="/en/XUL/Property/title" title="en/XUL/Property/title">title</a></li> - <li><a href="/en/XUL/Property/toolbarName" title="en/XUL/Property/toolbarName">toolbarName</a></li> - <li><a href="/en/XUL/Property/toolbarset" title="en/XUL/Property/toolbarset">toolbarset</a></li> - <li><a href="/en/XUL/Property/tooltip" title="en/XUL/Property/tooltip">tooltip</a></li> - <li><a href="/en/XUL/Property/tooltipText" title="en/XUL/Property/tooltipText">tooltipText</a></li> - <li><a href="/en/XUL/Property/top" title="en/XUL/Property/top">top</a></li> - <li><a href="/en/XUL/Property/treeBoxObject" title="en/XUL/Property/treeBoxObject">treeBoxObject</a></li> - <li><a href="/en/XUL/Property/type" title="en/XUL/Property/type">type</a></li> - <li><a href="/en/XUL/Property/uri" title="en/XUL/Property/uri">uri</a></li> - <li><a href="/en/XUL/Property/userAction" title="en/XUL/Property/userAction">userAction</a></li> - <li><a href="/en/XUL/Property/value" title="en/XUL/Property/value">value</a></li> - <li><a href="/en/XUL/Property/valueNumber" title="en/XUL/Property/valueNumber">valueNumber</a></li> - <li><a href="/en/XUL/Property/view" title="en/XUL/Property/view">view</a></li> - <li><a href="/en/XUL/Property/webBrowserFind" title="en/XUL/Property/webBrowserFind">webBrowsereFind</a></li> - <li><a href="/en/XUL/Property/webNavigation" title="en/XUL/Property/webNavigation">webNavigation</a></li> - <li><a href="/en/XUL/Property/webProgress" title="en/XUL/Property/webProgress">webProgress</a></li> - <li><a href="/en/XUL/Property/width" title="en/XUL/Property/width">width</a></li> - <li><a href="/en/XUL/Property/wizardPages" title="en/XUL/Property/wizardPages">wizardPages</a></li> - <li><a href="/en/XUL/Property/wrapAround" title="en/XUL/Property/wrapAround">wrapAround</a></li> - <li><a href="/en/XUL/Property/year" title="en/XUL/Property/year">year</a></li> - <li><a href="/en/XUL/Property/yearLeadingZero" title="en/XUL/Property/yearLeadingZero">yearLeadingZero</a></li> -</ul> -<h3 id="Related_DOM_element_properties" name="Related_DOM_element_properties">Related DOM element properties</h3> -<ul> - <li><a href="/En/DOM/Node.attributes" title="en/DOM/element.attributes">DOM:element.attributes</a></li> - <li><a href="/En/DOM/Node.baseURI" title="En/DOM/element.baseURI">DOM:element.baseURI</a></li> - <li><a href="/En/DOM/Element.childElementCount" title="En/DOM/element.childElementCount">DOM:element.childElementCount</a></li> - <li><a href="/En/DOM/Node.childNodes" title="en/DOM/element.childNodes">DOM:element.childNodes</a></li> - <li><a href="/En/DOM/Element.children" title="en/DOM/element.children">DOM:element.children</a></li> - <li><a href="/en/DOM/element.clientHeight" title="en/DOM/element.clientHeight">DOM:element.clientHeight</a></li> - <li><a href="/en/DOM/element.clientLeft" title="en/DOM/element.clientLeft">DOM:element.clientLeft</a></li> - <li><a href="/en/DOM/element.clientTop" title="en/DOM/element.clientTop">DOM:element.clientTop</a></li> - <li><a href="/en/DOM/element.clientWidth" title="en/DOM/element.clientWidth">DOM:element.clientWidth</a></li> - <li><a href="/En/DOM/Node.cloneNode" title="en/DOM/element.cloneNode">DOM:element.cloneNode</a></li> - <li><a href="/En/DOM/Node.firstChild" title="en/DOM/element.firstChild">DOM:element.firstChild</a></li> - <li><a href="/En/DOM/Element.firstElementChild" title="en/DOM/element.firstElementChild">DOM:element.firstElementChild</a></li> - <li><a href="/En/DOM/Node.lastChild" title="en/DOM/element.lastChild">DOM:element.lastChild</a></li> - <li><a href="/En/DOM/Element.lastElementChild" title="en/DOM/element.lastElementChild">DOM:element.lastElementChild</a></li> - <li><a href="/En/DOM/Node.localName" title="en/DOM/element.localName">DOM:element.localName</a></li> - <li><a href="/En/DOM/Node.namespaceURI" title="en/DOM/element.namespaceURI">DOM:element.namespaceURI</a></li> - <li><a href="/En/DOM/Element.nextElementSibling" title="en/DOM/element.nextElementSibling">DOM:element.nextElementSibling</a></li> - <li><a href="/En/DOM/Node.nextSibling" title="en/DOM/element.nextSibling">DOM:element.nextSibling</a></li> - <li><a href="/En/DOM/Node.nodeName" title="en/DOM/element.nodeName">DOM:element.nodeName</a></li> - <li><a href="/En/DOM/Node.nodeType" title="en/DOM/element.nodeType">DOM:element.nodeType</a></li> - <li><a href="/En/DOM/Node.nodeValue" title="en/DOM/element.nodeValue">DOM:element.nodeValue</a></li> - <li><a href="/En/DOM/Node.ownerDocument" title="en/DOM/element.ownerDocument">DOM:element.ownerDocument</a></li> - <li><a href="/En/DOM/Node.parentNode" title="en/DOM/element.parentNode">DOM:element.parentNode</a></li> - <li><a href="/En/DOM/Node.prefix" title="en/DOM/element.prefix">DOM:element.prefix</a></li> - <li><a href="/En/DOM/Element.previousElementSibling" title="en/DOM/element.previousElementSibling">DOM:element.previousElementSibling</a></li> - <li><a href="/En/DOM/Node.previousSibling" title="en/DOM/element.previousSibling">DOM:element.previousSibling</a></li> - <li><a href="/en/DOM/element.scrollHeight" title="en/DOM/element.scrollHeight">DOM:element.scrollHeight</a></li> - <li><a href="/en/DOM/element.scrollLeft" title="en/DOM/element.scrollLeft">DOM:element.scrollLeft</a></li> - <li><a href="/en/DOM/element.scrollTop" title="en/DOM/element.scrollTop">DOM:element.scrollTop</a></li> - <li><a href="/en/DOM/element.scrollWidth" title="en/DOM/element.scrollWidth">DOM:element.scrollWidth</a></li> - <li><a href="/en/DOM/element.tagName" title="en/DOM/element.tagName">DOM:element.tagName</a></li> - <li><a href="/En/DOM/Node.textContent" title="en/DOM/element.textContent">DOM:element.textContent</a></li> -</ul> diff --git a/files/ru/mozilla/tech/xul/property/selectionstart/index.html b/files/ru/mozilla/tech/xul/property/selectionstart/index.html deleted file mode 100644 index 4a5ba34fdc..0000000000 --- a/files/ru/mozilla/tech/xul/property/selectionstart/index.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: selectionStart -slug: Mozilla/Tech/XUL/Property/selectionStart -translation_of: Archive/Mozilla/XUL/Property/selectionStart ---- -<div class="noinclude"><span class="breadcrumbs XULRefProp_breadcrumbs">« <a href="/ru/docs/XUL/Справочник" title="XUL/Справочник">XUL Справочник</a></span></div> - -<dl> - <dt><code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/selectionStart">selectionStart</a></span></code></dt> - <dd>Тип: <em>integer</em></dd> - <dd>Получает или устанавливает начало выделения области текста в поле ввода. Используется в паре со свойством <code><span><a href="https://developer.mozilla.org/ru/docs/XUL/Property/selectionEnd">selectionEnd</a></span></code>. Значение указывает на порядковый номер первого символа в выделенном фрагменте относительно всего текста.</dd> -</dl> - -<div class="noinclude"> -<p></p> -</div> diff --git a/files/ru/mozilla/tech/xul/tabbrowser/index.html b/files/ru/mozilla/tech/xul/tabbrowser/index.html deleted file mode 100644 index 90f858cfeb..0000000000 --- a/files/ru/mozilla/tech/xul/tabbrowser/index.html +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: tabbrowser -slug: Mozilla/Tech/XUL/tabbrowser -translation_of: Archive/Mozilla/XUL/tabbrowser ---- -<div class="noinclude"> - <span class="breadcrumbs XULRef_breadcrumbs"> - « <a href="/ru/docs/XUL/Справочник">Справочник по XUL</a> [ - <a href="#Examples">Примеры</a> | - <a href="#Атрибуты">Атрибуты</a> | - <a href="#Property">Свойства</a> | - <a href="#Методы">Методы</a> | - <a href="#Related">См. также</a> ] -</span></div> -<p>This element is used for holding a set of read-only views of Web documents. It is similar to the <code><a href="/ru/docs/Mozilla/Tech/XUL/browser" title="browser">browser</a></code> element, except that multiple documents can be displayed, each in a separate tab.</p> -<p></p><div class="blockIndicator note"><strong>Примечание:</strong> Starting in Firefox 3 (XULRunner/Gecko 1.9), this is only used in the main Firefox window and cannot be used in other XUL windows by third-party applications or extensions.</div><p></p> -<dl> - <dt> - Attributes</dt> - <dd> - <a href="#a-autocompleteenabled">autocompleteenabled</a>, <a href="#a-autocompletepopup">autocompletepopup</a>, <a href="#a-autoscroll">autoscroll</a>, <a href="#a-contentcontextmenu">contentcontextmenu</a>, <a href="#a-contenttooltip">contenttooltip</a>, <a href="#a-handleCtrlPageUpDown">handleCtrlPageUpDown</a>, <a href="#a-onbookmarkgroup">onbookmarkgroup</a>, <a href="#a-onnewtab">onnewtab</a>, <a href="#a-tabmodalPromptShowing">tabmodalPromptShowing</a></dd> -</dl> -<dl> - <dt> - Properties</dt> - <dd> - <a href="#p-browsers">browsers</a>, <a href="#p-canGoBack">canGoBack</a>, <a href="#p-canGoForward">canGoForward</a>, <a href="#p-contentDocument">contentDocument</a>, <a href="#p-contentTitle">contentTitle</a>, <a href="#p-contentViewerEdit">contentViewerEdit</a>, <a href="#p-contentViewerFile">contentViewerFile</a>, <a href="#p-contentWindow">contentWindow</a>, <a href="#p-currentURI">currentURI</a>, <a href="#p-docShell">docShell</a>, <a href="#p-documentCharsetInfo">documentCharsetInfo</a>, <a href="#p-homePage">homePage</a>, <a href="#p-markupDocumentViewer">markupDocumentViewer</a>, <a href="#p-securityUI">securityUI</a>, <a href="#p-selectedBrowser">selectedBrowser</a>, <a href="#p-selectedTab">selectedTab</a>, <a href="#p-sessionHistory">sessionHistory</a>, <a href="#p-tabContainer">tabContainer</a>, <a href="#p-tabbrowser.tabs">tabs</a>, <a href="#p-visibleTabs">visibleTabs</a>, <a href="#p-webBrowserFind">webBrowserFind</a>, <a href="#p-webNavigation">webNavigation</a>, <a href="#p-webProgress">webProgress</a></dd> -</dl> -<dl> - <dt> - Methods</dt> - <dd> - <a href="#m-addProgressListener">addProgressListener</a>, <a href="#m-addTab">addTab</a>, <a href="#m-addTabsProgressListener">addTabsProgressListener</a>,<a href="#m-appendGroup">appendGroup</a>, <a href="#m-getBrowserAtIndex">getBrowserAtIndex</a>, <a href="#m-getBrowserIndexForDocument">getBrowserIndexForDocument</a>, <a href="#m-getBrowserForDocument">getBrowserForDocument</a>, <a href="#m-getBrowserForTab">getBrowserForTab</a>, <a href="#m-getIcon">getIcon</a>, <a href="#m-getNotificationBox">getNotificationBox</a>, <a href="#m-getTabForBrowser">getTabForBrowser</a>, <a href="#m-getTabModalPromptBox">getTabModalPromptBox</a>, <a href="#m-goBack">goBack</a>, <a href="#m-goBackGroup">goBackGroup</a>, <a href="#m-goForward">goForward</a>, <a href="#m-goForwardGroup">goForwardGroup</a>, <a href="#m-goHome">goHome</a>, <a href="#m-gotoIndex">gotoIndex</a>, <a href="#m-loadGroup">loadGroup</a>, <a href="#m-loadOneTab">loadOneTab</a>, <a href="#m-loadTabs">loadTabs</a>, <a href="#m-loadURI">loadURI</a>, <a href="#m-loadURIWithFlags">loadURIWithFlags</a>, <a href="#m-moveTabTo">moveTabTo</a>, <a href="#m-pinTab">pinTab</a>, <a href="#m-reload">reload</a>, <a href="#m-reloadAllTabs">reloadAllTabs</a>, <a href="#m-reloadTab">reloadTab</a>, <a href="#m-reloadWithFlags">reloadWithFlags</a>, <a href="#m-removeAllTabsBut">removeAllTabsBut</a>, <a href="#m-removeCurrentTab">removeCurrentTab</a>, <a href="#m-removeProgressListener">removeProgressListener</a>, <a href="#m-removeTab">removeTab</a>, <a href="#m-removeTabsProgressListener">removeTabsProgressListener</a>,<a href="#m-replaceGroup">replaceGroup</a>, <a href="#m-selectTabAtIndex">selectTabAtIndex</a>, <a href="#m-setIcon">setIcon</a>, <a href="#m-showOnlyTheseTabs">showOnlyTheseTabs</a>, <a href="#m-stop">stop</a>, <a href="#m-unpinTab">unpinTab</a></dd> -</dl> -<h3 id="Attributes" name="Attributes">Attributes</h3> -<p> </p><div id="a-autocompleteenabled"> - -</div> <div id="a-autocompletepopup"> - -</div> <div id="a-autoscroll"> - - -<dl> - <dt><code id="a-autoscroll"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/%D0%90%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B/autoscroll">autoscroll</a></code></dt> - <dd>Тип: <em>boolean</em></dd> - <dd>Установите значение атрибута на <code>false</code>, чтобы отключить автопрокрутку для браузера. Если значение этого атрибута <code>true</code> или отсутствует, автопрокрутка будет включена или в зависимости от пользовательских настроек <code>general.autoScroll</code>.</dd> -</dl> -</div> <div id="a-contentcontextmenu"> - -</div> <div id="a-contenttooltip"> - -</div> <div id="a-handleCtrlPageUpDown"> - -</div> <div id="a-onbookmarkgroup"> - -</div> <div id="a-onnewtab"> - -</div> <div id="a-tabmodalPromptShowing"> - -</div><p></p> -<h3 id="Properties" name="Properties">Properties</h3> -<p> </p><div id="p-browsers"> - -<dl> - <dt><code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/browsers">browsers</a></span></code></dt> - <dd>Type: <em>nodelist of <code><a href="/en-US/docs/Mozilla/Tech/XUL/browser" title="browser">browser</a></code> elements</em></dd> - <dd>Holds a list of the <code><a href="/en-US/docs/Mozilla/Tech/XUL/browser" title="browser">browser</a></code> elements inside the <code><a href="/en-US/docs/Mozilla/Tech/XUL/tabbrowser" title="tabbrowser">tabbrowser</a></code>.</dd> -</dl></div> <div id="p-canGoBack"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/canGoBack">canGoBack</a></span></code></dt> - <dd> - Type: <em>boolean</em></dd> - <dd> - This read-only property is <code>true</code> if there is a page to go back to in the session history and the Back button should be enabled.</dd> -</dl></div> <div id="p-canGoForward"> - -<dl> - <dt><code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/canGoForward">canGoForward</a></span></code></dt> - <dd>Type: <em>boolean</em></dd> - <dd>This read-only property is <code>true</code> if there is a page to go forward to in the session history and the Forward button should be enabled.</dd> -</dl></div> <div id="p-contentDocument"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/contentDocument">contentDocument</a></span></code></dt> - <dd> - Type: <em>document</em></dd> - <dd> - This read-only property contains the document object in the element.</dd> -</dl></div> <div id="p-contentTitle"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/contentTitle">contentTitle</a></span></code></dt> - <dd> - Type: <em>string</em></dd> - <dd> - This read-only property contains the title of the document object in the browser.</dd> -</dl></div> <div id="p-contentViewerEdit"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/contentViewerEdit">contentViewerEdit</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIContentViewerEdit" title="">nsIContentViewerEdit</a></code></em></dd> - <dd> - This read-only property contains the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIContentViewerEdit" title="">nsIContentViewerEdit</a></code> which handles clipboard operations on the document.</dd> -</dl></div> <div id="p-contentViewerFile"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/contentViewerFile">contentViewerFile</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIContentViewerFile" title="">nsIContentViewerFile</a></code></em></dd> - <dd> - Reference to the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIContentViewerFile" title="">nsIContentViewerFile</a></code> interface for the document.</dd> -</dl></div> <div id="p-contentWindow"> -<dl> <dt><code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/contentWindow">contentWindow</a></span></code></dt> <dd>Type: <em>TODO</em></dd> <dd>Use the contentWindow.wrappedJSObject to obtain a DOM(html) window object</dd> -</dl></div> <div id="p-currentURI"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/currentURI">currentURI</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIURI" title="">nsIURI</a></code></em></dd> - <dd> - This read-only property contains the currently loaded URL. To change the URL, use the <span id="m-loadURI"><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Method/loadURI">loadURI</a></code></span> method.</dd> -</dl></div> <div id="p-docShell"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/docShell">docShell</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDocShell" title="">nsIDocShell</a></code></em></dd> - <dd> - This read-only property contains the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDocShell" title="">nsIDocShell</a></code> object for the document.</dd> -</dl></div> <div id="p-documentCharsetInfo"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/documentCharsetInfo">documentCharsetInfo</a></span></code> <span class="inlineIndicator obsolete obsoleteInline" title="(Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9)">Obsolete since Gecko 12.0</span></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDocumentCharsetInfo" title="">nsIDocumentCharsetInfo</a></code></em></dd> - <dd> - This read-only property contains the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDocumentCharsetInfo" title="">nsIDocumentCharsetInfo</a></code> object for the document which is used to handle which character set should be used to display the document. The properties of the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDocumentCharsetInfo" title="">nsIDocumentCharsetInfo</a></code> object were merged into the docshell in Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9).</dd> -</dl></div> <div id="p-homePage"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/homePage">homePage</a></span></code></dt> - <dd> - Type: <em>string home page URL</em></dd> - <dd> - This property holds the value of the user's home page setting.</dd> -</dl></div> <div id="p-markupDocumentViewer"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/markupDocumentViewer">markupDocumentViewer</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIMarkupDocumentViewer" title="">nsIMarkupDocumentViewer</a></code></em></dd> - <dd> - This read-only property contains the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIMarkupDocumentViewer" title="">nsIMarkupDocumentViewer</a></code> which is responsible for drawing the document.</dd> -</dl></div> <div id="p-securityUI"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/securityUI">securityUI</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsISecureBrowserUI" title="">nsISecureBrowserUI</a></code></em></dd> - <dd> - The read-only property holds an object which may be used to determine the security level of the loaded document.</dd> -</dl></div> <div id="p-selectedBrowser"> - -<dl> - <dt><code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/selectedBrowser">selectedBrowser</a></span></code></dt> - <dd>Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XUL/browser" title="browser">browser</a></code> element</em></dd> - <dd>This read-only property returns the currently displayed <code><a href="/en-US/docs/Mozilla/Tech/XUL/browser" title="browser">browser</a></code> element.</dd> -</dl></div> <div id="p-selectedTab"> - -<dl> - <dt><code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/selectedTab">selectedTab</a></span></code></dt> - <dd>Type: <em>tab element</em></dd> - <dd>A reference to the currently selected tab, which will always be one of the <code><a href="/en-US/docs/Mozilla/Tech/XUL/tab" title="tab">tab</a></code> elements in the <code><a href="/en-US/docs/Mozilla/Tech/XUL/tabs" title="tabs">tabs</a></code> element. Assign a value to this property to modify the currently selected tab.</dd> -</dl></div> <div id="p-sessionHistory"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/sessionHistory">sessionHistory</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsISHistory" title="">nsISHistory</a></code></em></dd> - <dd> - This read-only property contains the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsISHistory" title="">nsISHistory</a></code> object which holds the session history.</dd> -</dl></div> <div id="p-tabContainer"> - -<dl> - <dt><code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/tabContainer">tabContainer</a></span></code></dt> - <dd>Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XUL/tabs" title="tabs">tabs</a></code> element</em></dd> - <dt> </dt> - <dd>Returns the <code><a href="/en-US/docs/Mozilla/Tech/XUL/tabs" title="tabs">tabs</a></code> element that contains the tabs. This is useful for add-ons that need to use events related to tabs in the browser window.</dd> -</dl></div> <div id="p-tabbrowser.tabs"> -<dl> <dt><code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/tabbrowser.tabs">tabs</a></span></code> </dt> <dd>Type: <em>array</em></dd> <dd>A <a href="/En/DOM/NodeList" title="En/DOM/NodeList">NodeList</a> containing the <code><a href="/en-US/docs/Mozilla/Tech/XUL/tab" title="tab">tab</a></code> objects for each tab in the <code><a href="/en-US/docs/Mozilla/Tech/XUL/tabbrowser" title="tabbrowser">tabbrowser</a></code>. This is a shortcut for looking at the tabs in the <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/tabContainer">tabContainer</a></span></code>.</dd> -</dl></div> <div id="p-visibleTabs"> -<dl> <dt><code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/visibleTabs">visibleTabs</a></span></code> </dt> <dd>Type: <em>array</em></dd> <dd>An array containing <code><a href="/en-US/docs/Mozilla/Tech/XUL/tab" title="tab">tab</a></code> objects for each visible tab in the <code><a href="/en-US/docs/Mozilla/Tech/XUL/tabbrowser" title="tabbrowser">tabbrowser</a></code>. This lets you determine which tabs are visible in the current tab set.</dd> -</dl></div> <div id="p-webBrowserFind"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/webBrowserFind">webBrowserFind</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebBrowserFind" title="">nsIWebBrowserFind</a></code></em></dd> - <dd> - This read-only property contains an <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebBrowserFind" title="">nsIWebBrowserFind</a></code> object which can be used to search for text in the document.</dd> -</dl></div> <div id="p-webNavigation"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/webNavigation">webNavigation</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebNavigation" title="">nsIWebNavigation</a></code></em></dd> - <dd> - This read-only property contains the <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebNavigation" title="">nsIWebNavigation</a></code> object for the document. Most of its methods are callable directly on the element itself, such as <span id="m-goBack"><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Method/goBack">goBack</a></code></span> and <span id="m-goForward"><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Method/goForward">goForward</a></code></span>. It also contains the load constants used by <span id="m-reloadWithFlags"><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Method/reloadWithFlags">reloadWithFlags</a></code></span> and <span id="m-loadURIWithFlags"><code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Method/loadURIWithFlags">loadURIWithFlags</a></code></span>.</dd> -</dl></div> <div id="p-webProgress"> -<dl> - <dt> - <code><span><a href="https://developer.mozilla.org/en-US/docs/XUL/Property/webProgress">webProgress</a></span></code></dt> - <dd> - Type: <em><code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebProgress" title="">nsIWebProgress</a></code></em></dd> - <dd> - This read-only property contains an <code><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebProgress" title="">nsIWebProgress</a></code> object which is used to monitor the progress of a document loading.</dd> -</dl></div><p></p> -<h3 id="Methods" name="Methods">Methods</h3> -<p></p><table style="border: 1px solid rgb(204, 204, 204); margin: 0 0 10px 10px; padding: 0 10px; background: rgb(238, 238, 238); float: right; width: 250px;"> -<tbody> -<tr> -<td> -<p><strong>Наследуемые методы</strong><br> -<small><code><a href="https://developer.mozilla.org/ru/docs/DOM/element.addEvrutListruer">addEvrutListruer()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.apprudChild">apprudChild()</a></code>, <span id="m-blur"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/blur">blur</a></code></span>, <span id="m-click"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/click">click</a></code></span>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.clonruode">clonruode()</a></code>, <a href="/ru/DOM/Node.compareDocumrutPosition" title="ru/DOM/Node.compareDocumrutPosition">compareDocumrutPosition</a>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.dispatchEvrut">dispatchEvrut()</a></code>, <span id="m-doCommand"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/doCommand">doCommand</a></code></span>, <span id="m-focus"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/focus">focus</a></code></span>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getAttribute">getAttribute()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getAttributruode">getAttributruode()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getAttributruodruS">getAttributruodruS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getAttributruS">getAttributruS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getBoundingClirutRect">getBoundingClirutRect()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getClirutRects">getClirutRects()</a></code>, <span id="m-getElemrutsByAttribute"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/getElemrutsByAttribute">getElemrutsByAttribute</a></code></span>, <span id="m-getElemrutsByAttributruS"><code><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Методы/getElemrutsByAttributruS">getElemrutsByAttributruS</a></code></span>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getElemrutsByClassName">getElemrutsByClassName()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getElemrutsByTagName">getElemrutsByTagName()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getElemrutsByTagNamruS">getElemrutsByTagNamruS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.getFeature">getFeature()</a></code>, <a href="/ru/DOM/Node.getUserData" title="ru/DOM/Node.getUserData">getUserData</a>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.hasAttribute">hasAttribute()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.hasAttributruS">hasAttributruS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.hasAttributes">hasAttributes()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.hasChildNodes">hasChildNodes()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.insertBefore">insertBefore()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.isDefaultNamespace">isDefaultNamespace()</a></code>, <a href="/ru/DOM/Node.isEqualNode" title="ru/DOM/Node.isEqualNode">isEqualNode</a>, <a href="/ru/DOM/Node.isSamruode" title="ru/DOM/Node.isSamruode">isSamruode</a>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.isSupported">isSupported()</a></code>, <a href="/ru/DOM/Node.lookupNamespaceURI" title="ru/DOM/Node.lookupNamespaceURI">lookupNamespaceURI</a>, <a href="/ru/DOM/Node.lookupPrefix" title="ru/DOM/Node.lookupPrefix">lookupPrefix</a>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.normalize">normalize()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.querySelector">querySelector()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.querySelectorAll">querySelectorAll()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeAttribute">removeAttribute()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeAttributruode">removeAttributruode()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeAttributruS">removeAttributruS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeChild">removeChild()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.removeEvrutListruer">removeEvrutListruer()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.replaceChild">replaceChild()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.setAttribute">setAttribute()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.setAttributruode">setAttributruode()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.setAttributruodruS">setAttributruodruS()</a></code>, <code><a href="https://developer.mozilla.org/ru/docs/DOM/element.setAttributruS">setAttributruS()</a></code>, <a href="/ru/DOM/Node.setUserData" title="ru/DOM/Node.setUserData">setUserData</a></small></p> - -</td> -</tr> -</tbody> -</table> <p></p> -<h3 id="Related" name="Related">Related</h3> -<ul> - <li><a href="/en/Code_snippets/Tabbed_browser" title="en/Code_snippets/Tabbed_browser">Code snippets:Tabbed browser</a></li> -</ul> diff --git a/files/ru/mozilla/tech/xul/атрибуты/autocheck/index.html b/files/ru/mozilla/tech/xul/атрибуты/autocheck/index.html deleted file mode 100644 index f8b9f1939a..0000000000 --- a/files/ru/mozilla/tech/xul/атрибуты/autocheck/index.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: autocheck -slug: Mozilla/Tech/XUL/Атрибуты/autoCheck -translation_of: Archive/Mozilla/XUL/Attribute/autoCheck ---- -<div class="noinclude"><span class="breadcrumbs xulRefAttr_breadcrumbs">« <a href="/ru/docs/XUL/Справочник">Справочник по XUL</a></span></div> - -<dl> - <dt><code id="a-autocheck"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/autocheck">autocheck</a></code></dt> - <dd>Тип: <em>boolean</em></dd> - <dd>Если значение этого атрибута <code>true</code> или отсутствует, проверяемое состояние кнопки будет переключаться каждый раз при нажатии кнопки. Если значение этого атрибута <code>false</code>, проверяемое состояние должно быть отрегулировано вручную. Когда autocheck истинно, тип кнопки должен быть "checkbox" или "radio".</dd> -</dl> diff --git a/files/ru/mozilla/tech/xul/атрибуты/autoscroll/index.html b/files/ru/mozilla/tech/xul/атрибуты/autoscroll/index.html deleted file mode 100644 index f60c1a1e56..0000000000 --- a/files/ru/mozilla/tech/xul/атрибуты/autoscroll/index.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: autoscroll -slug: Mozilla/Tech/XUL/Атрибуты/autoscroll -translation_of: Archive/Mozilla/XUL/Attribute/autoscroll ---- -<div class="noinclude"><span class="breadcrumbs xulRefAttr_breadcrumbs">« <a href="/ru/docs/XUL/Справочник">Справочник по XUL</a></span></div> - -<dl> - <dt><code id="a-autoscroll"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/autoscroll">autoscroll</a></code></dt> - <dd>Тип: <em>boolean</em></dd> - <dd>Установите значение атрибута на <code>false</code>, чтобы отключить автопрокрутку для браузера. Если значение этого атрибута <code>true</code> или отсутствует, автопрокрутка будет включена или в зависимости от пользовательских настроек <code>general.autoScroll</code>.</dd> -</dl> diff --git a/files/ru/mozilla/tech/xul/атрибуты/index.html b/files/ru/mozilla/tech/xul/атрибуты/index.html deleted file mode 100644 index 02f7461eb9..0000000000 --- a/files/ru/mozilla/tech/xul/атрибуты/index.html +++ /dev/null @@ -1,270 +0,0 @@ ---- -title: Атрибуты -slug: Mozilla/Tech/XUL/Атрибуты -tags: - - XUL -translation_of: Archive/Mozilla/XUL/Attribute ---- -<p> -</p> -<h3 id=".D0.90.D1.82.D1.80.D0.B8.D0.B1.D1.83.D1.82.D1.8B_XUL" name=".D0.90.D1.82.D1.80.D0.B8.D0.B1.D1.83.D1.82.D1.8B_XUL"> Атрибуты XUL </h3> -<ul><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/acceltext">acceltext</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/accessible">accessible</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/accesskey">accesskey</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/afterselected">afterselected</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/align">align</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/allowevents">allowevents</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/allownegativeassertions">allownegativeassertions</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/alternatingbackground">alternatingbackground</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/alwaysopenpopup">alwaysopenpopup</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/attribute">attribute</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autocheck">autocheck</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autoCheck">autoCheck</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autocompleteenabled">autocompleteenabled</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autocompletepopup">autocompletepopup</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autocompletesearch">autocompletesearch</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autocompletesearchparam">autocompletesearchparam</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autoFill">autoFill</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autoFillAfterMatch">autoFillAfterMatch</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/autoscroll">autoscroll</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/beforeselected">beforeselected</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonaccesskeyaccept">buttonaccesskeyaccept</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonaccesskeycancel">buttonaccesskeycancel</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonaccesskeydisclosure">buttonaccesskeydisclosure</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonaccesskeyextra1">buttonaccesskeyextra1</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonaccesskeyextra2">buttonaccesskeyextra2</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonaccesskeyhelp">buttonaccesskeyhelp</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonalign">buttonalign</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttondir">buttondir</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonlabelaccept">buttonlabelaccept</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonlabelcancel">buttonlabelcancel</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonlabeldisclosure">buttonlabeldisclosure</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonlabelextra1">buttonlabelextra1</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonlabelextra2">buttonlabelextra2</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonlabelhelp">buttonlabelhelp</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonorient">buttonorient</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttonpack">buttonpack</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/buttons">buttons</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/checked">checked</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/checkState">checkState</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/class">class</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/closebutton">closebutton</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/coalesceduplicatearcs">coalesceduplicatearcs</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/collapse">collapse</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/collapsed">collapsed</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/color">color</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/cols">cols</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/command">command</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/commandupdater">commandupdater</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/completedefaultindex">completedefaultindex</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/container">container</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/containment">containment</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/contentcontextmenu">contentcontextmenu</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/contenttooltip">contenttooltip</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/context">context</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/contextmenu">contextmenu</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/control">control</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/crop">crop</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/curpos">curpos</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/current">current</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/currentset">currentset</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/customindex">customindex</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/customizable">customizable</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/cycler">cycler</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/datasources">datasources</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/default">default</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/defaultButton">defaultButton</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/defaultset">defaultset</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/description">description</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/dir">dir</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disableAutocomplete">disableAutocomplete</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disableautocomplete">disableautocomplete</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disableautoselect">disableautoselect</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disableclose">disableclose</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disabled">disabled</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disablehistory">disablehistory</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disableKeyNavigation">disableKeyNavigation</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disablekeynavigation">disablekeynavigation</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/disablesecurity">disablesecurity</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/dlgType">dlgType</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/dragging">dragging</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/editable">editable</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/editortype">editortype</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/element">element</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/empty">empty</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/enableColumnDrag">enableColumnDrag</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/enablehistory">enablehistory</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/equalsize">equalsize</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/eventnode">eventnode</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/events">events</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/firstpage">firstpage</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/first-tab">first-tab</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/fixed">fixed</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/flags">flags</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/flex">flex</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/focused">focused</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/forceComplete">forceComplete</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/forcecomplete">forcecomplete</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/grippyhidden">grippyhidden</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/grippytooltiptext">grippytooltiptext</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/group">group</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/handleCtrlPageUpDown">handleCtrlPageUpDown</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/handleCtrlTab">handleCtrlTab</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/height">height</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/helpURI">helpURI</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/hidden">hidden</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/hidechrome">hidechrome</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/hidecolumnpicker">hidecolumnpicker</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/hideheader">hideheader</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/homepage">homepage</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/icon">icon</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/id">id</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ignoreBlurWhileSearching">ignoreBlurWhileSearching</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ignoreblurwhilesearching">ignorebluewhilesearching</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ignorecolumnpicker">ignorecolumnpicker</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ignorekeys">ignorekeys</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/image">image</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/increment">increment</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/inputtooltiptext">inputtooltiptext</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/insertafter">insertafter</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/insertbefore">insertbefore</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/instantApply">instantApply</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/inverted">inverted</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/iscontainer">iscontainer</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/isempty">isempty</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/key">key</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/keycode">keycode</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/keytext">keytext</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/label">label</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/lastpage">lastpage</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/lastSelected">lastSelected</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/last-tab">last-tab</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/left">left</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/linkedpanel">linkedpanel</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/maxheight">maxheight</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/maxlength">maxlength</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/maxpos">maxpos</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/maxrows">maxrows</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/maxwidth">maxwidth</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/member">member</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/menu">menu</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/menuactive">menuactive</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/minheight">minheight</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/minResultsForPopup">minResultsForPopup</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/minresultsforpopup">minresultsforpopup</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/minwidth">minwidth</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/mode">mode</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/modifiers">modifiers</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/mousethrough">mousethrough</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/multiline">multiline</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/name">name</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/next">next</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/noautohide">noautohide</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/nomatch">nomatch</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/observes">observes</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onbeforeaccept">onbeforeaccept</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onbookmarkgroup">onbookmarkgroup</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onchange">onchange</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onclosetab">onclosetab</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/oncommand">oncommand</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/oncommandupdate">oncommandupdate</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ondialogaccept">ondialogaccept</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ondialogcancel">ondialogcancel</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ondialogdisclosure">ondialogclosure</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ondialoghelp">ondialoghelp</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onerror">onerror</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onerrorcommand">onerrorcommand</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/oninput">oninput</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onload">onload</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onnewtab">onnewtab</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpageadvanced">onpageadvanced</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpagehide">onpagehide</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpagerewound">onpagerewound</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpageshow">onpageshow</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpanelload">onpanelload</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpopuphidden">onpopuphidden</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpopuphiding">onpopuphiding</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpopupshowing">onpopupshowing</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onpopupshown">onpopupshown</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onsearchcomplete">onsearchcomplete</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onselect">onselect</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ontextcommand">ontextcommand</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ontextentered">ontextentered</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ontextrevert">ontextrevert</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ontextreverted">ontextreverted</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onwizardback">onwizardback</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onwizardcancel">onwizardcancel</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onwizardfinish">onwizardfinish</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/onwizardnext">onwizardnext</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/open">open</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ordinal">ordinal</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/orient">orient</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/pack">pack</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/pageid">pageid</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/pageincrement">pageincrement</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/pagestep">pagestep</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/parent">parent</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/parsetype">parsetype</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/persist">persist</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/phase">phase</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/pickertooltiptext">pickertooltiptext</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/popup">popup</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/position">position</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/preference">preference</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/preference-editable">preference-editable</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/primary">primary</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/properties">properties</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/readonly">readonly</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/ref">ref</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/removeelement">removeelement</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/resizeafter">resizeafter</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/resizebefore">resizebefore</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/rows">rows</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/screenX">screenX</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/screenY">screenY</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/searchSessions">searchSessions</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/selected">selected</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/selectedIndex">selectedIndex</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/seltype">seltype</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/setfocus">setfocus</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/showCommentColumn">showCommentColumn</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/showcommentcolumn">showcommentcolumn</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/showpopup">showpopup</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/size">size</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/sizemode">sizemode</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/sizetopopup">sizetopopup</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/sort">sort</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/sortActive">sortActive</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/sortDirection">sortDirection</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/sortResource">sortResource</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/sortResource2">sortResource2</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/src">src</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/state">state</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/statedatasource">statedatasource</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/statusbar">statusbar</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/statustext">statustext</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/style">style</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/substate">substate</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/suppressonselect">suppressonselect</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/tabindex">tabindex</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/tabScrolling">tabScrolling</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/tabscrolling">tabscrolling</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/targets">targets</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/template">template</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/timeout">timeout</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/title">title</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/toolbarname">toolbarname</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/tooltip">tooltip</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/tooltiptext">tooltiptext</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/tooltiptextnew">tooltiptextnew</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/top">top</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/type">type</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/uri">uri</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/userAction">userAction</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/validate">validate</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/value">value</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/wait-cursor">wait-cursor</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/width">width</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/windowtype">windowtype</a> -</li><li> <a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82/wrap">wrap</a> -</li></ul> diff --git a/files/ru/mozilla/tech/xul/методы/index.html b/files/ru/mozilla/tech/xul/методы/index.html deleted file mode 100644 index 135b087f78..0000000000 --- a/files/ru/mozilla/tech/xul/методы/index.html +++ /dev/null @@ -1,185 +0,0 @@ ---- -title: Методы -slug: Mozilla/Tech/XUL/Методы -translation_of: Archive/Mozilla/XUL/Method ---- -<p><span class="breadcrumbs XULRefMeth_breadcrumbs">« <a href="/en-US/docs/XUL_Reference" title="/en-US/docs/XUL_Reference">XUL Reference home</a></span></p> - -<ul> - <li><a href="/en-US/docs/XUL/Method/acceptDialog" title="XUL/Method/acceptDialog">acceptDialog</a></li> - <li><a href="/en-US/docs/XUL/Method/addItemToSelection" title="XUL/Method/addItemToSelection">addItemToSelection</a></li> - <li><a href="/en-US/docs/XUL/Method/addPane" title="XUL/Method/addPane">addPane</a></li> - <li><a href="/en-US/docs/XUL/Method/addProgressListener" title="XUL/Method/addProgressListener">addProgressListener</a></li> - <li><a href="/en-US/docs/XUL/Method/addSession" title="XUL/Method/addSession">addSession</a></li> - <li><a href="/en-US/docs/XUL/Method/addTab" title="XUL/Method/addTab">addTab</a></li> - <li><a href="/en-US/docs/XUL/Method/AddTabsProgressListener" title="XUL/Method/addTab">addTabsProgressListener</a></li> - <li><a href="/en-US/docs/XUL/Method/advance" title="XUL/Method/advance">advance</a></li> - <li><a href="/en-US/docs/XUL/Method/advanceSelectedTab" title="XUL/Method/advanceSelectedTab">advanceSelectedTab</a></li> - <li><a href="/en-US/docs/XUL/Method/appendCustomToolbar" title="XUL/Method/appendCustomToolbar">appendCustomToolbar</a></li> - <li><a href="/en-US/docs/XUL/Method/appendGroup" title="XUL/Method/appendGroup">appendGroup</a></li> - <li><a href="/en-US/docs/XUL/Method/appendItem" title="XUL/Method/appendItem">appendItem</a></li> - <li><a href="/en-US/docs/XUL/Method/appendNotification" title="XUL/Method/appendNotification">appendNotification</a></li> - <li><a href="/en-US/docs/XUL/Method/blur" title="XUL/Method/blur">blur</a></li> - <li><a href="/en-US/docs/XUL/Method/cancel" title="XUL/Method/cancel">cancel</a></li> - <li><a href="/en-US/docs/XUL/Method/cancelDialog" title="XUL/Method/cancelDialog">cancelDialog</a></li> - <li><a href="/en-US/docs/XUL/Method/centerWindowOnScreen" title="XUL/Method/centerWindowOnScreen">centerWindowOnScreen</a></li> - <li><a href="/en-US/docs/XUL/Method/checkAdjacentElement" title="XUL/Method/checkAdjacentElement">checkAdjacentElement</a></li> - <li><a href="/en-US/docs/XUL/Method/clearResults" title="XUL/Method/clearResults">clearResults</a></li> - <li><a href="/en-US/docs/XUL/Method/clearSelection" title="XUL/Method/clearSelection">clearSelection</a></li> - <li><a href="/en-US/docs/XUL/Method/click" title="XUL/Method/click">click</a></li> - <li><a href="/en-US/docs/XUL/Method/close" title="XUL/Method/close">close</a></li> - <li><a href="/en-US/docs/XUL/Method/collapseToolbar" title="XUL/Method/collapseToolbar">collapseToolbar</a></li> - <li><a href="/en-US/docs/XUL/Method/contains" title="XUL/Method/contains">contains</a></li> - <li><a href="/en-US/docs/XUL/Method/decrease" title="XUL/Method/decrease">decrease</a></li> - <li><a href="/en-US/docs/XUL/Method/decreasePage" title="XUL/Method/decreasePage">decreasePage</a></li> - <li><a href="/en-US/docs/XUL/Method/doCommand" title="XUL/Method/doCommand">doCommand</a></li> - <li><a href="/en-US/docs/XUL/Method/ensureElementIsVisible" title="XUL/Method/ensureElementIsVisible">ensureElementIsVisible</a></li> - <li><a href="/en-US/docs/XUL/Method/ensureIndexIsVisible" title="XUL/Method/ensureIndexIsVisible">ensureIndexIsVisible</a></li> - <li><a href="/en-US/docs/XUL/Method/ensureSelectedElementIsVisible" title="XUL/Method/ensureSelectedElementIsVisible">ensureSelectedElementIsVisible</a></li> - <li><a href="/en-US/docs/XUL/Method/expandToolbar" title="XUL/Method/expandToolbar">expandToolbar</a></li> - <li><a href="/en-US/docs/XUL/Method/extra1" title="XUL/Method/extra1">extra1</a></li> - <li><a href="/en-US/docs/XUL/Method/extra2" title="XUL/Method/extra2">extra2</a></li> - <li><a href="/en-US/docs/XUL/Method/focus" title="XUL/Method/focus">focus</a></li> - <li><a href="/en-US/docs/XUL/Method/getBrowserAtIndex" title="XUL/Method/getBrowserAtIndex">getBrowserAtIndex</a></li> - <li><a href="/en-US/docs/XUL/Method/getBrowserForDocument" title="XUL/Method/getBrowserForDocument">getBrowserForDocument</a></li> - <li><a href="/en-US/docs/XUL/Method/getBrowserForTab" title="XUL/Method/getBrowserForTab">getBrowserForTab</a></li> - <li><a href="/en-US/docs/XUL/Method/getBrowserIndexForDocument" title="XUL/Method/getBrowserIndexForDocument">getBrowserIndexForDocument</a></li> - <li><a href="/en-US/docs/XUL/Method/getButton" title="XUL/Method/getButton">getButton</a></li> - <li><a href="/en-US/docs/XUL/Method/getDefaultSession" title="XUL/Method/getDefaultSession">getDefaultSession</a></li> - <li><a href="/en-US/docs/XUL/Method/getEditor" title="XUL/Method/getEditor">getEditor</a></li> - <li><a href="/en-US/docs/XUL/Method/getElementsByAttribute" title="XUL/Method/getElementsByAttribute">getElementsByAttribute</a></li> - <li><a href="/en-US/docs/XUL/Method/getElementsByAttributeNS" title="XUL/Method/getElementsByAttributeNS">getElementsByAttributeNS</a></li> - <li><a href="/en-US/docs/XUL/Method/getFormattedString" title="XUL/Method/getFormattedString">getFormattedString</a></li> - <li><a href="/en-US/docs/XUL/Method/getHTMLEditor" title="XUL/Method/getHTMLEditor">getHTMLEditor</a></li> - <li><a href="/en-US/docs/XUL/Method/getIndexOfFirstVisibleRow" title="XUL/Method/getIndexOfFirstVisibleRow">getIndexOfFirstVisibleRow</a></li> - <li><a href="/en-US/docs/XUL/Method/getIndexOfItem" title="XUL/Method/getIndexOfItem">getIndexOfItem</a></li> - <li><a href="/en-US/docs/XUL/Method/getItemAtIndex" title="XUL/Method/getItemAtIndex">getItemAtIndex</a></li> - <li><a href="/en-US/docs/XUL/Method/getNextItem" title="XUL/Method/getNextItem">getNextItem</a></li> - <li><a href="/en-US/docs/XUL/Method/getNotificationBox" title="XUL/Method/getNotificationBox">getNotificationBox</a></li> - <li><a href="/en-US/docs/XUL/Method/getNotificationWithValue" title="XUL/Method/getNotificationWithValue">getNotificationWithValue</a></li> - <li><a href="/en-US/docs/XUL/Method/getNumberOfVisibleRows" title="XUL/Method/getNumberOfVisibleRows">getNumberOfVisibleRows</a></li> - <li><a href="/en-US/docs/XUL/Method/getPageById" title="XUL/Method/getPageById">getPageById</a></li> - <li><a href="/en-US/docs/XUL/Method/getPreviousItem" title="XUL/Method/getPreviousItem">getPreviousItem</a></li> - <li><a href="/en-US/docs/XUL/Method/getResultAt" title="XUL/Method/getResultAt">getResultAt</a></li> - <li><a href="/en-US/docs/XUL/Method/getResultCount" title="XUL/Method/getResultCount">getResultCount</a></li> - <li><a href="/en-US/docs/XUL/Method/getResultValueAt" title="XUL/Method/getResultValueAt">getResultValueAt</a></li> - <li><a href="/en-US/docs/XUL/Method/getRowCount" title="XUL/Method/getRowCount">getRowCount</a></li> - <li><a href="/en-US/docs/XUL/Method/getSearchAt" title="XUL/Method/getSearchAt">getSearchAt</a></li> - <li><a href="/en-US/docs/XUL/Method/getSelectedItem" title="XUL/Method/getSelectedItem">getSelectedItem</a></li> - <li><a href="/en-US/docs/XUL/Method/getSession" title="XUL/Method/getSession">getSession</a></li> - <li><a href="/en-US/docs/XUL/Method/getSessionByName" title="XUL/Method/getSessionByName">getSessionByName</a></li> - <li><a href="/en-US/docs/XUL/Method/getSessionResultAt" title="XUL/Method/getSessionResultAt">getSessionResultAt</a></li> - <li><a href="/en-US/docs/XUL/Method/getSessionStatusAt" title="XUL/Method/getSessionStatusAt">getSessionStatusAt</a></li> - <li><a href="/en-US/docs/XUL/Method/getSessionValueAt" title="XUL/Method/getSessionValueAt">getSessionValueAt</a></li> - <li><a href="/en-US/docs/XUL/Method/getString" title="XUL/Method/getString">getString</a></li> - <li><a href="/en-US/docs/XUL/Method/goBack" title="XUL/Method/goBack">goBack</a></li> - <li><a href="/en-US/docs/XUL/Method/goBackGroup" title="XUL/Method/goBackGroup">goBackGroup</a></li> - <li><a href="/en-US/docs/XUL/Method/goDown" title="XUL/Method/goDown">goDown</a></li> - <li><a href="/en-US/docs/XUL/Method/goForward" title="XUL/Method/goForward">goForward</a></li> - <li><a href="/en-US/docs/XUL/Method/goForwardGroup" title="XUL/Method/goForwardGroup">goForwardGroup</a></li> - <li><a href="/en-US/docs/XUL/Method/goHome" title="XUL/Method/goHome">goHome</a></li> - <li><a href="/en-US/docs/XUL/Method/goTo" title="XUL/Method/goTo">goTo</a></li> - <li><a href="/en-US/docs/XUL/Method/gotoIndex" title="XUL/Method/gotoIndex">gotoIndex</a></li> - <li><a href="/en-US/docs/XUL/Method/goUp" title="XUL/Method/goUp">goUp</a></li> - <li><a href="/en-US/docs/XUL/Method/hidePopup" title="XUL/Method/hidePopup">hidePopup</a></li> - <li><a href="/en-US/docs/XUL/Method/increase" title="XUL/Method/increase">increase</a></li> - <li><a href="/en-US/docs/XUL/Method/increasePage" title="XUL/Method/increasePage">increasePage</a></li> - <li><a href="/en-US/docs/XUL/Method/insertItem" title="XUL/Method/insertItem">insertItem</a></li> - <li><a href="/en-US/docs/XUL/Method/insertItemAt" title="XUL/Method/insertItemAt">insertItemAt</a></li> - <li><a href="/en-US/docs/XUL/Method/invertSelection" title="XUL/Method/invertSelection">invertSelection</a></li> - <li><a href="/en-US/docs/XUL/Method/loadGroup" title="XUL/Method/loadGroup">loadGroup</a></li> - <li><a href="/en-US/docs/XUL/Method/loadOneTab" title="XUL/Method/loadOneTab">loadOneTab</a></li> - <li><a href="/en-US/docs/XUL/Method/loadTabs" title="XUL/Method/loadTabs">loadTabs</a></li> - <li><a href="/en-US/docs/XUL/Method/loadURI" title="XUL/Method/loadURI">loadURI</a></li> - <li><a href="/en-US/docs/XUL/Method/loadURIWithFlags" title="XUL/Method/loadURIWithFlags">loadURIWithFlags</a></li> - <li><a href="/en-US/docs/XUL/Method/makeEditable" title="XUL/Method/makeEditable">makeEditable</a></li> - <li><a href="/en-US/docs/XUL/Method/moveByOffset" title="XUL/Method/moveByOffset">moveByOffset</a></li> - <li><a href="/en-US/docs/XUL/Method/moveTo" title="XUL/Method/moveTo">moveTo</a></li> - <li><a href="/en-US/docs/XUL/Method/moveToAlertPosition" title="XUL/Method/moveToAlertPosition">moveToAlertPosition</a></li> - <li><a href="/en-US/docs/XUL/Method/onSearchComplete" title="XUL/Method/onSearchComplete">onSearchComplete</a></li> - <li><a href="/en-US/docs/XUL/Method/onTextEntered" title="XUL/Method/onTextEntered">onTextEntered</a></li> - <li><a href="/en-US/docs/XUL/Method/onTextReverted" title="XUL/Method/onTextReverted">onTextReverted</a></li> - <li><a href="/en-US/docs/XUL/Method/openPopup" title="XUL/Method/openPopup">openPopup</a></li> - <li><a href="/en-US/docs/XUL/Method/openPopupAtScreen" title="XUL/Method/openPopupAtScreen">openPopupAtScreen</a></li> - <li><a href="/en-US/docs/XUL/Method/openSubDialog" title="XUL/Method/openSubDialog">openSubDialog</a></li> - <li><a href="/en-US/docs/XUL/Method/openWindow" title="XUL/Method/openWindow">openWindow</a></li> - <li><a href="/en-US/docs/XUL/Method/preferenceForElement" title="XUL/Method/preferenceForElement">preferenceForElement</a></li> - <li><a href="/en-US/docs/XUL/Method/reload" title="XUL/Method/reload">reload</a></li> - <li><a href="/en-US/docs/XUL/Method/reloadAllTabs" title="XUL/Method/reloadAllTabs">reloadAllTabs</a></li> - <li><a href="/en-US/docs/XUL/Method/reloadTab" title="XUL/Method/reloadTab">reloadTab</a></li> - <li><a href="/en-US/docs/XUL/Method/reloadWithFlags" title="XUL/Method/reloadWithFlags">reloadWithFlags</a></li> - <li><a href="/en-US/docs/XUL/Method/removeAllItems" title="XUL/Method/removeAllItems">removeAllItems</a></li> - <li><a href="/en-US/docs/XUL/Method/removeAllNotifications" title="XUL/Method/removeAllNotifications">removeAllNotifications</a></li> - <li><a href="/en-US/docs/XUL/Method/removeAllTabsBut" title="XUL/Method/removeAllTabsBut">removeAllTabsBut</a></li> - <li><a href="/en-US/docs/XUL/Method/removeCurrentNotification" title="XUL/Method/removeCurrentNotification">removeCurrentNotification</a></li> - <li><a href="/en-US/docs/XUL/Method/removeCurrentTab" title="XUL/Method/removeCurrentTab">removeCurrentTab</a></li> - <li><a href="/en-US/docs/XUL/Method/removeItemAt" title="XUL/Method/removeItemAt">removeItemAt</a></li> - <li><a href="/en-US/docs/XUL/Method/removeItemFromSelection" title="XUL/Method/removeItemFromSelection">removeItemFromSelection</a></li> - <li><a href="/en-US/docs/XUL/Method/removeNotification" title="XUL/Method/removeNotification">removeNotification</a></li> - <li><a href="/en-US/docs/XUL/Method/removeProgressListener" title="XUL/Method/removeProgressListener">removeProgressListener</a></li> - <li><a href="/en-US/docs/XUL/Method/removeSession" title="XUL/Method/removeSession">removeSession</a></li> - <li><a href="/en-US/docs/XUL/Method/removeTab" title="XUL/Method/removeTab">removeTab</a></li> - <li><a href="/en-US/docs/XUL/Method/RemoveTabsProgressListener" title="XUL/Method/removeTab">removeTabsProgressListener</a></li> - <li><a href="/en-US/docs/XUL/Method/removeTransientNotifications" title="XUL/Method/removeTransientNotifications">removeTransientNotifications</a></li> - <li><a href="/en-US/docs/XUL/Method/replaceGroup" title="XUL/Method/replaceGroup">replaceGroup</a></li> - <li><a href="/en-US/docs/XUL/Method/reset" title="XUL/Method/reset">reset</a></li> - <li><a href="/en-US/docs/XUL/Method/rewind" title="XUL/Method/rewind">rewind</a></li> - <li><a href="/en-US/docs/XUL/Method/scrollByIndex" title="XUL/Method/scrollByIndex">scrollByIndex</a></li> - <li><a href="/en-US/docs/XUL/Method/scrollByPixels" title="XUL/Method/scrollByPixels">scrollByPixels</a></li> - <li><a href="/en-US/docs/XUL/Method/scrollToIndex" title="XUL/Method/scrollToIndex">scrollToIndex</a></li> - <li><a href="/en-US/docs/XUL/Method/select" title="XUL/Method/select">select</a></li> - <li><a href="/en-US/docs/XUL/Method/selectAll" title="XUL/Method/selectAll">selectAll</a></li> - <li><a href="/en-US/docs/XUL/Method/selectItem" title="XUL/Method/selectItem">selectItem</a></li> - <li><a href="/en-US/docs/XUL/Method/selectItemRange" title="XUL/Method/selectItemRange">selectItemRange</a></li> - <li><a href="/en-US/docs/XUL/Method/selectTabAtIndex" title="XUL/Method/selectTabAtIndex">selectTabAtIndex</a></li> - <li><a href="/en-US/docs/XUL/Method/setSelectionRange" title="XUL/Method/setSelectionRange">setSelectionRange</a></li> - <li><a href="/en-US/docs/XUL/Method/showPane" title="XUL/Method/showPane">showPane</a></li> - <li><a href="/en-US/docs/XUL/Method/showPopup" title="XUL/Method/showPopup">showPopup</a></li> - <li><a href="/en-US/docs/XUL/Method/sizeTo" title="XUL/Method/sizeTo">sizeTo</a></li> - <li><a href="/en-US/docs/XUL/Method/startEditing" title="XUL/Method/startEditing">startEditing</a></li> - <li><a href="/en-US/docs/XUL/Method/stop" title="XUL/Method/stop">stop</a></li> - <li><a href="/en-US/docs/XUL/Method/stopEditing" title="XUL/Method/stopEditing">stopEditing</a></li> - <li><a href="/en-US/docs/XUL/Method/SwapDocShells" title="XUL/Method/swapDocShells">swapDocShells</a></li> - <li><a href="/en-US/docs/XUL/Method/syncSessions" title="XUL/Method/syncSessions">syncSessions</a></li> - <li><a href="/en-US/docs/XUL/Method/timedSelect" title="XUL/Method/timedSelect">timedSelect</a></li> - <li><a href="/en-US/docs/XUL/Method/toggleItemSelection" title="XUL/Method/toggleItemSelection">toggleItemSelection</a></li> -</ul> - -<h3 id="Related_DOM_element_methods" name="Related_DOM_element_methods">Методы, относящиеся к DOM элементам</h3> - -<ul> - <li><a href="/en-US/docs/DOM/element.addEventListener" title="DOM/element.addEventListener">DOM:element.addEventListener</a></li> - <li><a href="/en-US/docs/DOM/Node.appendChild" title="DOM/element.appendChild">DOM:element.appendChild</a></li> - <li><a href="/en-US/docs/DOM/Node.compareDocumentPosition" title="DOM/Node.compareDocumentPosition">DOM:element.compareDocumentPosition</a></li> - <li><a href="/en-US/docs/DOM/element.dispatchEvent" title="DOM/element.dispatchEvent">DOM:element.dispatchEvent</a></li> - <li><a href="/en-US/docs/DOM/element.getAttribute" title="DOM/element.getAttribute">DOM:element.getAttribute</a></li> - <li><a href="/en-US/docs/DOM/element.getAttributeNode" title="DOM/element.getAttributeNode">DOM:element.getAttributeNode</a></li> - <li><a href="/en-US/docs/DOM/element.getAttributeNodeNS" title="DOM/element.getAttributeNodeNS">DOM:element.getAttributeNodeNS</a></li> - <li><a href="/en-US/docs/DOM/element.getAttributeNS" title="DOM/element.getAttributeNS">DOM:element.getAttributeNS</a></li> - <li><a href="/en-US/docs/DOM/element.getElementsByTagName" title="DOM/element.getElementsByTagName">DOM:element.getElementsByTagName</a></li> - <li><a href="/en-US/docs/DOM/element.getElementsByTagNameNS" title="DOM/element.getElementsByTagNameNS">DOM:element.getElementsByTagNameNS</a></li> - <li><a href="/en-US/docs/DOM/Node.getFeature" title="DOM/Node.getFeature">DOM:element.getFeature</a> <span class="inlineIndicator todo todoInline"><strong>FIXME:</strong> <em>brokenLink</em></span></li> - <li><a href="/en-US/docs/DOM/Node.getUserData" title="DOM/Node.getUserData">DOM:element.getUserData</a></li> - <li><a href="/en-US/docs/DOM/element.hasAttribute" title="DOM/element.hasAttribute">DOM:element.hasAttribute</a></li> - <li><a href="/en-US/docs/DOM/element.hasAttributeNS" title="DOM/element.hasAttributeNS">DOM:element.hasAttributeNS</a></li> - <li><a href="/en-US/docs/DOM/Node.hasAttributes" title="DOM/element.hasAttributes">DOM:element.hasAttributes</a></li> - <li><a href="/en-US/docs/DOM/Node.hasChildNodes" title="DOM/element.hasChildNodes">DOM:element.hasChildNodes</a></li> - <li><a href="/en-US/docs/DOM/Node.insertBefore" title="DOM/element.insertBefore">DOM:element.insertBefore</a></li> - <li><a href="/en-US/docs/DOM/Node.isEqualNode" title="DOM/Node.isEqualNode">DOM:element.isEqualNode</a></li> - <li><a href="/en-US/docs/DOM/Node.isSameNode" title="DOM/Node.isSameNode">DOM:element.isSameNode</a></li> - <li><a href="/en-US/docs/DOM/Node.isSupported" title="DOM/element.isSupported">DOM:element.isSupported</a></li> - <li><a href="/en-US/docs/DOM/Node.lookupNamespaceURI" title="DOM/Node.lookupNamespaceURI">DOM:element.lookupNamespaceURI</a></li> - <li><a href="/en-US/docs/DOM/Node.lookupPrefix" title="DOM/Node.lookupPrefix">DOM:element.lookupPrefix</a></li> - <li><a href="/en-US/docs/DOM/Node.normalize" title="DOM/element.normalize">DOM:element.normalize</a></li> - <li><a href="/en-US/docs/DOM/element.removeAttribute" title="DOM/element.removeAttribute">DOM:element.removeAttribute</a></li> - <li><a href="/en-US/docs/DOM/element.removeAttributeNode" title="DOM/element.removeAttributeNode">DOM:element.removeAttributeNode</a></li> - <li><a href="/en-US/docs/DOM/element.removeAttributeNS" title="DOM/element.removeAttributeNS">DOM:element.removeAttributeNS</a></li> - <li><a href="/en-US/docs/DOM/Node.removeChild" title="DOM/element.removeChild">DOM:element.removeChild</a></li> - <li><a href="/en-US/docs/DOM/element.removeEventListener" title="DOM/element.removeEventListener">DOM:element.removeEventListener</a></li> - <li><a href="/en-US/docs/DOM/Node.replaceChild" title="DOM/element.replaceChild">DOM:element.replaceChild</a></li> - <li><a href="/en-US/docs/DOM/element.setAttribute" title="DOM/element.setAttribute">DOM:element.setAttribute</a></li> - <li><a href="/en-US/docs/DOM/element.setAttributeNode" title="DOM/element.setAttributeNode">DOM:element.setAttributeNode</a></li> - <li><a href="/en-US/docs/DOM/element.setAttributeNodeNS" title="DOM/element.setAttributeNodeNS">DOM:element.setAttributeNodeNS</a></li> - <li><a href="/en-US/docs/DOM/element.setAttributeNS" title="DOM/element.setAttributeNS">DOM:element.setAttributeNS</a></li> - <li><a href="/en-US/docs/DOM/Node.setUserData" title="DOM/Node.setUserData">DOM:element.setUserData</a></li> -</ul> diff --git a/files/ru/mozilla/tech/xul/руководство_по_xul/index.html b/files/ru/mozilla/tech/xul/руководство_по_xul/index.html deleted file mode 100644 index c9b37fb8b8..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_xul/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Руководство по XUL -slug: Mozilla/Tech/XUL/Руководство_по_XUL -tags: - - XUL - - Руководство_по_XUL -translation_of: Archive/Mozilla/XUL/Tutorial ---- -<p> </p> -<p><br> - Это руководство расскажет нам о <a href="/ru/XUL" title="ru/XUL">XUL</a> (читается как <em>зул</em>). <a href="/ru/XUL" title="ru/XUL">XUL</a> — это основанный на XML язык описания интерфейса пользователя (<a href="/ru/XML" title="ru/XML">XML</a> User-interface Language). Язык создавался для описания интерфейсов в приложениях Mozilla.</p> -<h2 id=".D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5" name=".D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5">Введение</h2> -<ul> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5" title="ru/Руководство_по_XUL/Введение">Введение</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_XUL" title="ru/Руководство_по_XUL/Структура_XUL">Структура XUL</a> (<a href="/ru/docs/Mozilla/Tech/XUL/Tutorial/XUL_Structure">оригинальная статья</a>)</li> - <li><a href="/Ru/XUL_Tutorial/The_Chrome_URL" title="Ru/XUL_Tutorial/The_Chrome_URL">О Chrome URL</a></li> - <li><a href="/Ru/XUL_Tutorial/Manifest_Files" title="ru/XUL_Tutorial/Manifest_Files">Файлы Манифеста</a></li> -</ul> -<h2 id=".D0.9F.D1.80.D0.BE.D1.81.D1.82.D1.8B.D0.B5_.D1.8D.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D1.8B" name=".D0.9F.D1.80.D0.BE.D1.81.D1.82.D1.8B.D0.B5_.D1.8D.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D1.8B">Простые элементы</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/Creating_a_Window" title="ru/XUL_Tutorial/Creating_a_Window">Создаем окно</a></li> - <li><a href="/ru/XUL_Tutorial/Добавляем_кнопки" title="ru/XUL Tutorial/Добавляем кнопки">Добавляем кнопки</a></li> - <li><a href="/ru/XUL_Tutorial/Adding_Labels_and_Images" title="ru/XUL_Tutorial/Adding_Labels_and_Images">Добавляем текстовые метки и картинки</a></li> - <li><a href="/ru/XUL_Tutorial/Input_Controls" title="ru/XUL_Tutorial/Input_Controls">Элементы ввода</a></li> - <li><a href="/ru/XUL_Tutorial/List_Controls" title="ru/XUL_Tutorial/List_Controls">Списки</a></li> - <li><a href="/ru/XUL_Tutorial/Progress_Meters" title="ru/XUL_Tutorial/Progress_Meters">Полосы прогресса</a></li> - <li><a href="/ru/XUL_Tutorial/Adding_HTML_Elements" title="ru/XUL_Tutorial/Adding_HTML_Elements">Добавляем HTML-элементы</a></li> - <li><a href="/ru/XUL_Tutorial/Using_Spacers" title="ru/XUL_Tutorial/Using_Spacers">Используем заполнители</a></li> - <li><a href="/ru/XUL_Tutorial/More_Button_Features" title="ru/XUL_Tutorial/More_Button_Features">Дополнительные возможности кнопок</a></li> -</ul> -<h2 id=".D0.91.D0.BE.D0.BA.D1.81.D1.8B_.28BOX_Model.29" name=".D0.91.D0.BE.D0.BA.D1.81.D1.8B_.28BOX_Model.29">Боксы (BOX Model)</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/The_Box_Model" title="ru/XUL_Tutorial/The_Box_Model">Модель боксов</a></li> - <li><a href="/ru/XUL_Tutorial/Element_Positioning" title="ru/XUL_Tutorial/Element_Positioning">Позиционирование элементов</a></li> - <li><a href="/ru/XUL_Tutorial/Box_Model_Details" title="ru/XUL_Tutorial/Box_Model_Details">Модель в деталях</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%93%D1%80%D1%83%D0%BF%D0%BF%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B5_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B" title="ru/Руководство_по_XUL/Группирующие_элементы">Группирующие элементы</a></li> - <li><a href="/ru/XUL_Tutorial/Adding_More_Elements" title="ru/XUL_Tutorial/Adding_More_Elements">Добавляем элементы</a></li> -</ul> -<h2 id=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D1.8B_.D0.BF.D1.80.D0.B5.D0.B4.D1.81.D1.82.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F" name=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D1.8B_.D0.BF.D1.80.D0.B5.D0.B4.D1.81.D1.82.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F">Элементы представления</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/Stacks_and_Decks" title="ru/XUL_Tutorial/Stacks_and_Decks">Стеки и колоды</a></li> - <li><a href="/ru/XUL_Tutorial/Stack_Positioning" title="ru/XUL_Tutorial/Stack_Positioning">Позиционирование в стеке</a></li> - <li><a href="/ru/XUL_Tutorial/Tabboxes" title="ru/XUL_Tutorial/Tabboxes">Табы</a></li> - <li><a href="/ru/XUL_Tutorial/Grids" title="ru/XUL_Tutorial/Grids">Решетки</a></li> - <li><a href="/ru/XUL_Tutorial/Content_Panels" title="ru/XUL_Tutorial/Content_Panels">Панели содержимого (фреймы)</a></li> - <li><a href="/ru/XUL_Tutorial/Splitters" title="ru/XUL_Tutorial/Splitters">Разделители</a></li> - <li><a href="/ru/XUL_Tutorial/Scroll_Bars" title="ru/XUL_Tutorial/Scroll_Bars">Полосы прокрутки</a></li> -</ul> -<h2 id=".D0.9C.D0.B5.D0.BD.D1.8E_.D0.B8_.D0.BF.D0.B0.D0.BD.D0.B5.D0.BB.D0.B8_.D0.B8.D0.BD.D1.81.D1.82.D1.80.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.BE.D0.B2" name=".D0.9C.D0.B5.D0.BD.D1.8E_.D0.B8_.D0.BF.D0.B0.D0.BD.D0.B5.D0.BB.D0.B8_.D0.B8.D0.BD.D1.81.D1.82.D1.80.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.BE.D0.B2">Меню и панели инструментов</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/Toolbars" title="ru/XUL_Tutorial/Toolbars">Панели инструментов</a></li> - <li><a href="/ru/XUL_Tutorial/Simple_Menu_Bars" title="ru/XUL_Tutorial/Simple_Menu_Bars">Простые панели меню</a></li> - <li><a href="/ru/XUL_Tutorial/More_Menu_Features" title="ru/XUL_Tutorial/More_Menu_Features">Подробнее о меню</a></li> - <li><a href="/ru/XUL_Tutorial/Popup_Menus" title="ru/XUL_Tutorial/Popup_Menus">Всплывающие меню</a></li> - <li><a href="/ru/XUL_Tutorial/Scrolling_Menus" title="ru/XUL_Tutorial/Scrolling_Menus">Прокручиваемые панели меню</a></li> -</ul> -<h2 id=".D0.A1.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D1.8B_.D0.B8_.D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D1.8F" name=".D0.A1.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D1.8B_.D0.B8_.D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D1.8F">Скрипты и события</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/Adding_Event_Handlers" title="ru/XUL_Tutorial/Adding_Event_Handlers">Добавляем обработчик события</a></li> - <li><a href="/ru/XUL_Tutorial/More_Event_Handlers" title="ru/XUL_Tutorial/More_Event_Handlers">Разные обработчики событий</a></li> - <li><a href="/ru/XUL_Tutorial/Keyboard_Shortcuts" title="ru/XUL_Tutorial/Keyboard_Shortcuts">«Горячие» клавиши</a></li> - <li><a href="/ru/XUL_Tutorial/Focus_and_Selection" title="ru/XUL_Tutorial/Focus_and_Selection">Фокус и выделение</a></li> - <li><a href="/ru/XUL_Tutorial/Commands" title="ru/XUL_Tutorial/Commands">Команды</a></li> - <li><a href="/ru/XUL_Tutorial/Updating_Commands" title="ru/XUL_Tutorial/Updating_Commands">Управление командами</a></li> - <li><a href="/ru/XUL_Tutorial/Broadcasters_and_Observers" title="ru/XUL_Tutorial/Broadcasters_and_Observers">Элементы дикторы и слушатели</a></li> -</ul> -<h2 id=".D0.9E.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.BD.D0.B0.D1.8F_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D1.8C_.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0_.28DOM.29" name=".D0.9E.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.BD.D0.B0.D1.8F_.D0.BC.D0.BE.D0.B4.D0.B5.D0.BB.D1.8C_.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0_.28DOM.29">Объектная модель документа (DOM)</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/Document_Object_Model" title="ru/XUL_Tutorial/Document_Object_Model">О модели</a></li> - <li><a href="/ru/XUL_Tutorial/Modifying_a_XUL_Interface" title="ru/XUL_Tutorial/Modifying_a_XUL_Interface">Программно изменяем интерфейс</a></li> - <li><a href="/ru/XUL_Tutorial/Manipulating_Lists" title="ru/XUL_Tutorial/Manipulating_Lists">Управляем списками</a></li> - <li><a href="/ru/XUL_Tutorial/Box_Objects" title="ru/XUL_Tutorial/Box_Objects">Контейнеры</a></li> - <li><a href="/ru/XUL_Tutorial/XPCOM_Interfaces" title="ru/XUL_Tutorial/XPCOM_Interfaces">Интерфейсы XPCOM</a></li> - <li><a href="/ru/XUL_Tutorial/XPCOM_Examples" title="ru/XUL_Tutorial/XPCOM_Examples">Примеры использования XPCOM</a></li> -</ul> -<h2 id=".D0.94.D0.B5.D1.80.D0.B5.D0.B2.D1.8C.D1.8F" name=".D0.94.D0.B5.D1.80.D0.B5.D0.B2.D1.8C.D1.8F">Деревья</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/Trees" title="ru/XUL_Tutorial/Trees">Введение</a></li> - <li><a href="/ru/XUL_Tutorial/More_Tree_Features" title="ru/XUL_Tutorial/More_Tree_Features">Подробнее о деревьях</a></li> - <li><a href="/ru/XUL_Tutorial/Tree_Selection" title="ru/XUL_Tutorial/Tree_Selection">Выделение</a></li> - <li><a href="/ru/XUL_Tutorial/Custom_Tree_Views" title="ru/XUL_Tutorial/Custom_Tree_Views">Собственный вывод дерева</a></li> - <li><a href="/ru/XUL_Tutorial/Tree_View_Details" title="ru/XUL_Tutorial/Tree_View_Details">Детальная настройка дерева </a></li> - <li><a href="/ru/XUL_Tutorial/Tree_Box_Objects" title="ru/XUL_Tutorial/Tree_Box_Objects">Контейнеры деревьев</a></li> -</ul> -<h2 id="RDF_.D0.B8_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D1.8B" name="RDF_.D0.B8_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D1.8B">RDF и шаблоны</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/Introduction_to_RDF" title="ru/XUL_Tutorial/Introduction_to_RDF">Введение в RDF</a></li> - <li><a href="/ru/XUL_Tutorial/Templates" title="ru/XUL_Tutorial/Templates">Шаблоны</a></li> - <li><a href="/ru/XUL_Tutorial/Trees_and_Templates" title="ru/XUL_Tutorial/Trees_and_Templates">Шаблоны для деревьев</a></li> - <li><a href="/ru/XUL_Tutorial/RDF_Datasources" title="ru/XUL_Tutorial/RDF_Datasources">Источники данных RDF</a></li> - <li><a href="/ru/XUL_Tutorial/Advanced_Rules" title="ru/XUL_Tutorial/Advanced_Rules">Правила посложнее</a></li> - <li><a href="/ru/XUL_Tutorial/Persistent_Data" title="ru/XUL_Tutorial/Persistent_Data">Сохраняем состояние элементов</a></li> -</ul> -<h2 id=".D0.A2.D0.B5.D0.BC.D1.8B_.D0.BE.D1.84.D0.BE.D1.80.D0.BC.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F_.D0.B8_.D0.BB.D0.BE.D0.BA.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F" name=".D0.A2.D0.B5.D0.BC.D1.8B_.D0.BE.D1.84.D0.BE.D1.80.D0.BC.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F_.D0.B8_.D0.BB.D0.BE.D0.BA.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F">Темы оформления и локализация</h2> -<ul> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D1%81%D1%82%D0%B8%D0%BB%D0%B5%D0%B9" title="ru/Руководство_по_XUL/Добавление_таблицы_стилей">Добавление таблицы стилей</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%A1%D1%82%D0%B8%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%B0" title="ru/Руководство_по_XUL/Стилизация_дерева">Стилизация дерева</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E" title="ru/Руководство_по_XUL/Модификация_оформления_по_умолчанию">Модификация оформления по умолчанию</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D0%BC%D1%8B_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F" title="ru/Руководство_по_XUL/Создание_темы_оформления">Создание темы оформления</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" title="ru/Руководство_по_XUL/Локализация">Локализация</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BA" title="ru/Руководство_по_XUL/Файлы_настроек">Файлы настроек</a></li> -</ul> -<h2 id=".D0.9F.D1.80.D0.B8.D0.B2.D1.8F.D0.B7.D0.BA.D0.B8_.28.D0.B1.D0.B8.D0.BD.D0.B4.D0.B8.D0.BD.D0.B3.D0.B8.29" name=".D0.9F.D1.80.D0.B8.D0.B2.D1.8F.D0.B7.D0.BA.D0.B8_.28.D0.B1.D0.B8.D0.BD.D0.B4.D0.B8.D0.BD.D0.B3.D0.B8.29">Привязки (Bindings)</h2> -<ul> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_XBL" title="ru/Руководство_по_XUL/Введение_в_XBL">Введение в XBL</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%90%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%BD%D0%BE%D0%B5_%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B5_%D0%B2_XBL" title="ru/Руководство_по_XUL/Анонимное_содержимое_в_XBL">Анонимное содержимое</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2_%D0%B2_XBL" title="ru/Руководство_по_XUL/Наследование_свойств_в_XBL">Наследование свойств в XBL</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%B2_XBL" title="ru/Руководство_по_XUL/Свойства_в_XBL">Добавление свойств</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%B2_XBL" title="ru/Руководство_по_XUL/Методы_в_XBL">Добавление методов</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B8_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9_%D0%B2_XBL" title="ru/Руководство_по_XUL/Обработчики_событий_в_XBL">Добавление обработчиков событий</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9D%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2_XBL" title="ru/Руководство_по_XUL/Наследование_в_XBL">Наследование в XBL</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_XBL" title="ru/Руководство_по_XUL/Пример_XBL">Пример</a></li> -</ul> -<h2 id=".D0.A1.D0.BF.D0.B5.D1.86.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.B2.D0.B8.D0.B4.D1.8B_.D0.BE.D0.BA.D0.BE.D0.BD" name=".D0.A1.D0.BF.D0.B5.D1.86.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.B2.D0.B8.D0.B4.D1.8B_.D0.BE.D0.BA.D0.BE.D0.BD">Специальные виды окон</h2> -<ul> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D1%81%D0%BD%D1%8B%D0%B5_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BE%D0%BA%D0%BE%D0%BD" title="ru/Руководство_по_XUL/Интересные_свойства_окон">Интересные свойства окон</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2" title="ru/Руководство_по_XUL/Создание_диалогов">Создание диалогов</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%94%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3%D0%B8_%C2%AB%D0%9E%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8C%C2%BB_%D0%B8_%C2%AB%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C%C2%BB" title="ru/Руководство_по_XUL/Диалоги_«Открыть»_и_«Сохранить»">Диалоги «Открыть» и «Сохранить»</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0" title="ru/Руководство_по_XUL/Создание_мастера">Создание мастера</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9F%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%B5%D0%B5_%D0%BE_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%BE%D0%B2" title="ru/Руководство_по_XUL/Подробнее_о_создании_мастеров">Подробнее о создании мастеров</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9E%D0%B2%D0%B5%D1%80%D0%BB%D0%B5%D0%B8" title="ru/Руководство_по_XUL/Оверлеи">Оверлеи</a></li> - <li><a href="/ru/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_XUL/%D0%9C%D0%B5%D0%B6%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BD%D1%8B%D0%B5_%D0%BE%D0%B2%D0%B5%D1%80%D0%BB%D0%B5%D0%B8" title="ru/Руководство_по_XUL/Межпакетные_оверлеи">Межпакетные оверлеи</a></li> -</ul> -<h2 id=".D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0" name=".D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0">Установка</h2> -<ul> - <li><a href="/ru/XUL_Tutorial/Creating_an_Installer" title="ru/XUL_Tutorial/Creating_an_Installer">Создание инсталятора</a></li> - <li><a href="/ru/XUL_Tutorial/Install_Scripts" title="ru/XUL_Tutorial/Install_Scripts">Установка скриптов</a></li> - <li><a href="/ru/XUL_Tutorial/Additional_Install_Features" title="ru/XUL_Tutorial/Additional_Install_Features">Дополнительные возможности</a></li> -</ul> -<div class="note"> - <p>Это руководство первоначально написано Нилом Дикиным(<a class="external" href="http://www.xulplanet.com/ndeakin/">Neil Deakin</a>). И он любезно разрешил нам разместить текст на <a href="/Project:ru/About" title="Project:ru/About">MDC</a>.</p> -</div> -<div class="originaldocinfo"> - <h5 id=".D0.98.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D1.8F_.D0.BE_.D0.BF.D1.80.D0.BE.D0.B8.D1.81.D1.85.D0.BE.D0.B6.D0.B4.D0.B5.D0.BD.D0.B8.D0.B8_.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0" name=".D0.98.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D1.8F_.D0.BE_.D0.BF.D1.80.D0.BE.D0.B8.D1.81.D1.85.D0.BE.D0.B6.D0.B4.D0.B5.D0.BD.D0.B8.D0.B8_.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0">Информация о происхождении документа</h5> - <ul> - <li>Автор: <a class="external" href="http://www.xulplanet.com/ndeakin/">Neil Deakin</a></li> - <li>Последнее обновление: 3 июля 2005</li> - <li>О правах копирования: © 1999-2005 XULPlanet.com</li> - </ul> -</div> -<p><span class="comment">Interwiki Language Links</span></p> -<p></p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_xul/keyboard_shortcuts/index.html b/files/ru/mozilla/tech/xul/руководство_по_xul/keyboard_shortcuts/index.html deleted file mode 100644 index ea41465bc4..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_xul/keyboard_shortcuts/index.html +++ /dev/null @@ -1,392 +0,0 @@ ---- -title: Keyboard Shortcuts -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Keyboard_Shortcuts -translation_of: Archive/Mozilla/XUL/Tutorial/Keyboard_Shortcuts ---- -<p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/XUL_Tutorial/More_Event_Handlers" style="float: left;">« Предыдущая статья</a><a href="/ru/docs/XUL_Tutorial/Focus_and_Selection">Следующая статья »</a></p> -</div><p></p> - -<p>You could use keyboard event handlers to respond to the keyboard. However, it would be tedious to do that for every button and menu item (though it could be necessary when one's key commands are only triggered when the user is focused on a particular element).</p> - -<h3 id="Creating_a_Keyboard_Shortcut" name="Creating_a_Keyboard_Shortcut">Creating a Keyboard Shortcut</h3> - -<p>XUL provides methods in which you can define keyboard shortcuts. We've already seen in <a href="/en/XUL_Tutorial/Simple_Menu_Bars" title="en/XUL_Tutorial/Simple_Menu_Bars">the section on menus</a> that we can define an attribute called <code>accesskey</code> which specifies the key which a user can press to activate the menu or menu item. In the example below, the File menu can be selected by pressing Alt and F (or some other key combination for a specific platform). Once the File menu is open, the Close menu item can be selected by pressing C.</p> - -<p><span id="Example_1"><a id="Example_1"></a><strong>Example 1</strong></span> : <a href="https://developer.mozilla.org/samples/xultu/examples/ex_keyshort_1.xul.txt">Исходный код</a> <a href="https://developer.mozilla.org/samples/xultu/examples/ex_keyshort_1.xul">Просмотреть</a></p> - -<pre><menubar id="sample-menubar"> - <menu id="file-menu" label="File" accesskey="f"> - <menupopup id="file-popup"> - <menuitem id="close-command" label="Close" accesskey="c"/> - </menupopup> - </menu> -</menubar> -</pre> - -<p>You can also use the <code><code id="a-accesskey"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/accesskey">accesskey</a></code></code> attribute on buttons. When the key is pressed in this case, the button is selected.</p> - -<p>You might want to set up more general keyboard shortcuts however. For example, pressing Control+C to copy text to the clipboard. Although shortcuts such as this might not always be valid, they will usually work any time the window is open. Usually, a keyboard shortcut will be allowed at any time and you can check to see whether it should do something using a script. For example, copying text to the clipboard should only work when some text is selected.</p> - -<h4 id="Key_element" name="Key_element">Key element</h4> - -<p>XUL provides an element, <code><code><a href="/ru/docs/Mozilla/Tech/XUL/key" title="key">key</a></code></code>, which lets you define a keyboard shortcut for a window. It has attributes to specify the key that should be pressed and what modifier keys (such as Shift or Control) need to be pressed. An example is shown below:</p> - -<pre><keyset> - <key id="sample-key" modifiers="shift" key="R"/> -</keyset> -</pre> - -<p>This sample defines a keyboard shortcut that is activated when the user presses the Shift key and R. The <code><code id="a-key"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/key">key</a></code></code> attribute (note that it has the same name as the element itself) can be used to indicate which key should be pressed, in this case R. You could add any character for this attribute to require that key to be pressed. The modifiers that must be pressed are indicated with the <code><code id="a-modifiers"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/modifiers">modifiers</a></code></code> attribute. It is a space-separated list of modifier keys, which are listed below.</p> - -<dl> - <dt>alt</dt> - <dd>The user must press the Alt key. On the Macintosh, this is the Option key.</dd> - <dt>control</dt> - <dd>The user must press the Control key.</dd> - <dt>meta</dt> - <dd>The user must press the Meta key. This is the Command key on the Macintosh.</dd> - <dt>shift</dt> - <dd>The user must press the Shift key.</dd> - <dt>os</dt> - <dd>The user must press the Win key. This is the Super key or the Hyper key on Linux. If this value is used, typically the key combination conflicts with system wide shortcut keys. So, you shouldn't use this value as far as possible. </dd> - <dt>accel</dt> - <dd>The user must press the special accelerator key. The key used for keyboard shortcuts on the user's platform. Usually, this would be the value you would use.</dd> - <dt>access</dt> - <dd>The user must press the special access key. The key used for access keys on the user's platform.</dd> -</dl> - -<p>Your keyboard won't necessarily have all of the keys, in which case they will be mapped to modifier keys that you do have.</p> - -<p>The <code><code><a href="/ru/docs/Mozilla/Tech/XUL/key" title="key">key</a></code></code> element must be placed inside a <code><code><a href="/ru/docs/Mozilla/Tech/XUL/keyset" title="keyset">keyset</a></code></code> element. This element is designed for holding a set of <code>key</code> elements, which serves to group all of the key definitions in one place in a file. Any <code>key</code> elements outside of a <code>keyset</code> element will not work.</p> - -<p>Each platform generally uses a different key for keyboard shortcuts. For example, Windows uses the Control key and the Macintosh uses the Command key. It would be inconvenient to define separate <code>key</code> elements for each platform. Luckily, there is a solution. The modifier <code>accel</code> refers to the special platform-specific key used for shortcuts. It works just like the other modifiers, but won't be the same on every platform.</p> - -<p>Here are some additional examples:</p> - -<pre><keyset> - <key id="copy-key" modifiers="control" key="C"/> - <key id="explore-key" modifiers="control alt" key="E"/> - <key id="paste-key" modifiers="accel" key="V"/> -</keyset> -</pre> - -<h4 id="Keycode_attribute" name="Keycode_attribute">Keycode attribute</h4> - -<p>The <code><code id="a-key"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/key">key</a></code></code> attribute is used to specify the key that must be pressed. However, there will also be cases where you want to refer to keys that cannot be specified with a character (such as the Enter key or the function keys). The <code>key</code> attribute can only be used for printable characters. Another attribute, <code><code id="a-keycode"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/keycode">keycode</a></code></code> can be used for non-printable characters.</p> - -<p>The <code><code id="a-keycode"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/keycode">keycode</a></code></code> attribute should be set to a special code which represents the key you want. A table of the keys is listed below. Not all of the keys are available on all keyboards.</p> - -<table class="fullwidth-table"> - <tbody> - <tr> - <td>VK_CANCEL</td> - <td>VK_BACK</td> - <td>VK_TAB</td> - <td>VK_CLEAR</td> - </tr> - <tr> - <td>VK_RETURN</td> - <td>VK_ENTER</td> - <td>VK_SHIFT</td> - <td>VK_CONTROL</td> - </tr> - <tr> - <td>VK_ALT</td> - <td>VK_PAUSE</td> - <td>VK_CAPS_LOCK</td> - <td>VK_ESCAPE</td> - </tr> - <tr> - <td>VK_SPACE</td> - <td>VK_PAGE_UP</td> - <td>VK_PAGE_DOWN</td> - <td>VK_END</td> - </tr> - <tr> - <td>VK_HOME</td> - <td>VK_LEFT</td> - <td>VK_UP</td> - <td>VK_RIGHT</td> - </tr> - <tr> - <td>VK_DOWN</td> - <td>VK_PRINTSCREEN</td> - <td>VK_INSERT</td> - <td>VK_DELETE</td> - </tr> - <tr> - <td>VK_0</td> - <td>VK_1</td> - <td>VK_2</td> - <td>VK_3</td> - </tr> - <tr> - <td>VK_4</td> - <td>VK_5</td> - <td>VK_6</td> - <td>VK_7</td> - </tr> - <tr> - <td>VK_8</td> - <td>VK_9</td> - <td>VK_SEMICOLON</td> - <td>VK_EQUALS</td> - </tr> - <tr> - <td>VK_A</td> - <td>VK_B</td> - <td>VK_C</td> - <td>VK_D</td> - </tr> - <tr> - <td>VK_E</td> - <td>VK_F</td> - <td>VK_G</td> - <td>VK_H</td> - </tr> - <tr> - <td>VK_I</td> - <td>VK_J</td> - <td>VK_K</td> - <td>VK_L</td> - </tr> - <tr> - <td>VK_M</td> - <td>VK_N</td> - <td>VK_O</td> - <td>VK_P</td> - </tr> - <tr> - <td>VK_Q</td> - <td>VK_R</td> - <td>VK_S</td> - <td>VK_T</td> - </tr> - <tr> - <td>VK_U</td> - <td>VK_V</td> - <td>VK_W</td> - <td>VK_X</td> - </tr> - <tr> - <td>VK_Y</td> - <td>VK_Z</td> - <td>VK_NUMPAD0</td> - <td>VK_NUMPAD1</td> - </tr> - <tr> - <td>VK_NUMPAD2</td> - <td>VK_NUMPAD3</td> - <td>VK_NUMPAD4</td> - <td>VK_NUMPAD5</td> - </tr> - <tr> - <td>VK_NUMPAD6</td> - <td>VK_NUMPAD7</td> - <td>VK_NUMPAD8</td> - <td>VK_NUMPAD9</td> - </tr> - <tr> - <td>VK_MULTIPLY</td> - <td>VK_ADD</td> - <td>VK_SEPARATOR</td> - <td>VK_SUBTRACT</td> - </tr> - <tr> - <td>VK_DECIMAL</td> - <td>VK_DIVIDE</td> - <td>VK_F1</td> - <td>VK_F2</td> - </tr> - <tr> - <td>VK_F3</td> - <td>VK_F4</td> - <td>VK_F5</td> - <td>VK_F6</td> - </tr> - <tr> - <td>VK_F7</td> - <td>VK_F8</td> - <td>VK_F9</td> - <td>VK_F10</td> - </tr> - <tr> - <td>VK_F11</td> - <td>VK_F12</td> - <td>VK_F13</td> - <td>VK_F14</td> - </tr> - <tr> - <td>VK_F15</td> - <td>VK_F16</td> - <td>VK_F17</td> - <td>VK_F18</td> - </tr> - <tr> - <td>VK_F19</td> - <td>VK_F20</td> - <td>VK_F21</td> - <td>VK_F22</td> - </tr> - <tr> - <td>VK_F23</td> - <td>VK_F24</td> - <td>VK_NUM_LOCK</td> - <td>VK_SCROLL_LOCK</td> - </tr> - <tr> - <td>VK_COMMA</td> - <td>VK_PERIOD</td> - <td>VK_SLASH</td> - <td>VK_BACK_QUOTE</td> - </tr> - <tr> - <td>VK_OPEN_BRACKET</td> - <td>VK_BACK_SLASH</td> - <td>VK_CLOSE_BRACKET</td> - <td>VK_QUOTE</td> - </tr> - <tr> - <td>VK_HELP</td> - <td> </td> - <td> </td> - <td> </td> - </tr> - </tbody> -</table> - -<p>For example, to create a shortcut that is activated when the user presses Alt and F5, do the following:</p> - -<pre><keyset> - <key id="test-key" modifiers="alt" keycode="VK_F5"/> -</keyset> -</pre> - -<p>The example below demonstrates some more keyboard shortcuts:</p> - -<pre><keyset> - <key id="copy-key" modifiers="accel" key="C"/> - <key id="find-key" keycode="VK_F3"/> - <key id="switch-key" modifiers="control alt" key="1"/> -</keyset> -</pre> - -<p>The first key is invoked when the user presses their platform-specific shortcut key and C. The second is invoked when the user presses F3. The third is invoked on a press of the Control key, the Alt key and 1. If you wanted to distinguish between keys on the main part of the keyboard and the numeric keypad, use the VK_NUMPAD keys (such as VK_NUMPAD1).</p> - -<div class="note"> -<p>Refer to the <a class="external" href="http://www.mozilla.org/access/keyboard/">Mozilla Keyboard Planning FAQ and Cross Reference</a> for more information about selecting keyboard shortcuts to use in applications.</p> -</div> - -<h3 id="Using_the_Keyboard_Shortcuts" name="Using_the_Keyboard_Shortcuts">Using the Keyboard Shortcuts</h3> - -<p>Now that we know how to define keyboard shortcuts, we'll find out how we can use them. There are two ways.</p> - -<p><strong>The first way</strong> is the simplest and just requires that you use the command event handler on the <code><code><a href="/ru/docs/Mozilla/Tech/XUL/key" title="key">key</a></code></code> element. When the user presses the key, the script will be invoked. An example is shown below:</p> - -<pre><keyset> - <key id="copy-key" modifiers="accel" key="C" oncommand="DoCopy();"/> -</keyset> -</pre> - -<p>The function <code>DoCopy</code> will be called when the user presses the keys specified by the <code><code><a href="/ru/docs/Mozilla/Tech/XUL/key" title="key">key</a></code></code> element, which in this example, are the keys for copying to the clipboard (such as Control+C). This will work as long as the window is open. The <code>DoCopy</code> function should check to see if text is selected and then copy the text to the clipboard. Note that textboxes have the clipboard shortcuts built-in so you don't have to implement them yourself.</p> - -<h4 id="Assigning_a_keyboard_shortcut_on_a_menu" name="Assigning_a_keyboard_shortcut_on_a_menu">Assigning a keyboard shortcut on a menu</h4> - -<p><strong>The second way</strong> is: If you are assigning a keyboard shortcut that performs a command that also exists on a menu, you can associate the <code><code><a href="/ru/docs/Mozilla/Tech/XUL/key" title="key">key</a></code></code> element directly with the menu command. To do this, also add a <code><code id="a-key"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/key">key</a></code></code> attribute on the <code><code><a href="/ru/docs/Mozilla/Tech/XUL/menuitem" title="menuitem">menuitem</a></code></code>. Set its value to the <code><code id="a-id"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/id">id</a></code></code> of the key that you want to use. The example below demonstrates this.</p> - -<p><span id="Example_2"><a id="Example_2"></a><strong>Example 2</strong></span> : <a href="https://developer.mozilla.org/samples/xultu/examples/ex_keyshort_2.xul.txt">Исходный код</a> <a href="https://developer.mozilla.org/samples/xultu/examples/ex_keyshort_2.xul">Просмотреть</a></p> - -<div class="float-right"><img alt="Image:keyshort1.jpg" class="internal" src="/@api/deki/files/737/=Keyshort1.jpg"></div> - -<pre><keyset> - <key id="paste-key" modifiers="accel" key="V" - oncommand="alert('Paste invoked')"/> -</keyset> - -<menubar id="sample-menubar"> - <menu id="edit-menu" label="Edit" accesskey="e"> - <menupopup id="edit-popup"> - <menuitem id="paste-command" - accesskey="p" key="paste-key" - label="Paste" oncommand="alert('Paste invoked')"/> - </menupopup> - </menu> -</menubar> -</pre> - -<p>The menuitem's <code><code id="a-key"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/key">key</a></code></code> attribute, which here is <code>paste-key</code> is equal to the <code>id</code> of the defined key. You can use this for additional keys as well to define keyboard shortcuts for any number of menu items.</p> - -<p>You'll also notice in the image that text has been placed next to the Paste menu command to indicate that Control and the V key can be pressed to invoke the menu command. This is added for you based on the modifiers on the <code>key</code> element. Keyboard shortcuts attached to menus will work even if the menu is not open.</p> - -<p>One additional feature of key definitions is that you can disable them easily. To do this add a <code><code id="a-disabled"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/disabled">disabled</a></code></code> attribute to the <code>key</code> element and set it to the value <code>true</code>. This disables the keyboard shortcut so that it cannot be invoked. It is useful to change the <code>disabled</code> attribute using a script.</p> - -<p> </p> - -<div class="highlight"> -<h4 id="Our_find_files_example" name="Our_find_files_example">Our find files example</h4> - -<p>Let's add keyboard shortcuts to the find files dialog. We'll add four of them, one for each of the Cut, Copy, and Paste commands and also one for the Close command when the user presses Escape.</p> - -<pre class="eval"><?xml version="1.0" encoding="utf-8"?> -<window xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>"> - <keyset> - <key id="cut_cmd" modifiers="accel" key="X"/> - <key id="copy_cmd" modifiers="accel" key="C"/> - <key id="paste_cmd" modifiers="accel" key="V"/> - <key id="close_cmd" keycode="VK_ESCAPE" oncommand="window.close();"/> - </keyset></pre> - -<p><vbox flex="1"><br> - <toolbox><br> - <menubar id="findfiles-menubar"><br> - <menu id="file-menu" label="File" accesskey="f"><br> - <menupopup id="file-popup"><br> - <menuitem label="Open Search..." accesskey="o"/><br> - <menuitem label="Save Search..." accesskey="s"/><br> - <menuseparator/><br> - <menuitem label="Close" accesskey="c" key="close_cmd"<br> - oncommand="window.close();"/><br> - </menupopup><br> - </menu><br> - <menu id="edit-menu" label="Edit" accesskey="e"><br> - <menupopup id="edit-popup"><br> - <menuitem label="Cut" accesskey="t" key="cut_cmd"/><br> - <menuitem label="Copy" accesskey="c" key="copy_cmd"/><br> - <menuitem label="Paste" accesskey="p" key="paste_cmd" disabled="true"/><br> - </menupopup><br> - </menu><br> - </menubar><br> - </toolbox><br> - </vbox><br> - </window></p> - -<p>Now we can use those shortcuts to activate the commands. Of course, the clipboard commands don't do anything anyway, as we haven't written those scripts.</p> -</div> - -<h3 id="Key_Events" name="Key_Events">Key Events</h3> - -<p>There are three keyboard events that may be used if the key related features described above aren't suitable. These events are:</p> - -<dl> - <dt>keypress</dt> - <dd>Called when a key is pressed and released when an element has the focus. You might use this to check for allowed characters in a field.</dd> - <dt>keydown</dt> - <dd>Called when a key is pressed down while an element has the focus. Note that the event will be called as soon as the key is pressed, even if it hasn't been released yet.</dd> - <dt>keyup</dt> - <dd>Called when a key is released while an element has the focus.</dd> -</dl> - -<p>Key events are only sent to the element that has the focus. Typically, this will include textboxes, buttons, checkboxes and so forth. If no element is focused, the key event will instead be targeted at the XUL document itself. In this case, you can add an event listener to the <code><code><a href="/ru/docs/Mozilla/Tech/XUL/window" title="window">window</a></code></code> tag. Normally though, if you want to respond to keys globally, you will use a keyboard shortcut as described earlier.</p> - -<p>The key <a href="/en/DOM/event" title="en/DOM/event">event object</a> has two properties which hold the key that was pressed. The <code><a href="/en/DOM/event.keyCode" title="en/DOM/event.keyCode">keyCode</a></code> property holds the key code and may be compared to one of the constants from the key table earlier in this section. The <code><a href="/en/DOM/event.charCode" title="en/DOM/event.charCode">charCode</a></code> is used for printable characters and will hold the numeric Unicode character code value for the key that was pressed.</p> - -<div class="highlight"><span id="Our_Find_files_example_so_far"><a id="Our_Find_files_example_so_far"></a><strong>Our Find files example so far</strong></span> : <a href="https://developer.mozilla.org/samples/xultu/examples/findfile/findfile-keyshort.xul.txt">Исходный код</a> <a href="https://developer.mozilla.org/samples/xultu/examples/findfile/findfile-keyshort.xul">Просмотреть</a></div> - -<p>Next, we'll find out how to <a href="/en/XUL_Tutorial/Focus_and_Selection" title="en/XUL_Tutorial/Focus_and_Selection">handle focus and the selection</a>.</p> - -<p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/XUL_Tutorial/More_Event_Handlers" style="float: left;">« Предыдущая статья</a><a href="/ru/docs/XUL_Tutorial/Focus_and_Selection">Следующая статья »</a></p> -</div><p></p> - -<p></p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_xul/введение/index.html b/files/ru/mozilla/tech/xul/руководство_по_xul/введение/index.html deleted file mode 100644 index c79c3cb055..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_xul/введение/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Введение -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Введение -tags: - - Руководство_по_XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Introduction ---- -<p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/Руководство_по_XUL:Структура_XUL">Следующая статья »</a></p> -</div><span class="comment">TODO: нужно исправить Шаблон:Next</span><p></p> -<p>Этот учебник является руководством для изучения <abbr title="XML User Interface Language">XUL</abbr> (XML User Interface Language) - кроссплатформенного языка для описания пользовательского интерфейса приложений.</p> -<p>В учебнике демонстрируется создание простого интерфейса для поиска файлов, похожего на Macintosh's Sherlock или диалога поиска файлов в ОС Windows. Имейте в виду, что создается только пользовательский интерфейс с ограниченной функциональностью. Фактически, поиск файлов реализован не будет. Синяя линия слева от параграфа будет указывать места где диалог поиска файлов будет изменяться. Ниже приводится общая информация о <abbr title="XML User Interface Language">XUL</abbr>, которую при первом чтении можно пропустить.</p> -<h3 id=".D0.A7.D1.82.D0.BE_.D1.82.D0.B0.D0.BA.D0.BE.D0.B5_XUL_.D0.B8_.D0.BF.D0.BE.D1.87.D0.B5.D0.BC.D1.83_.D0.BE.D0.BD_.D0.B1.D1.8B.D0.BB_.D1.81.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.3F" name=".D0.A7.D1.82.D0.BE_.D1.82.D0.B0.D0.BA.D0.BE.D0.B5_XUL_.D0.B8_.D0.BF.D0.BE.D1.87.D0.B5.D0.BC.D1.83_.D0.BE.D0.BD_.D0.B1.D1.8B.D0.BB_.D1.81.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.3F">Что такое XUL и почему он был создан?</h3> -<p>XUL (произносится как "zool" и рифмуется с "cool") был создан для упрощения и ускорения разработки браузера Mozilla. Это язык на основе <abbr title="Extensible Markup Language">XML</abbr>, поэтому все преимущества имеющиеся в XML также доступны для XUL.</p> -<p>Большинство приложений должны быть разработаны для конкретных платформ, что влечет за собой большие затраты времени и издержки. Ранее уже были разработаны кросс-платформенные решения. Например в Java главным преимуществом была переносимость. XUL является одним из таких языков, спроектированных специально для создания переносимых пользовательских интерфейсов. Java забирает много времени для создания приложений даже для одной платформы. Время затраченное на компиляцию и отладку кода может быть довольно длительным. С помощью XUL, интерфейс приложения реализовать или изменить можно быстро и легко.</p> -<p>XUL имеет все преимущества других XML языков. К примеру XHTML или другие XML языки такие как <abbr title="Math Markup Language">MathML</abbr> или <abbr title="Scalable Vector Graphics">SVG</abbr> могут легко интегрироваться в него. Также, текст отображаемый в XUL легко локализовать, а это значит что его можно перевести на другие языки без особых усилий.</p> -<h3 id=".D0.9A.D0.B0.D0.BA.D0.B8.D0.B5_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B5_.D0.B8.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D1.8B_.D0.BC.D0.BE.D0.B3.D1.83.D1.82_.D0.B1.D1.8B.D1.82.D1.8C_.D1.80.D0.B5.D0.B0.D0.BB.D0.B8.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D1.8B_.D1.81.D1.80.D0.B5.D0.B4.D1.81.D1.82.D0.B2.D0.B0.D0.BC.D0.B8_XUL.3F" name=".D0.9A.D0.B0.D0.BA.D0.B8.D0.B5_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B5_.D0.B8.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D1.8B_.D0.BC.D0.BE.D0.B3.D1.83.D1.82_.D0.B1.D1.8B.D1.82.D1.8C_.D1.80.D0.B5.D0.B0.D0.BB.D0.B8.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D1.8B_.D1.81.D1.80.D0.B5.D0.B4.D1.81.D1.82.D0.B2.D0.B0.D0.BC.D0.B8_XUL.3F">Какие пользовательские интерфейсы могут быть реализованы средствами XUL?</h3> -<p>XUL предоставляет возможность создания большинства элементов содержащихся в современных графических интерфейсах. Элементы которые можно создать:</p> -<ul> - <li>Элементы ввода такие как textarea и checkbox</li> - <li>Панели инструментов с кнопками и другим содержимым</li> - <li>Панель меню и всплывающие меню</li> - <li>Диалоги с вкладками</li> - <li>Деревья для иерархического или табличного представления информации</li> - <li>Обработку быстрых клавиш</li> -</ul> -<p>Выводящийся контент может быть сформирован из содержимого XUL файла или из данных в datasource. В Mozilla, такие datasources включают почтовый ящик пользователя, его закладки и результаты поиска. Содержимое меню, деревьев и других элементов может быть заполнено этими данными, либо вашими собственными данными, представленными в <abbr title="Resource Description Framework">RDF</abbr> файле.</p> -<p>Есть несколько способов применения XUL:</p> -<ul> - <li>дополнение Firefox -- это дополнение, которое добавляет в браузер дополнительную функциональность, чаще в форме дополнительных панелей инструментов, контекстных меню, или изменением интерфейса браузера. Это осуществляется с использованием свойства XUL, называемого <strong>overlay</strong>, оно позволяет объединить интерфейс источника, в данном случае браузера Firefox, с интерфейсом дополнения. Дополнения также могут применяться и к другим продуктам Mozilla, таким, как Thunderbird.</li> - <li>Автономное XULRunner-приложение -- XULRunner это упакованная версия платформы Mozilla, которая позволяет вам создавать автономные XUL приложения. Для запуска таких приложений не требуется браузер, так как они имеют собственные исполняемые файлы.</li> - <li>XUL пакет -- создаётся точно так же, как дополнение, но действует как отдельное приложение в отдельном окне. Пакет используется, когда вам не нужны большие размеры полного XULRunner-приложения, но это не означает что для запуска приложения требуется установленный браузер Mozilla.</li> - <li>Удалённое XUL приложение -- вы также можете размещать XUL код на веб-сервере и открывать его прямо в браузере, как любую другую веб-страницу. Этот метод является, правда, ограниченным, так как имеются проблемы безопасности из-за которых вы не сможете делать некоторые вещи, как например отрыть другое окно.</li> -</ul> -<p>Первые три типа требуют установки на компьютер пользователя. Эти типы приложений не имеют ограничений безопасности, к примеру они могут получать доступ к локальным файлам и читать или изменять настройки. Для дополнений, XUL файлы и связанные скрипты и картинки, должны быть упакованы в один файл, загружены и установлены пользователем. Приложения Mozilla, такие как Firefox, обеспечивают менеджер дополнений, который позволяет устанавливать дополнения без необходимости написания большого объёма сложного кода.</p> -<p>Кроме того, можно открывать XUL файлы прямо из файловой системы или с удаленного веб-сайта, но они будут ограничены по некоторым операциям, и некоторые элементы XUL не будут функционировать. Если, несмотря на это, вы хотите загрузить содержимое XUL с удалённого веб-сайта, веб-сервер должен быть настроен соответствующим образом, т.е. он должен отправлять XUL файлы с заголовком Content-Type равным "application/vnd.mozilla.xul+xml". XUL обычно хранится в файлах с <code>.xul</code> расширением. Вы можете открыть XUL файл браузером Mozilla как любой другой файл, используя команду "Open File" из файлового меню или введя URL в строку адреса.</p> -<h3 id=".D0.A7.D1.82.D0.BE_.D0.BD.D1.83.D0.B6.D0.BD.D0.BE_.D0.B7.D0.BD.D0.B0.D1.82.D1.8C_.D0.B4.D0.BB.D1.8F_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.D1.8D.D1.82.D0.BE.D0.B3.D0.BE_.D1.83.D1.87.D0.B5.D0.B1.D0.BD.D0.B8.D0.BA.D0.B0.3F" name=".D0.A7.D1.82.D0.BE_.D0.BD.D1.83.D0.B6.D0.BD.D0.BE_.D0.B7.D0.BD.D0.B0.D1.82.D1.8C_.D0.B4.D0.BB.D1.8F_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.D1.8D.D1.82.D0.BE.D0.B3.D0.BE_.D1.83.D1.87.D0.B5.D0.B1.D0.BD.D0.B8.D0.BA.D0.B0.3F">Что нужно знать для использования этого учебника?</h3> -<p>Вам необходимо знать <abbr title="HyperText Markup Language">HTML</abbr> и, по крайней мере знать базовые понятия XML и <abbr title="Cascading Style Sheets">CSS</abbr>. Вот некоторые принципы, которые необходимо помнить:</p> -<ul> - <li>Элементы и атрибуты XUL должны набираться в нижнем регистре, так как XML является регистро-зависимым (в отличие от HTML).</li> - <li>Значения атрибутов должны размещаться внутри кавычек, даже числа.</li> - <li>XUL файлы, как правило, разбиты на четыре файла:</li> -</ul> -<blockquote> - <ol> - <li>Для компоновки и элементов</li> - <li>Для определения стилей</li> - <li>Для определения сущностей (используется для локализации)</li> - <li>Для скриптов</li> - </ol> -</blockquote> -<p>Кроме того, вы можете иметь дополнительные файлы для картинок или для данных определённой платформы.</p> -<p>XUL поддерживается в программных продуктах Mozilla и в браузерах, которые основаны на движке Gecko, таких как Netscape 6 (или более поздних версий) и Mozilla Firefox. Из-за различных изменений в XUL синтаксисе, вам необходимо получить последнюю версию для примеров, чтобы они работали корректно. Большинство примеров должно работать в Mozilla 1.0 или более поздней версии. XUL достаточно одинаков в Firefox и в других браузерах, хотя у него есть существенные различия, такие, как поддержка настраиваемых панелей инструментов.</p> -<p>В этом руководстве освещена бóльшая часть функциональности XUL, однако не все функции обсуждаются. Ознакомившись с XUL, вы можете использовать <a href="/ru/XUL_Reference" title="ru/XUL_Reference">XUL Reference</a>, чтобы узнать о других особенностях поддерживаемых элементов.</p> -<p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/Руководство_по_XUL/Структура_XUL">Следующая статья »</a></p> -</div><p></p> -<p></p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_xul/введение_в_xbl/index.html b/files/ru/mozilla/tech/xul/руководство_по_xul/введение_в_xbl/index.html deleted file mode 100644 index a2979cadb6..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_xul/введение_в_xbl/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Введение в XBL -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Введение_в_XBL -tags: - - XBL - - XUL_Tutorial ---- -<p> -</p><p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/XUL_Tutorial:Property_Files" style="float: left;">« Предыдущая статья</a><a href="/ru/docs/XUL_Tutorial:Anonymous_Content">Следующая статья »</a></p> -</div> -<p></p><p>У <a href="ru/XUL">XUL</a> есть родственный язык <a href="ru/XBL">XBL</a> (eXtensible Bindings Language, расширяемый язык привязок). Его используют для описания внешнего вида и поведения элементов XUL. -</p> -<h3 id=".D0.9F.D1.80.D0.B8.D0.B2.D1.8F.D0.B7.D0.BA.D0.B8" name=".D0.9F.D1.80.D0.B8.D0.B2.D1.8F.D0.B7.D0.BA.D0.B8"> Привязки </h3> -<p>Вы можете использовать XUL для создания пользовательского интерфейса. <a href="ru/XUL_Tutorial/Adding_Style_Sheets">Применив стили</a>, можно настроить внешний вид элементов или <a href="ru/XUL_Tutorial/Creating_a_Skin">создать новый скин</a>. Основной вид всех элементов, таких как <a href="ru/XUL_Tutorial/Scroll_Bars">полоса прокрутки</a> и <a href="ru/XUL_Tutorial/Input_Controls#Checkboxes_and_Radio_Buttons">чекбоксы</a> можно изменить, добавив стили или атрибуты. Однако, в XUL нет средств для изменения сути работы элемента. Например, вы захотите поменять поведение полосы прокрутки. Как раз для этого нужен <a href="ru/XBL">XBL</a>. -</p><p>Файл XBL содержит привязки. Привязка описывает поведение элементов. К примеру, привязку можно связать с полосой прокрутки. Поведение описывается свойствами и методами полосы прокрутки дополнительно к существующему описанию на XUL. -</p><p>XUL, так же как и XBL, основан на семействе языков XML. В примере приводится основа файла XBL: -</p> -<pre><?xml version="1.0"?> -<bindings xmlns="http://www.mozilla.org/xbl"> - <binding id="binding1"> - <!-- Здесь находится содержимое, свойства, методы и описание событий --> - </binding> - <binding id="binding2"> - <!-- Здесь находится содержимое, свойства, методы и описание событий --> - </binding> -</bindings> -</pre> -<p>Тэг <code>bindings</code> — главный элемент файла XBL содержит один или более элементов <code>binding</code>. Каждый тэг <code>binding</code> задает одну привязку. Атрибут <code>id</code> используется для обозначения привязки, как в примере выше. Этот шаблон содежит две привязки: <code>binding1</code> и <code>binding2</code>. Первая может определять полосу прокрутки, а вторая меню. Привязку можно связывать с любым элементом XUL. Если вы используете CSS классы, можно сколько угодно применять к ним различные привязки. Note the namespace on the <code><code><a href="/ru/docs/XBL/Документация_XBL_1.0/Элементы#bindings">bindings</a></code></code> element in the template above. This declares that we are using XBL syntax. -</p><p>You assign a binding to an element by setting the CSS property <code><a href="ru/CSS/-moz-binding">-moz-binding</a></code> to the URL of the bindings file. For example: -</p> -<pre>scrollbar { - -moz-binding: url('chrome://findfile/content/findfile.xml#binding1'); -} -</pre> -<p>The URL points to the binding with the id 'binding1' in the file '<a class=" external" rel="freelink">chrome://findfile/content/findfile.xml</a>'. The '#binding1' syntax is used to point to a specific binding, much like how you would point to an anchor in an HTML file. You will usually put all of your bindings in a single file. The result in this example, is that all scrollbar elements will have their behavior described by the binding 'binding1'. -</p><p>A binding has five types of things that it declares: -</p> -<ol><li> Content: child elements that are added to the element that the binding is bound to. -</li><li> Properties: properties added to the element. They can be accessed through a script. -</li><li> Methods: methods added to the element. They can be called from a script. -</li><li> Events: events, such as mouse clicks and keypresses that the element will respond to. The binding can add scripts to provide default handling. In addition new events can be defined. -</li><li> Style: custom style properties that the XBL defined element has. -</li></ol> -<h3 id="Binding_Example" name="Binding_Example"> Binding Example </h3> -<p>The <code><code><a href="/ru/docs/Mozilla/Tech/XUL/box" title="box">box</a></code></code> is generic enough that you can use it to create custom widgets (although you can use any element, even one you make up yourself). By assigning a <code>class</code> to a <code><code><a href="/ru/docs/Mozilla/Tech/XUL/box" title="box">box</a></code></code> tag, you can associate a binding to only those boxes that belong to that class. The following example demonstrates this. -</p> -<pre class="eval"><b>XUL (example.xul):</b> - -<?xml version="1.0"?> -<?xml-stylesheet href="<a class=" external" rel="freelink">chrome://global/skin/</a>" type="text/css"?> -<?xml-stylesheet href="<a class=" external" rel="freelink">chrome://example/skin/example.css</a>" type="text/css"?> - -<window - xmlns="<span class="nowiki">http://www.mozilla.org/keymaster/gatekeeper/there.is.only..xul</span>"> - <box class="okcancelbuttons"/> -</window> - -<b>CSS (example.css):</b> - -box.okcancelbuttons { - -moz-binding: url('<a class=" external" rel="freelink">chrome://example/skin/example.xml#okcancel'</a>); -} - -<b>XBL (example.xml):</b> - -<?xml version="1.0"?> -<bindings xmlns="<span class="nowiki">http://www.mozilla.org/xbl</span>" - xmlns:xul="<span class="nowiki">http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul</span>"> - <binding id="okcancel"> - <content> - <xul:button label="OK"/> - <xul:button label="Cancel"/> - </content> - </binding> -</bindings> -</pre> -<p>This example creates a window with a single box. The box has been declared to have a <code>class</code> of <code>okcancelbuttons</code>. The style sheet associated with the file says that boxes with the class <code>okcancelbuttons</code> have a specialized binding, defined in the XBL file. You may use other elements besides the <code><code><a href="/ru/docs/Mozilla/Tech/XUL/box" title="box">box</a></code></code>, even your own custom tags. -</p><p>We'll look more at the details of the XBL part in the next section. However, to summarize, it causes two buttons to be added automatically inside the box, one an OK button and the other a Cancel button. -</p><p>In the next section, we will look at <a href="ru/XUL_Tutorial/Anonymous_Content">creating content with XBL</a>. </p><p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/XUL_Tutorial:Property_Files" style="float: left;">« Предыдущая статья</a><a href="/ru/docs/XUL_Tutorial:Anonymous_Content">Следующая статья »</a></p> -</div> -<p></p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_xul/группирующие_элементы/index.html b/files/ru/mozilla/tech/xul/руководство_по_xul/группирующие_элементы/index.html deleted file mode 100644 index 1e36b36ed8..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_xul/группирующие_элементы/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Группирующие элементы -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Группирующие_элементы -tags: - - Руководство_по_XUL -translation_of: Archive/Mozilla/XUL/Tutorial/Groupboxes ---- -<p> -</p><p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/Руководство_по_XUL:Box_Model_Details" style="float: left;">« Предыдущая статья</a><a href="/ru/docs/Руководство_по_XUL:Adding_More_Elements">Следующая статья »</a></p> -</div> -<p></p><p>В этом разделе рассказывается, как объединять элементы с помощью группирующей рамки. -</p> -<h3 id=".D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B8.D1.80.D1.83.D1.8E.D1.89.D0.B0.D1.8F_.D1.80.D0.B0.D0.BC.D0.BA.D0.B0" name=".D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B8.D1.80.D1.83.D1.8E.D1.89.D0.B0.D1.8F_.D1.80.D0.B0.D0.BC.D0.BA.D0.B0"> Группирующая рамка </h3> -<p>Язык HTML предоставляет элемент <code>fieldset</code>, с помощью которого можно объединять элементы в группы. Обычно, вокруг группы рисуется рамка, отражающая связь между элементами. Примером может служить группа из нескольких флажков. В языке XUL для тех же целей предлагается использовать элемент <code><code><a href="/ru/docs/Mozilla/Tech/XUL/groupbox" title="groupbox">groupbox</a></code></code>. -</p><p>Как видно из названия, <code><code><a href="/ru/docs/Mozilla/Tech/XUL/groupbox" title="groupbox">groupbox</a></code></code> — ни что иное как разновидность бокса. Это значит, что элементы внутри него будут выравниваться по правилам боксов. Есть два различия между группирующей рамкой и обычными боксами: -</p> -<ul><li> По умолчанию вокруг нее рисуется рамка со скошенными углами. Это поведение всегда можно изменить используя CSS. -</li><li> Группирующая рамка может содержать заголовок, который располагается над верхней границей рамки. -</li></ul> -<p>Так как группирующие рамки являются видом боксов, для них можно использовать атрибуты присущие обычным боксам, например <code><code id="a-orient"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/orient">orient</a></code></code> и <code><code id="a-flex"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/flex">flex</a></code></code>. Вы можете помещать внутрь группирующей рамки любые элементы, хотя обычно они должны быть чем-то связаны. -</p><p>Поместить метку на верх группирующей рамки можно с помощью элемента <code><code><a href="/ru/docs/Mozilla/Tech/XUL/caption" title="caption">caption</a></code></code>. Этот элемент во многом похож на <code>legend</code> из HTML. Достаточно поместить один элемент <code><code><a href="/ru/docs/Mozilla/Tech/XUL/caption" title="caption">caption</a></code></code> в качестве первого дочернего элемента. -</p><p>Ниже приведен простой пример группирующей рамки: -</p> -<h5 id=".D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80:_.D0.9F.D1.80.D0.BE.D1.81.D1.82.D0.B0.D1.8F_.D0.B3.D1.80.D1.83.D0.BF.D0.BF.D0.B8.D1.80.D1.83.D1.8E.D1.89.D0.B0.D1.8F_.D1.80.D0.B0.D0.BC.D0.BA.D0.B0" name=".D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80:_.D0.9F.D1.80.D0.BE.D1.81.D1.82.D0.B0.D1.8F_.D0.B3.D1.80.D1.83.D0.BF.D0.BF.D0.B8.D1.80.D1.83.D1.8E.D1.89.D0.B0.D1.8F_.D1.80.D0.B0.D0.BC.D0.BA.D0.B0"> Пример: Простая группирующая рамка </h5> -<p><a href="https://developer.mozilla.org/samples/xultu/examples/ex_titledbox_1.xul.txt">Исходный код</a> <a href="https://developer.mozilla.org/samples/xultu/examples/ex_titledbox_1.xul">Просмотреть</a> -</p> -<div class="float-right"><img alt="Image:titledbox1.png"></div> -<pre><groupbox> - <caption label="Answer"/> - <description value="Banana"/> - <description value="Tangerine"/> - <description value="Phone Booth"/> - <description value="Kiwi"/> -</groupbox> -</pre> -<p>В результате будут выведены четыре обведенные рамкой строки с меткой <i>Answer</i>. Обратите внимание, что по умолчанию группирующая рамка выстраивает элементы вертикально, это нужно для того, чтобы получился столбец из текстовых элементов. -</p><p>Вы так же можете добавлять в элемент <code><code><a href="/ru/docs/Mozilla/Tech/XUL/caption" title="caption">caption</a></code></code> вложенные элементы, чтобы сделать его более разнообразным. Например, панель выбора шрифта в Мозиле использует в качестве заголовка выпадающее меню. Любые другие элементы так же могут быть включены в заголовок, скорее всего вам пригодятся флажки и выпадающие списки. -</p> -<h5 id=".D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B8.D1.80.D1.83.D1.8E.D1.89.D0.B0.D1.8F_.D1.80.D0.B0.D0.BC.D0.BA.D0.B0_.D1.81_.D1.84.D0.BB.D0.B0.D0.B6.D0.BA.D0.BE.D0.BC_.D0.B2_.D0.B7.D0.B0.D0.B3.D0.BE.D0.BB.D0.BE.D0.B2.D0.BA.D0.B5" name=".D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B8.D1.80.D1.83.D1.8E.D1.89.D0.B0.D1.8F_.D1.80.D0.B0.D0.BC.D0.BA.D0.B0_.D1.81_.D1.84.D0.BB.D0.B0.D0.B6.D0.BA.D0.BE.D0.BC_.D0.B2_.D0.B7.D0.B0.D0.B3.D0.BE.D0.BB.D0.BE.D0.B2.D0.BA.D0.B5"> Группирующая рамка с флажком в заголовке </h5> -<p><a href="https://developer.mozilla.org/samples/xultu/examples/ex_titledbox_2.xul.txt">Исходный код</a> <a href="https://developer.mozilla.org/samples/xultu/examples/ex_titledbox_2.xul">Просмотреть</a> -</p> -<div class="float-right"><img alt="Image:groupbox2.png"></div> -<pre><groupbox flex="1"> - <caption> - <checkbox label="Enable Backups"/> - </caption> - <hbox> - <label control="dir" value="Directory:"/> - <textbox id="dir" flex="1"/> - </hbox> - <checkbox label="Compress archived files"/> -</groupbox> -</pre> -<p>В этом примере в качестве заголовка используется <a href="ru/XUL_Tutorial/Input_Controls#Checkboxes_and_Radio_Buttons">checkbox</a>. Можно написать скрипт, помечающий содержимое группирующей рамки активным или неактивным в зависимости от состояния флажка. На примере группирующая рамка содержит горизонтальный элемент <code><a href="/ru/docs/Mozilla/Tech/XUL/box" title="box">box</a></code> с элементами <code><a href="/ru/docs/Mozilla/Tech/XUL/label" title="label">label</a></code> и <code><a href="/ru/docs/Mozilla/Tech/XUL/textbox" title="textbox">textbox</a></code> внутри. Оба элемента <code><a href="/ru/docs/Mozilla/Tech/XUL/textbox" title="textbox">textbox</a></code> и <code><a href="/ru/docs/Mozilla/Tech/XUL/groupbox" title="groupbox">groupbox</a></code> были сделаны эластичными, и текстовое поле в результате может менять ширину вместе с окном. Дополнительный флажок появился снизу текстового поля потому, что у группирующей рамки вертикальная ориентация элементов. В следующем разделе мы добавим группирующую рамку в наше диалоговое окно поиска файлов. -</p> -<h3 id=".D0.93.D1.80.D1.83.D0.BF.D0.BF.D1.8B_.D1.80.D0.B0.D0.B4.D0.B8.D0.BE.D0.BA.D0.BD.D0.BE.D0.BF.D0.BE.D0.BA" name=".D0.93.D1.80.D1.83.D0.BF.D0.BF.D1.8B_.D1.80.D0.B0.D0.B4.D0.B8.D0.BE.D0.BA.D0.BD.D0.BE.D0.BF.D0.BE.D0.BA"> Группы радиокнопок </h3> -<p>Чтобы сгруппировать несколько радиокнопок, воспользуйтесь элементом <code><code><a href="/ru/docs/Mozilla/Tech/XUL/radiogroup" title="radiogroup">radiogroup</a></code></code>. Элемент <code><code><a href="/ru/docs/Mozilla/Tech/XUL/radiogroup" title="radiogroup">radiogroup</a></code></code> является типом бокса. Вы можете помещать в него любые элементы, и все они, кроме элементов <code><code><a href="/ru/docs/Mozilla/Tech/XUL/radio" title="radio">radio</a></code></code>, будут вести себя так же, как и внутри обычных боксов. -</p><p>Любые радиокнопки, содержащиеся в элементе группы, будут объединены друг с другом, даже если они находятся внутри еще каких-либо элементов. Это полезно при добавлении разных элементов, придающих группе кнопок дополнительную структуру. Этот прием отражен в следующем примере: -</p><p><a href="https://developer.mozilla.org/samples/xultu/examples/ex_titledbox_3.xul.txt">Исходный код</a> <a href="https://developer.mozilla.org/samples/xultu/examples/ex_titledbox_3.xul">Просмотреть</a> -</p> -<pre><radiogroup> - <radio id="no" value="no" label="No Number"/> - <radio id="random" value="random" label="Random Number"/> - <hbox> - <radio id="specify" value="specify" label="Specify Number:"/> - <textbox id="specificnumber"/> - </hbox> -</radiogroup> -</pre> -<p>Заметьте, что вокруг элемента <code><code><a href="/ru/docs/Mozilla/Tech/XUL/radiogroup" title="radiogroup">radiogroup</a></code></code> по умолчанию рамка не рисуется. Можно поместить группу радиокнопок внутрь элемента <code><code><a href="/ru/docs/Mozilla/Tech/XUL/groupbox" title="groupbox">groupbox</a></code></code>, чтобы появилась рамка, и можно было добавить заголовок. -</p><p>Далее, используя только что полученные знания, мы добавим <a href="ru/XUL_Tutorial/Adding_More_Elements">еще немного элементов в наш пример поискового диалога</a>. -</p><p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/XUL_Tutorial:Box_Model_Details" style="float: left;">« Предыдущая статья</a><a href="/ru/docs/XUL_Tutorial:Adding_More_Elements">Следующая статья »</a></p> -</div> -<p></p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_xul/оверлеи/index.html b/files/ru/mozilla/tech/xul/руководство_по_xul/оверлеи/index.html deleted file mode 100644 index 20ce1660d7..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_xul/оверлеи/index.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Оверлеи -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Оверлеи ---- -<p>В этой главе будет описаны оверлеи которые могут быть использованы для разделения обычного содержимого.</p> -<h4 id="Использование_Оверлеев">Использование Оверлеев</h4> -<p>В простом приложении с только одним окном, обычно, вы будете иметь только один XUL файл, вместе с файлом скрипта, файлом стилей, DTD файл и возможно несколько картинок. Некоторые приложения так же будут иметь ассоциированные с ними диалоги. Они будут размещены в отдельные XUL файлы. <span class="hps">Более сложные</span> <span class="hps">приложения будут</span> <span class="hps">содержать множество </span><span class="hps">окон и</span> <span class="hps">диалогов.</span></p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_xul/структура_xul/index.html b/files/ru/mozilla/tech/xul/руководство_по_xul/структура_xul/index.html deleted file mode 100644 index b2c047f1cd..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_xul/структура_xul/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Структура XUL -slug: Mozilla/Tech/XUL/Руководство_по_XUL/Структура_XUL -tags: - - XUL_Tutorial ---- -<p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/Руководство_по_XUL:Введение" style="float: left;">« Предыдущая статья</a><a href="/ru/docs/Руководство_по_XUL:Про_chrome-пути">Следующая статья »</a></p> -</div><p></p> - -<p><br> - <span style="font-size: medium;"><em>Начнём с описания того, как обрабатывается XUL в браузере Mozilla.</em></span></p> - -<h3 id=".D0.9A.D0.B0.D0.BA_XUL_.D0.BE.D0.B1.D1.80.D0.B0.D0.B1.D0.B0.D1.82.D1.8B.D0.B2.D0.B0.D0.B5.D1.82.D1.81.D1.8F" name=".D0.9A.D0.B0.D0.BA_XUL_.D0.BE.D0.B1.D1.80.D0.B0.D0.B1.D0.B0.D1.82.D1.8B.D0.B2.D0.B0.D0.B5.D1.82.D1.81.D1.8F">Как обрабатывается XUL</h3> - -<p>XUL обрабатывается в Mozilla теми же методами, что и HTML или другие типы содержимого. Когда вы вводите URL HTML-страницы в адресную строку браузера, браузер находит веб-сайт и загружает его содержимое. Механизм рендеринга Mozilla получает содержимое в виде исходного кода HTML и преобразует его в дерево документа. Дерево затем конвертируется в набор объектов, которые уже могут быть отображены на экране. Таблицы стилей (<a href="/ru/CSS" title="ru/CSS">CSS</a>), изображения, и другие технологии, используются для управления отображением. XUL в основном функционирует похожим образом.</p> - -<p>На самом деле, в Mozilla, все типы документов, будь то HTML или XUL, или даже <a href="/ru/SVG" title="ru/SVG">SVG</a>, обрабатываются одним и тем же кодом ядра. Это означает, что одни и те же CSS свойства могут использоваться для оформления и HTML и XUL, и многие функции также могут быть доступны обоим. Тем не менее, существуют некоторые особенности, которые являются специфическими для HTML, такие, как формы, и другие, которые являются характерными для XUL такие как <a href="/ru/XUL_Tutorial/Overlays" title="ru/XUL_Tutorial/Overlays">оверлеи </a>. Поскольку XUL и HTML обрабатываются сходным образом, постольку вы можете загружать их либо из локальной файловой системы, либо с веб-страницы, либо из дополнения или автономного XULRunner-приложения.</p> - -<p>Содержимое удаленных источников, например <code><span class="nowiki">http://localhost/~username/</span></code>, независимо от того, HTML это, или XUL или другой тип документа, будет по соображениям безопасности ограничено по типу операций, которое оно может выполнить. Из-за этого Mozilla обеспечивает возможность локальной установки кнтента и регистрации установленных файлов как части её <strong><a href="/ru/Chrome" title="ru/Chrome">chrome</a></strong> системы. Это позволяет использовать специальный формат URL -- <code>chrome://</code> URL. Получая доступ к файлу посредством chrome URL, Mozilla обеспечивает этим файлам расширенные права для доступа к локальным файлам, к настройкам и закладкам, и выполнению других привилегированных операций. Очевидно, что у веб-страниц нет таких привилегий, если только они не имеют цифрового сертификата и пользователь не дал разрешение на выполнение таких операций.</p> - -<p>Эта регистрация пакетов в <strong>chrome</strong> системе -- способ Firefox-дополнений добавлять новые функции в браузер. Дополнения это небольшие пакеты из XUL файлов, сценариев JavaScript, таблиц стилей и изображений упакованных в один файл. Такой упакованный файл может быть создан с помощью архиватора ZIP. Когда пользователь загружает дополнение, файлы, содержащиеся в нем устанавливаются на компьютер пользователя. Расширение внедряется в браузер с помощью специального механизма XUL, называемого - <a href="/ru/Overlay" title="ru/Overlay">оверлей (overlay)</a> и обеспечивающего объединение XUL-кода дополнения и кода XUL браузера. Пользователю может показаться, что дополнение изменило браузер, но на самом деле, код браузера и дополнения разделены, и дополнение может быть легко удалено. Зарегистрированным пакетам, конечно же, использование оверлеев не требуется. Если бы это было не так, то вы не смогли бы получить к ним доступ посредством основного интерфейса браузера, правда, к ним можно все же получить доступ с помощью chrome URL, если вы знаете что это такое.</p> - -<p>Автономные XUL приложения могут интегрировать XUL-код похожим способом, но, естественно, XUL для приложения будет включаться как часть установки, вместо того чтобы быть установленным отдельно как дополнение. Однако, этот XUL-код будет зарегистрирован в chrome-системе, чтобы приложение могло отображать интерфейс пользователя.</p> - -<p>Следует также отметить, что браузер Mozilla сам представляет собой просто набор пакетов, содержащих файлы XUL, JavaScript и таблицы стилей. Эти файлы доступны через chrome URL, имеют расширенные привилегии и работают так же, как любой другой пакет. Конечно, браузер гораздо больше и более сложен, чем большинство дополнений. Firefox и Thunderbird также как и другие компоненты, все написаны на XUL и все они доступны через chrome URL-ы. Вы можете исследовать эти пакеты, просмотрев каталог chrome, в который установлен Firefox или другое XUL приложение.</p> - -<p>Chrome URL всегда начинается с 'chrome://'. Также как <span class="nowiki">'http://'</span> URL всегда ссылается на веб-сайты используя HTTP и 'file://' URL всегда ссылается на локальные файлы, 'chrome://' URL всегда ссылается на установленные пакеты и дополнения. Подробнее синтаксис chrome URL будет рассмотрен в следующем разделе. Важно отметить, что доступ через chrome URL даёт дополнительные привилегии, описанные выше, чего не дают другие типы URL. Так, например, HTTP URL не имеет каких-либо особых привилегий, и если веб-страница попытается, например, считать локальный файл то произойдет ошибка. А файл, загруженный через chrome URL, может читать файлы имея тот же уровень доступа, что и установленное расширение, которому он принадлежит.</p> - -<p>Это различие очень важно. Оно означает, что есть определенные вещи, которые контент веб-страницы не может выполнить, например - прочитать закладки пользователя. Это различие основывается не на типе отображаемого контента, а только на типе используемого URL. И HTML и XUL, размещённые на веб-сайте, не имеют никаких дополнительных разрешений, однако если и HTML и XUL загружены через chrome URL, то они эти разрешения получают.</p> - -<p>Если вы собираетесь использовать XUL на веб-сайте, то просто выложите на этот сайт XUL, как обычный HTML файл, а затем загрузите этот URL в браузере <small><span class="nowiki">http://localhost/xul.php</span></small>. Проверьте, что ваш веб-сервер отправляет правильный заголовок типа контента content-type (он должен быть равен <strong><code>application/vnd.mozilla.xul+xml</code></strong>, например, для PHP можно использовать <code>header('Content-type: application/vnd.mozilla.xul+xml');</code>). Этот тип контента является механизмом, с помощью которого система Mozilla отличала XUL от HTML. Mozilla не использует расширение файла, если только не считывает файлы из файловой системы, но для XUL файлов вам необходимо использовать расширение <code>.xul</code>. Вы можете загружать XUL файлы с собственного компьютера, открывая их в браузере или двойным щелчком по имени файла в файловом менеджере.</p> - -<div class="note">Помните, что XUL, полученный из удаленного источника будет иметь значительные ограничения в действиях, которые он сможет выполнять.</div> - -<h4 id=".D0.A2.D0.B8.D0.BF.D1.8B_.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0:_HTML_XML_XUL_CSS" name=".D0.A2.D0.B8.D0.BF.D1.8B_.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0:_HTML_XML_XUL_CSS">Типы документа: HTML XML XUL CSS</h4> - -<p>Mozilla использует существенно разные типы объектов документа (<a href="/ru/DOM" title="ru/DOM">DOM</a>) для HTML и XUL, хотя у них много общего в смысле функциональности. В Mozilla есть вВсего три типа документа имеются : HTML, XML, and XUL. Естественно, HTML документ используется для документов HTML, XUL документ используется для документов XUL, и XML документ используется для других типов документов XML. Поскольку XUL это разновидность XML, постольку документ XUL это подмножество более общего XML документа. Однако есть тонкие различия в функциональности. Так, например, когда управляющие элементы формы на HTML странице доступны через свойство <code>document.forms</code>, это свойство не доступно для документов XUL, так как в XUL нет форм в том смысле, в котором они есть в HTML. Сходным образом специфические возможности XUL, такие как оверлеи и шаблоны, существуют только в документах XUL.</p> - -<p>Эти различия очень важны. Можно использовать многие возможности XUL в HTML или XML документах в тех случаях, когда эти возможности не являются специфичными для типа документа; <span>тем не менее для других возможностей необходим правильный тип документа.</span></p> - -<p><span>Подведя ито</span>ги вышесказанного:</p> - -<ul> - <li>Mozilla рендерит <a href="/ru/HTML" title="ru/HTML">HTML</a> и <a href="/ru/XUL" title="ru/XUL">XUL</a> одинаковым образом и использует <a href="/ru/CSS" title="ru/CSS">CSS</a> для их отображения.</li> - <li>XUL может загружаться с сайта, из локальной файловой системы, или устанавливаться как пакет и быть доступным через <a href="/ru/Chrome" title="ru/Chrome">chrome</a> URL. Последний вариант как раз и используется для дополнений.</li> - <li>Chrome URL-ы могут использоваться для доступа к установленным пакетам и открытия последних с дополнительными привилегиями.</li> - <li>HTML, XML, и XUL имеют различный тип документа. Одни возможности могут использоваться в любых типах документа, а другие возможности - специфичны для конкретного типа.</li> -</ul> - -<p>Следующие несколько разделов описывают chrome пакет, который может устанавливаться в Mozilla. Но, если вы хотите уже начать разработку простого приложения, то вы можете сразу перейти на <a href="/ru/XUL_Tutorial/Creating_a_Window" rel="internal"><font color="#638fa2">Создаем окно</font></a> и вернуться к этому разделу позже.</p> - -<h3 id="Package_Organization" name="Package_Organization">Устройство пакета</h3> - -<p>Mozilla устроен таким образом, что вы можете иметь столько компонентов сколько вы захотите установить. Каждое дополнение - это отдельный компонент со своим chrome URL. В Mozilla также есть по одному компоненту для каждого установленного скина и локали. Каждый из этих компонентов, или пакетов, состоит из набора файлов, которые описывают его пользовательский интерфейс. К примеру, компонент messenger содержит описания окна списка почтовых сообщений, окно создания письма и описания диалоговых окон адресной книги.</p> - -<p>Пакеты, которые предоставляются в составе Mozilla, расположены внутри каталога <strong>chrome</strong>, который находится в каталоге, в который вы установили Mozilla. В каталоге <strong>chrome </strong>вы найдете все файлы, описывающие интерфейс самого браузера Mozilla, почтового клиента, и других приложений. Обычно вы размещаете все XUL файлы в каталоге приложения, однако дополнения устанавливаются в каталоге <strong>extensions </strong>для каждого отдельного пользователя. Простое копирование XUL файла в каталог <strong><code>chrome</code> </strong>не дает ему каких-либо дополнительных привилегий, также он не может быть доступен через chrome URL. Для получения дополнительных привилегий вам необходимо создать manifest-файл и поместить его в каталог chrome. Этот файл легко создать, так как он обычно состоит всего из нескольких строк. Он используется для отображения(связывания) chrome URL-а на путь к файлу или каталогу где лежат XUL файлы. Подробности создания этого файла обсуждаются <a href="/Ru/XUL_Tutorial/Manifest_Files" title="ru/XUL_Tutorial/Manifest_Files">в разделе далее</a>.</p> - -<p>Единственный способ создать контент доступный через chrome URL, это создать пакет, как описано в нескольких нижеследующих разделах. Каталог называется 'chrome', скорее всего потому, что имя оказалось удобным, чтобы запомнить, что он используется для хранения chrome пакетов, содержащихся в Mozilla.</p> - -<p>Чтобы увеличить путаницу, отметим, что есть еще два других места, где может появляться слово "chrome". Это параметр <code>-chrome</code> в командной строке и модификатор <code>chrome</code> в функции <code><a href="/ru/DOM/window.open" title="ru/DOM/window.open">window.open()</a></code>. Ни одна из этих возможностей не дает дополнительных привилегий; вместо этого они используются для открытия нового окна верхнего уровня без элементов браузерного интерфейса, таких, как меню и панели инструментов. Вы можете использовать эту возможность в более сложных XUL приложениях если не хотите чтобы интерфейс браузера присутствовал в ваших диалоговых окнах.</p> - -<p>Файлы пакета обычно объединяются в JAR файл. Этот файл может быть создан любым ZIP архиватором. Например, вы можете открыть JAR файлы из <code><span style="font-family: verdana,tahoma,sans-serif;">каталога </span>chrome</code> Mozill-ы, чтобы посмотреть базовую структуру пакета. Несмотря на то, что обычно файлы упаковываются в JAR, пакеты могут также быть доступны в несжатой форме внутри каталога. Распространять пакеты таким образом не рекомендуется, но это очень удобно для разработки, так как вы можете править файлы напрямую и перезагружать XUL без необходимости переустановки или переупаковки файлов.</p> - -<p>По умолчанию, приложения Mozill-ы парсят XUL файлы и скрипты, и сохраняют прекомпилированную версию в памяти до конца сессии приложения. Это повышает производительность. Однако, из-за этого XUL не перезагрузится даже если исходные файлы изменятся. Чтобы отключить этот механизм, необходимо изменить опцию <code>nglayout.debug.disable_xul_cache</code>. В Firefox, эта опция может быть добавлена в пользовательские настройки простым вводом "about:config" в адресную строку, и установкой значения опции в true. Или же вы можете вручную отредактировать файл настроек <code>user.js,</code> добавив следующую строчку:</p> - -<pre class="eval">pref("nglayout.debug.disable_xul_cache", true); -</pre> - -<p>Как правило chrome пакет состоит из трех частей, хотя ни одна из них не является обязательной. Каждая часть хранится в отдельном каталоге. Эти три части это контент, скин и локаль, все они описываются ниже. Отдельно взятый пакет может содержать один или более скинов и локалей, но пользователи могут заменять их своими собственными. Дополнительно пакет может содержать несколько различных приложений, каждое из которых доступно через свой отдельный chrome URL. Система упаковки достаточно гибкая, так что вы можете включать любые нужные вам части и разрешать отдельную загрузку других частей, таких как текст для разных языков пользователей.</p> - -<p>Три типа chrome-пакетов, это:</p> - -<ul> - <li><strong>Content</strong> (Контент)- Окна и скрипты<br> - Объявление окон и элементов, содержащихся в них. Они сохраняются в XUL файлах, с расширением <code>.xul</code>. Пакет контента может содержать несколько XUL файлов, однако главное окно должно быть описано в файле с именем, совпадающим с именем самого пакета. Например, пакет редактора будет содержать внутри себя файл с названием <code>editor.xul</code>. Сценарии помещаются в отдельные файлы, размещенные вместе с XUL файлами.</li> - <li><strong>Skin</strong> (Скин) - Таблицы стилей, изображения и другие спецфичные для тем оформления файлы<br> - Таблицы стилей описывают детали внешнего вида окна. Они хранятся отдельно от XUL файлов для упрощения внесения изменений в скин (тему) приложения. Все используемые изображения также хранятся здесь.</li> - <li><strong>Locale</strong> (Локаль) - Файлы, специфичные для локализации<br> - Все надписи и тексты, отображаемые на элементах интерфейса окна приложения, хранятся отдельно. При этом пользователи могут иметь свои наборы локалей для их языков общения.</li> -</ul> - -<h3 id="Content_Packages" name="Content_Packages">Пакеты контента</h3> - -<p>Имя файла JAR может описывать то, что он содержит, но вы не сможете сказать с уверенностью, соответствует ли название пакета его содержимому, до тех пор пока не просмотрите это содержимое. Приведем пример на основе пакета, имеющегося в составе Firefox. Если вы распакуете файлы из пакета <code>browser.jar</code>, вы увидите, что он содержит струтуру папок выглядящую скорее всего примерно так:</p> - -<pre>content - browser - browser.xul - browser.js - -- other browser XUL and JS files goes here -- - bookmarks - -- bookmarks files go here -- - preferences - -- preferences files go here -- -. -. -. -</pre> - -<p>Этот пакет можно легко опознать, как пакет контента, поскольку папка самого верхнего уровня называется <code>content</code>. Для скинов эта папка, как правило, будет называться <code>skin</code>, а для локалей - <code>locale</code>. Эта схема поименования не является обязательной, но это общепринятое соглашение для того, чтобы сделать более понятным, какая часть пакета что содержит. Некоторые пакеты могут иметь раздел контента, скин и локаль. В таком случае вы обнаружите по папке для каждого типа. Так например пакет Chatzilla поставляется именно в таком виде.</p> - -<p>Папка <code>content/browser</code> содержит набор файлов с расширениями <code>.xul</code> и <code>.js</code>. XUL файлы - это файлы с расширением <code>.xul</code>. Файлы с расширением <code>.js</code> - это файлы сценариев на языке JavaScript, которые обеспечивают собственно функциональность элементов интерфейса окна. Многие XUL файлы имеют файл сценария, связанного с ними, а некоторые могут иметь по несколько таких файлов сценариев.</p> - -<p>В вышеприведенном листинге приведены два файла. Конечно в пакете есть и другие файлы, но для простоты изложения они не показаны. Файл <code>browser.xul</code> - это XUL файл, который описывает главное окно браузера. Главное окно для пакета контента должно иметь такое же имя, как пакет с раширением <code>.xul</code>. В данном случае имя пакета - "browser", поэтому мы предполагаем обнаружить файл <code>browser.xul</code>. Некоторые другие XUL файлы описывают отдельные окна. Например, файл <code>pageInfo.xul</code> описывает диалог информации о странице.</p> - -<p>Во многие пакеты будет входить файл <code>contents.rdf</code>, который описывает пакет, его автора, и оверлеи, которые использует этот пакет. Однако этот файл устарел и заменен более простым механизмом. Этим механизмом является файл манифеста, упомянутый ранее, вы можете отличить эти файлы в папке chrome по расширению <code>.manifest</code>. Например, <code>browser.manifest</code> описывает пакет браузера.</p> - -<p>Несколько подкаталогов, таких, как <code>bookmarks</code> и <code>preferences</code>, представляют дополнительные разделы компонента браузера. Они размещаются в различных папках только для того, чтобы расположение файлов было более организованным.</p> - -<h3 id="Skins_or_Themes" name="Skins_or_Themes">Скины или Темы</h3> - -<p>Несмотря на то, что код ядра Mozilla называет такие объекты скинами, а в пользовательском интерфейсе они называются темами, они оба ссылаются на одну и ту же вещь. В файле <code>classic.jar</code> описана тема по умолчанию, поставляемая вместе с Firefox. Структура этих частей очень напоминает пакеты контента. Например, посмотрите <code>classic.jar</code>:</p> - -<pre>skin - classic - browser - browser.css - -- other browser skin files go here -- - global - -- global skin files go here -- -. -. -. -</pre> - -<p>Повторимся, что такая струтура папок не является необходимой и используется исключительно для удобства. В действительности вы можете поместить все файлы в одну папку верхнего уровня и не пользоваться подкаталогами. Однако в случае приложений большого размера подкаталоги используются для разделения разных компонентов. В вышеприведенном примере одна папка предназначена для файлов, связанных с темой для браузера, a другая - для файлов, имеющих отношение к общей для приложения теме оформления. Общая папка содержит файлы тем оформления (скинов), являющиеся общими для всех пакетов. Эти файлы используются во всех компонентах и будут включены в поставку вашего отдельного самостоятельного приложения. Общая часть определяет внешний вид всех общих виджетов XUL, тогда как все прочие папки содержат файлы, специфичные для самих приложений. Firefox содержит в одном архиве и общие файлы темы оформления и файлы темы оформления браузера, но они могут содержаться и по отдельности.</p> - -<p>Скин состоит из CSS файлов и набора изображений, используемых для задания внешнего вида интерфейса. Файл <code>browser.css</code> используется файлом <code>browser.xul</code> и содержит стили, которые определяют внешний вид различных частей интерфейса браузера. Повторно отметим, что файл <code>browser.css</code> называется такое же имя, как и пакет в целом. Путем изменения CSS файлов вы можете менять внешний вид окна, не меняя при этом его функций. Именно таким способом вы можете создать новую тему оформления. Часть XUL остается неизменной, и независимо от нее меняется только часть со скином.</p> - -<h3 id="Locales" name="Locales">Локали</h3> - -<p>Файл <code>en-US.jar</code> содержит описание языковой информации для каждого компонента, в данном случае на американском варианте Английского языка. Аналогично скинам, каждый языковой раздел содержит файлы, которые определяют тексты, используемые в пакете для каждого отдельного языка. Структура локали сходна со всеми остальными, поэтому здесь она не приводится.</p> - -<p>Локализованный текст хранится в файлах двух типов: DTD файлы и файлы свойств. Файлы DTD имеют расширение <code>.dtd</code> и содержат определения объектов, по одному на каждую строку текста, используемую в окне. Например, файл <code>browser.dtd</code> содержит определения объектов для каждой команды меню. Кроме того для каждой команды определяются сочетания клавиш, так как они могут быть различными для каждого языка. Файлы DTD также используются XUL файлами, по одному файлу DTD на каждый XUL файл в общем случае. Часть локали также содержит файлы свойств, которые похожи на файлы DTD, но используются файлами сценариев. Файл <code>browser.properties</code> содержит несколько таких локализованных строк.</p> - -<p>Эта структура позволяет вам переводить Mozilla или компонент приложения на разные языки просто добавляя новые локали для этих языков. И при этом вам не нужно менять полностью код XUL. К тому же другой программист может создать отдельный пакет, который добавит скин или локаль к контенту вашего приложения, что позволят создавать новые темы оформления или добавлять языки интерфейса без необходимости менять исходный пакет.</p> - -<h3 id="Other_Packages" name="Other_Packages">Другие пакеты</h3> - -<p>Существует специальный пакет, называющийся toolkit (или global). Ранее мы уже видели папку с глобальными данными в скинах. Файл <code>toolkit.jar</code> содержит соответствующие части контента для такого пакета. Он содержит некоторые глобальные диалоги и определения. Также он определяет вид по умолчанию и функциональность различных общих виджетов XUL, таких как текстовые поля и кнопки. Файлы, расположенные в глобальной части пакета скина содержат вид по умолчанию для всех элементов интерфейса XUL. Пакет tolkit используется всеми XUL приложениями.</p> - -<h3 id="Adding_a_Package" name="Adding_a_Package">Добавление пакета</h3> - -<p>Mozilla помещает пакеты, которые поставляются вместе с дистрибутивом, в папку <code>chrome</code>. Однако это не означает, что они обязательно должны там размещаться. При установке другого пакета вы можете поместить его в любое место на диске, при условии, что файл манифеста указывает на это место.</p> - -<p>Традиционно пакеты помещаются в папку <code>chrome</code> просто потому, что это удобно; тем не менее они будут работать точно так же и будучи размещенными в другой папке или даже в каком-нибудь каталоге вашей локальной сети. Но вы не сможете хранить их на удаленном сайте, если только этот сайт не смонтирован как локальная файловая система.</p> - -<p>Есть две папки <code>chrome</code> используемых для XUL приложений: одна - в том же месте, в которое установлено приложение, тогда как другая - часть профиля пользователя. Первая предназначена для пакетов, которые используются всеми пользователями, а вторая - для пакетов, применяемых только отдельным пользователем или пользователями. Расширения, будучи установленными в отдельную папку для расширений, также специфичны для каждого пользователя. Любые файлы манифеста, расположенные в любой из вышеприведенных папок, будут проверяться, чтобы определить, какие пакеты установлены.</p> - -<p>В следующей главе мы рассмотрим, как ссылаться на chrome пакеты с помощью chrome URL.</p> - -<p></p><div class="prevnext" style="text-align: right;"> - <p><a href="/ru/docs/XUL_Tutorial:Introduction" style="float: left;">« Предыдущая статья</a><a href="/ru/docs/XUL_Tutorial:The_Chrome_URL">Следующая статья »</a></p> -</div> <span class="comment">Interwiki Language Links</span><p></p> - -<p></p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/actions/index.html b/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/actions/index.html deleted file mode 100644 index 179838def0..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/actions/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Генерирование контента -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Actions -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Actions ---- -<p>Для создания контента в шаблоне используется элемент <action>, который должен быть либо сестринским узлом элемента <code>query</code> либо прямым дочерним узлом элемента <rule>. Для каждого результата содержимое блока копируется и вставляется в документ. Давайте для начала рассмотрим простой пример.</p> -<pre><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" - ref="http://www.xulplanet.com/rdf/A"> - <template> - <query> - <content uri="?start"/> - <triple subject="?start" - predicate="http://www.xulplanet.com/rdf/relatedItem" - object="?relateditem"/> - </query> - <action> - <button uri="?relateditem" label="?relateditem"/> - </action> - </template> -</vbox> -</pre> -<p>Здесь элемент <code><a href="/ru/docs/Mozilla/Tech/XUL/rule" title="rule">rule</a></code> не "обрамляет" элемента <code><a href="/ru/docs/Mozilla/Tech/XUL/action" title="action">action</a></code>, поскольку мы хотим, чтобы контент был создан безусловно. Вместо этого, элемент <code>action</code> помещён внутри элемента <code><a href="/ru/docs/Mozilla/Tech/XUL/template" title="template">template</a></code> - сразу после запроса. Блок action содержит всего один элемент управления, но вы можете использовать сколь угодно много элементов по-своему усмотрению. В данном случае, для каждого результата будет создана кнопка. Поскольку мы имеем три результата, будет создано три кнопки. Если вы запустите [<a class="external" href="http://developer.mozilla.org/samples/xultemp/template-guide-ex1.xul">пример</a>] в своём браузере, вы увидите что-то в этом роде:</p> -<p><img alt="Image:template-guide-p8.png" src="/samples/xultemp/template-guide-p8.png"></p> -<p>Конструктор шаблонов последовательно обрабатывает содержимое блока action для каждого из трёх результатов. Атрибут кнопки uri используется для ссылки на значение конечной переменной (ending or member variable). В данном примере мы можем использовать только одну переменную ?relateditem, поскольку ?start - это начальная вершина, а конечная и исходная вершины не могут совпадать. Давайте снова посмотрим на имеющиеся результаты:</p> -<pre>(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/B) -(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/C) -(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/D) -</pre> -<p>Конструктор начинает обрабатывать первый набор данных. При этом элемент <button> будет скопирован и вставлен в документ - сразу же после тела шаблона. Атрибут id нового элемента получит значение ?relateditem. Вы можете мысленно представить замену атрибута uri на id, заменяя при этом переменную. Поскольку в первом наборе данных переменная ?relateditem имеет значение '<span class="nowiki">http://www.xulplanet.com/rdf/B</span>', атрибут id получит это значение.</p> -<p>После этого обрабатываются все остальные атрибуты элемента и, если нужно, в них подставляются значения переменных. Так, вместо строки ?relateditem атрибута label получим '<span class="nowiki">http://www.xulplanet.com/rdf/B</span>' (для первого набора данных). Убедитесь, что первая кнопка действительно имеет такую надпись. Таким образом, обработка первого результата завершена, и поэтому конструктор переходит к следующим. Для второго результата, которому соответствует узел B, конструктор создаст следующий контент:</p> -<pre><button id="http://www.xulplanet.com/rdf/B" label="http://www.xulplanet.com/rdf/B"/> -</pre> -<p>В блоках action фиксированные, заранее определенные значения атрибута id не используются - они игнорируются. Тем не менее, вы можете использовать предопределённые идентификаторы в других частях шаблона, например, в запросе. Для получения доступа к созданному шаблоном элементу используется, конечно же, метод getElementById. Так можно получить доступ ко второй созданной кнопке: document.getElementById("<span class="nowiki">http://www.xulplanet.com/rdf/C</span>").</p> -<p>После окончания работы конструктора шаблонов документ имеет вид:</p> -<pre><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" - ref="http://www.xulplanet.com/rdf/A"> - <template> - <query> - <content uri="?start"/> - <triple subject="?start" - predicate="http://www.xulplanet.com/rdf/relatedItem" - object="?relateditem"/> - </query> - <action> - <button uri="?relateditem" label="?relateditem"/> - </action> - </template> - <button id="http://www.xulplanet.com/rdf/B" label="http://www.xulplanet.com/rdf/B"/> - <button id="http://www.xulplanet.com/rdf/C" label="http://www.xulplanet.com/rdf/C"/> - <button id="http://www.xulplanet.com/rdf/D" label="http://www.xulplanet.com/rdf/D"/> -</vbox> -</pre> -<p>Поскольку тэг <template> скрыт, вы увидите только три кнопки с надписями, полученными из источника данных.</p> -<h3 id=".D0.94.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B9_.D0.BA.D0.BE.D0.BD.D1.82.D0.B5.D0.BD.D1.82" name=".D0.94.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B9_.D0.BA.D0.BE.D0.BD.D1.82.D0.B5.D0.BD.D1.82">Дополнительный контент</h3> -<p>В предыдущем примере в блоке action были задействованы только кнопки. Но мы можем добавить рядом с ними надписи:</p> -<pre><action> - <hbox uri="?relateditem"> - <label value="Related Item:"/> - <button label="?relateditem"/> - </hbox> -</action> -</pre> -<p>Таким образом, для каждого набора данных будет создан элемент <hbox>; при это атрибут id получит значение ?relateditem; внутри будут добавлены надпись и кнопка. Надпись на кнопке образована переменной ?relateditem. В данном случае атрибут id используется только для одного элемента, поскольку каждому результату соответствует лишь один блок <hbox>.</p> -<p>Не смотря на то, что атрибут uri используется лишь для одного элемента, этим элементом не обязан быть внешний элемент - прямой потомок элемента action. Вы можете "обернуть" этот элемент другим; таким образом вы получите контейнер, внутри которого и создаётся контент. Этот контейнер создаётся один раз для всех наборов данных. Таким образом для каждого результата копируется только тот элемент, который имеет атрибут uri. Изменив предыдущий пример, получим:</p> -<pre><action> - <toolbar> - <button uri="?relateditem" label="?relateditem"/> - </toolbar> -</action> -</pre> -<p>В данном случае для каждого результата будет скопирована только кнопка; панель инструментов будет создана лишь один раз. Таким образом, будет создана панель инструментов с тремя кнопками. Естественно, в таком простом примере было бы лучше поместить шаблон внутрь панели инструментов, имеющей атрибут datasource, а не наоборот.</p> -<p>До сих пор мы использовали только переменную ?relateditem, поскольку это единственная полезная переменная. Можно использовать также переменную ?start. Посмотрим на результаты ещё раз:</p> -<pre>(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/B) -(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/C) -(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/D) -</pre> -<p>Можно отобразить значение переменной ?start:</p> -<pre><action> - <hbox uri="?relateditem"> - <button label="?start"/> - <button label="?relateditem"/> - </hbox> -</action> -</pre> -<p>Для первой кнопки значение переменной ?start будет вычислено в выходных данных, тогда как вторая кнопка использует значение переменной ?relateditem. Поскольку все результаты используют одно и тоже значение переменной ?start, первая кнопка в каждом ряду имеет одну и ту же надпись. Запустите этот [<a class="external" href="http://developer.mozilla.org/samples/xultemp/template-guide-ex2.xul">this пример</a>] и удостоверьтесь, что всё работает правильно.</p> -<p><img alt="Image:template-guide-p9.png" src="/samples/xultemp/template-guide-p9.png"></p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/index.html b/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/index.html deleted file mode 100644 index 706e51f872..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Руководство по шаблонам XUL -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL -tags: - - XUL - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide ---- -<h5 id=".D0.9E.D1.81.D0.BD.D0.BE.D0.B2.D1.8B" name=".D0.9E.D1.81.D0.BD.D0.BE.D0.B2.D1.8B"> Основы </h5> -<ul><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%92%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5">Введение</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%9a%d0%be%d0%bc%d0%bf%d0%b8%d0%bb%d1%8f%d1%86%d0%b8%d1%8f_%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb">Компиляция правил</a> -</li></ul> -<h5 id=".D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B5_RDF" name=".D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B5_RDF"> Синтаксис шаблонов на основе RDF </h5> -<ul><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%93%d0%b5%d0%bd%d0%b5%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5_%d1%80%d0%b5%d0%b7%d1%83%d0%bb%d1%8c%d1%82%d0%b0%d1%82%d0%be%d0%b2">Генерирование результатов</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%a1%d0%b8%d0%bd%d1%82%d0%b0%d0%ba%d1%81%d0%b8%d1%81_%d0%b7%d0%b0%d0%bf%d1%80%d0%be%d1%81%d0%be%d0%b2_RDF">Синтаксис запросов RDF</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%93%d0%b5%d0%bd%d0%b5%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5_%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%bd%d1%82%d0%b0">Генерирование контента</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%a0%d0%b5%d0%ba%d1%83%d1%80%d1%81%d0%b8%d0%b2%d0%bd%d0%be%d0%b5_%d0%b3%d0%b5%d0%bd%d0%b5%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5">Рекурсивное генерирование</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%9f%d1%80%d0%be%d1%81%d1%82%d0%be%d0%b9_%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80">Простой пример</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%9f%d1%80%d0%b8%d0%b2%d1%8f%d0%b7%d0%ba%d0%b8">Привязки</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Additional_Navigation">Additional Navigation</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%a4%d0%b8%d0%bb%d1%8c%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f">Фильтрация</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Static_Content">Static Content</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Simple_Query_Syntax">Простой синтаксис запросов</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Containment_Properties">Containment Properties</a> -</li></ul> -<h5 id=".D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B5_XML" name=".D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B5_XML"> Синтаксис шаблонов на основе XML </h5> -<ul><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%a8%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d1%8b_%d0%bd%d0%b0_%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5_XML">Шаблоны на основе XML</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/XML_Assignments">XML Assignments</a> -</li></ul> -<h5 id=".D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B5_SQL" name=".D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B5_SQL"> Синтаксис шаблонов на основе SQL </h5> -<ul><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%a8%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d1%8b_%d0%bd%d0%b0_%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5_SQLite">Шаблоны на основе SQLite</a> -</li></ul> -<h5 id=".D0.9E.D0.B1.D1.89.D0.B8.D0.B9_.D1.81.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2" name=".D0.9E.D0.B1.D1.89.D0.B8.D0.B9_.D1.81.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2"> Общий синтаксис шаблонов </h5> -<ul><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Attribute_Substitution">Attribute Substitution</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Multiple_Rules">Multiple Rules</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Multiple_Rule_Example">Multiple Rule Example</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Using_Recursive_Templates">Using Recursive Templates</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Special_Condition_Tests">Special Condition Tests</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Using_Multiple_Rules_to_Generate_More_Results">Using Multiple Rules to Generate More Results</a> -</li></ul> -<h5 id=".D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B4.D0.B5.D1.80.D0.B5.D0.B2.D1.8C.D0.B5.D0.B2_.D1.81_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5.D0.BC_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2" name=".D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B4.D0.B5.D1.80.D0.B5.D0.B2.D1.8C.D0.B5.D0.B2_.D1.81_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5.D0.BC_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.BE.D0.B2"> Создание деревьев с использованием шаблонов </h5> -<ul><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%a1%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5_%d0%b4%d0%b5%d1%80%d0%b5%d0%b2%d1%8c%d0%b5%d0%b2">Создание деревьев</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%a1%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5_%d0%b8%d0%b5%d1%80%d0%b0%d1%80%d1%85%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8%d1%85_%d0%b4%d0%b5%d1%80%d0%b5%d0%b2%d1%8c%d0%b5%d0%b2">Создание иерархических деревьев</a> -</li></ul> -<h5 id=".D0.9C.D0.BE.D0.B4.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.B0" name=".D0.9C.D0.BE.D0.B4.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.B0"> Модификация шаблона </h5> -<ul><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Template_Builder_Interface">Template Builder Interface</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/Template_and_Tree_Listeners">Template and Tree Listeners</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/RDF_Modifications">RDF Modifications</a> -</li></ul> -<h5 id=".D0.94.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D1.82.D0.B5.D0.BC.D1.8B" name=".D0.94.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B8.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D1.82.D0.B5.D0.BC.D1.8B"> Дополнительные темы </h5> -<ul><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%a1%d0%be%d1%80%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0_%d1%80%d0%b5%d0%b7%d1%83%d0%bb%d1%8c%d1%82%d0%b0%d1%82%d0%be%d0%b2">Сортировка результатов</a> -</li><li> <a href="ru/%d0%a0%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be_%d0%bf%d0%be_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%b0%d0%bc_XUL/%d0%94%d0%be%d0%bf%d0%be%d0%bb%d0%bd%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5_%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d1%8b_%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%be%d0%b2">Дополнительные атрибуты шаблонов</a> -</li></ul> -<p><span class="comment">Interwiki Language Links</span> -</p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/введение/index.html b/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/введение/index.html deleted file mode 100644 index 227967a263..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/введение/index.html +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Введение -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Введение -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Introduction ---- -<p>Шаблоны XUL используются для автоматического создания контента на основе результатов запроса. Хороший пример - выполнение запроса к базе данных: для каждого набора данных, полученных запросом, создаётся некоторый контент. Синтаксис шаблонов позволяет как создавать новый контент, так и изменять значения атрибутов, используя правила с параметрами. Иногда это называют привязкой данных (databinding). Таким образом, шаблоны XUL используются для эффективной реализации привязки данных. -</p><p>Каждый шаблон получает необходимые данные из соответствующего источника. По-умолчанию поддерживается несколько типов источников данных: RDF, XML и базы данных Sqlite. Тем не менее, для поддержки других типов источников данных могут быть написаны соответствующие процессоры. При использовании технологии XUL источник данных определяется атрибутом <code id="a-datasources"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/datasources">datasources</a></code>. Как правило, его значением является URI, указывающий на местонахождение данных. Например, для источника данных XML определяется соответствующий URL. Когда анализатор XUL находит элемент с этим атрибутом, он создаёт конструктор шаблона и связывает его с этим элементом. Предполагается также, что внутри этого элемента находится шаблон. Конструктор шаблона загружает источник данных, выполняет требуемый запрос и на основании полученных результатов генерирует соответсвующий контент. Тип источника данных определяется с помощью шаблона <code id="a-querytype"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/querytype">querytype</a></code>. Тип определяет не только способ использования источника данных, но и синтаксис запросов. -</p><p>Сгенерированный шаблоном контент дополняет дерево документа XUL так же, как если бы вы сделали это собственноручно. Например: -</p> -<pre><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" querytype="rdf"> -</pre> -<p>В этом примере источник данных определён файлом '<span class="nowiki">http://www.xulplanet.com/ds/sample.rdf</span>'; тип источника данных - <code>rdf</code>, это определено атрибутом <code>querytype</code>. -</p><p>Для начала давайте посмотрим, как обрабатывается источник данных RDF. Для его загрузки конструктор шаблона использует сервис RDF - тот же самый, который вы можете использовать напрямую. Для определения местонахождения ресурса используется URL. Тем не менее, некоторые источники данных RDF предоставляет платформа Mozilla, и их URL предваряются символами 'rdf:'. Если же это не используется, то источник данных загружается также, как и любой другой файл - по его URL. Если источник данных уже загружен и кеширован, конструктор шаблонов может сразу же начинать работу. В противном случае, ничего не происходит до тех пор, пока данные не загружены, хотя на самом деле это не совсем так. Сервис RDF начинает загрузку данных в фоновом режиме и в это же время начинает работать конструктор шаблонов. Естественно, доколе данные не поступили, ничего не будет отображено и конструктор приостанавливает работу. </p><p>Когда данные начинают поступать, конструктор определяет, достаточно ли информации для их обработки. Если это так, генерируется какой-то контент. В противном случае результата опять-таки нет. Интересно, что в силу природы процесса анализа RDF-данных, конструктор обрабатывает данные и выдаёт результат инкрементно, т.е. порциями - одновременно с поступлением данных (это особенно важно, например, для геоинформационных систем, работающих в режиме реального времени и оперирующих с огромными массивами данных). Конечно, поскольку данные поступают из сети достаточно быстро, вы, скорее всего, не заметите этого процесса, но это не умаляет его важности. Если же данные уже загружены, то конструктор обрабатывает их целиком, за один раз, хотя, как мы увидим позже, даже это не совсем так. -</p><p>Используя источники данных XML, атрибут querytype должен иметь значение <code>xml</code>. Атрибут <code>datasources</code> должен содержать URL файла XML, который указывает либо на файл на web-сайте, либо на локальный файл, либо на файл chrome. Этот файл будет загружен при обработке шаблона, используя данные в XML файле. Например: -</p> -<pre><listbox datasources="http://www.xulplanet.com/ds/sample.xml" querytype="xml"> - <template> - <listitem label="?name"/> - </template> -<listbox> -</pre> -<p>Этот шаблон использует данные XML для создания списка элементов(<code><a href="/ru/docs/Mozilla/Tech/XUL/listbox" title="listbox">listbox</a></code>). Не смотря на то, что мы рассмотрим особенности процесса позже, уже сейчас можно сказать, что для каждого дочернего узла дерева данных XML будет создан элемент списка (<code><a href="/ru/docs/Mozilla/Tech/XUL/listitem" title="listitem">listitem</a></code>), атрибут label которого будет соответствовать имени узла в древе XML. -</p><p>Для источников данных на основе базы данных Sqlite, атрибут <code>datasources</code> определяет URI файла. Поскольку в этом случае поддерживаются только локальные файлы, используется URL файла. -</p><p>Конструктор шаблонов может также использовать несколько источников данных, объединяя их в единое целое - так, если бы это был один источник данных, если это возможно. Этот механизм поддерживает только встроенный RDF; источники данных на основе XML или Sqlite не поддерживают такой возможности. При использовании нескольких источников данных для управления ими создаётся объект с интерфейсом nsIRDFCompositeDataSource. Вы можете получить доступ к нему из скрипта, используя свойство 'database'. Таким образом, вы можете добавлять или исключать источники данных на лету. -</p><p>При использовании нескольких источников данных RDF они объединяются в единое целое так, если бы это был один большой источник. Это значит, что запрос в шаблоне может получить данные из любого источника, находящегося в этом объединении. Это в самом деле может быть полезным свойством и работает одинаковым образом независимо от источника данных. Например, вы можете использовать встроенный источник, хранящий информацию о пользовательских закладках в браузере и использовать собственный источник данных для добавления дополнительной информации об этих закладках. -</p> -<pre><vbox datasources="rdf:bookmarks http://www.xulplanet.com/ds/sample.rdf"> -</pre> -<p>Кроме того, при использовании RDF для chrome XUL (таких как расширения), источник данных rdf:local-store всегда включается в смесь источников. Локальное хранилище (local-store) - это источник данных, хранящий различную информацию о состоянии элементов пользовательского интерфейса, таких как размеры окон, список выбранных колонок и раскрытых элементах дерева. Хотя это и редко используется, вы можете запросить любые данные из локального хранилища для использования в шаблоне. -</p><p>Иногда вам будет необходимо указать, что источник данных будет определён позже, возможно с помощью скрипта. В этом случае используется специальная форма URI, содержащая префикс rdf:null, обозначающая, что используется пустой источник данных или то, что он будет определён позже. Эта запись также работает и с источниками данных, отличными от RDF, поэтому не стесняйтесь при необходимости использовать её. Это удобная форма указать на то, что для шаблона ещё не определён источник данных, и поэтому нет никаких результатов. -</p><p><span class="comment">Interwiki Language Links</span> -</p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/генерирование_результатов/index.html b/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/генерирование_результатов/index.html deleted file mode 100644 index a34c573b4f..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/генерирование_результатов/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Генерирование результатов -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Генерирование_результатов -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Result_Generation ---- -<h3 id="RDF" name="RDF"> RDF </h3> -<p>В этом разделе мы рассмотрим, как генерировать контент с помощью шаблонов XUL, используя источник данных RDF. Но вначале нужно познакомиться с основополагающими принципами и идеями. -</p><p>Используя математическое определение, можно сказать, что RDF - это размеченный направленный граф. Иными словами, RDF можно представить в виде графа; граф состоит из узлов и соединён стрелками; все стрелки и узлы имеют метки. Поскольку это граф, стрелки могут указывать на какой-угодно узел, а узлы могут иметь любое количество дуг, входящих или выходящих из него. Также, поскольку это граф, не существует начального (корневого) узла, поэтому вы, в принципе, можете начать с любого из них. На следующем графике видно, что из узла A, находящегося в верхней части рисунка, выходят дуги в узлы B, C и D. Из узла C выходит дуга в узел D. Поскольку стрелки могут указывать на любой узел, дуга из узла D может входит в узел A. Для обхода всех вершин дерева можно начать с узла A и, следуя по дугам, перейти к вершинам B, C и D. Вместе с тем, можно начать с узла B, от него перейти к A, а после - к C и D. Нет никаких ограничений на то, каким образом вы будете переходить по дугам: в том направлении, в которым они указывают, или в обратном. Данный график был создан программой <a class="external" href="http://www.w3.org/RDF/Validator/">RDF validator</a>, разработанной W3C; если вы хотите проверить корректность RDF-файла, воспользуйтесь этим сервисом. -</p><p><img alt="Image:Template-guide-p2.png"> -</p><p>Красным цветом выделены метки стрелок, называемые предикатами (predicates). В данном примере все стрелки имеют метки; однако так бывает далеко не всегда. Шаблоны же предоставляют способ обхода только тех дуг, которые имеют определённые метки. -Ниже представлен пример возможной сериализация данного графа RDF в формате XML, хотя возможны и другие варианты. -</p> -<pre><?xml version="1.0"?> -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rel="http://www.xulplanet.com/rdf/"> - - <rdf:Description rdf:about="http://www.xulplanet.com/rdf/A"> - <rel:relatedItem rdf:resource="http://www.xulplanet.com/rdf/B"/> - <rel:relatedItem rdf:resource="http://www.xulplanet.com/rdf/C"/> - <rel:relatedItem rdf:resource="http://www.xulplanet.com/rdf/D"/> - </rdf:Description> - - <rdf:Description rdf:about="http://www.xulplanet.com/rdf/C"> - <rel:relatedItem rdf:resource="http://www.xulplanet.com/rdf/D"/> - </rdf:Description> - -</rdf:RDF> -</pre> -<p>Для запроса в шаблоне XUL прежде всего нужно выбрать начальный узел графа. После этого для определения дальнейшего пути обхода используется множество условий. В конечном счёте, будет получен набор узлов, называемых конечными точками. Они и являются результатами выполнения запроса; именно их использует конструктор для генерирования контента. Допустим, вы начинаете с узла A. От него вы можете перейти к вершинам B, C и D и создать, таким образом, три элемента XUL. Или же вы можете начать с узла D и возвратиться по дугам к исходным вершинам. В данном случае получим всего один результат - вершину A. Убедитесь, что в этом случае получаем лишь один результат. -</p><p>Используя терминологию шаблонов XUL, назовём начальную вершину контейнером (container) или исходной точкой, а конечную вершину назовём элементом или членом (member). Такие названия используются потому, что в наиболее общем случае удобно говорить о списке элементов или дочерних узлов, собранных в контейнере. Тем не менее, выбор контейнера или его элементов зависит от вас; любой узел может выступать в этом качестве. -</p><p>Узлы RDF идентифицируются строкой символов. В RDF можно выделить два типа узлов: ресурсы, соответствующие "сущностям", и литералы, обозначающие имена, даты, размеры и другие свойства этих сущностей. Литералом может быть имя человека, например, "Елисей" или "Гарри Поттер". Значением ресурса является URI, выбранный по вашему усмотрению; мы будем использовать значение URI в шаблонах. На приведённом графике URI ресурсов выделены синим цветом на метках узлов. Хотя в данном примере литералы не используются мы будем использовать их позже. -</p><p>С вашего позволения пусть узел A будет начальным; ему соответствует URI (<span class="nowiki">http://www.xulplanet.com/rdf/A</span>). Используя атрибут 'ref', определим начальную вершину в шаблоне. Например, так: -</p> -<pre><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" - ref="http://www.xulplanet.com/rdf/A" flex="1"> -</pre> -<h3 id=".D0.9E.D0.B1.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B0_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.BE.D0.B2" name=".D0.9E.D0.B1.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B0_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.BE.D0.B2">Обработка запросов</h3> -<p>Запрос для источника данных RDF состоит из множества утверждений, оформленных как дочерние узлы элемента <code><a href="/ru/docs/Mozilla/Tech/XUL/query" title="query">query</a></code>. При обработке запроса конструктор собирает информацию о возможных результатах, расположении сгенерированого контента, и информацию о поведении в случае изменения содержимого источника данных. Эта информация сохраняется в течение всего жизненного цикла шаблона, до тех пока он не будет построен заново или разрушен. Для поиска требуемой информации конструктор шаблонов использует метод, основанный на алгоритме <a class="external" href="http://en.wikipedia.org/wiki/Rete_algorithm">RETE</a>. Это позволяет обновлять результаты эффективно при изменении структуры графа RDF. Т.е. вместо того, чтобы строить весь граф с самого начала, алгоритм позволяет добавить только некоторые его фрагменты и обновить вывод инкрементно. Схожий алгоритм используется при удалении утверждений RDF. -</p><p>Не смотря на то, что шаблон хранит множество информации для генерации корректного вывода, нас сейчас интересует информация о возможных результатах. Конструктор начинает, работу, имея всего один возможный начальный результат (seed). После он последовательно обрабатывает условия запроса. Для обработки конкретного условия необходимо рассмотреть все возможные результаты; если результат удовлетворяет условию, то он принимается, в противном случае - отвергается. Для первого условия в качестве возможного результата доступен только начальный (seed). При выполнении последующих шагов могут быть добавлены новые результаты либо иная релевантная информация. Отвергнутые результаты, естественно, будут удалены. После просмотра всех результатов для текущего условия, конструктор переходит к следующему. После обработки всех условий все оставшиеся результаты принимаются в качестве вывода. Они используются для генерации контента. Таким образом, подведём итоги: -</p> -<ol><li>Начать работу с одним возможным результатом (seed) -</li><li>Для всех уже доступных результатов с дополнительными сведениями повторить шаги -</li><li>Добавить все возможные результаты -</li><li>Удалить все отвергнутые результаты -</li><li>Повторить шаги 2-4 для всех условий запроса -</li><li>По окончанию работы все оставшиеся данные становятся выводом -</li></ol> -<p>Все возможные результаты образованы наборами пар переменная-значение. Например, результат будет выглядеть примерно так: -</p> -<pre>(?name = Елисей, ?age = 5) -</pre> -<p>Здесь имеются две переменные, ?name со значением "Елисей" и ?age со значением 5. Переменные начинаются со знака вопроса, значениями являются либо ресурсы RDF, либо литералы. В данном случае используются литералы, поскольку это более удобочитаемо. Если бы у нас было два результата, они выглядели бы примерно так: -</p> -<pre>(?name = Елисей, ?age = 5) -(?name = Забава, ?age = 12) -</pre> -<p>Это обозначение для возможных результатов используется в этом и последующих примерах. -</p><p>Если у нас будет запрос, удаляющий все результаты, относящиеся к мужчинам, то после его применения результат будет примерно следующим: -</p> -<pre>(?name = Забава, ?age = 12, ?gender = Female) -</pre> -<p>Таким образом, условие удалило Елисея из потенциальных результатов и добавило переменную ?gender для Забавы. На самом деле, это пример типичного поведения условия запроса: добавить новую переменную к результатам и отсеять те результаты, которые не удовлетворяют условию. Если данное условие было последним в списке, результат Забавы станет конечным выводом. -</p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/компиляция_правил/index.html b/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/компиляция_правил/index.html deleted file mode 100644 index 2d055cf6ff..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/компиляция_правил/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Компиляция правил -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Компиляция_правил -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Rule_Compilation ---- -<p>Шаблон XUL образован запросом и набором правил. Запрос содержит инструкции для выбора набора данных из их источника. Точный синтаксис зависит от типа источника данных, используемого в шаблоне. Например, для источника Sqlite в качестве запроса используется предложение SQL. Запрос возвращает таблицу результатов с данными, на основании которых впоследствии генерируется вывод. Для источников данных RDF и XML запрос содержит инструкции для обхода вершин графа RDF или дерева XML. Запрос объявляется с помощью тэга <code><a href="/ru/docs/Mozilla/Tech/XUL/query" title="query">query</a></code>, который должен быть размещён прямо под элементом <template> Цель запроса состоит в порождении набора выходных данных. -</p><p>При использовании упрощённого синтаксиса вы можете опустить элемент <rule>. При этом имеется только одно правило и его употребление подразумевается неявно. С другой стороны, расширенный синтаксис всегда требует наличия элемента <rule>. -</p><p>Шаблон содержит также набор правил; каждое правило может содержать множество условий для генерации контента. Синтаксис подстановки атрибутов, рассмотренный позже, используется для изменения значения атрибутов элементов, созданных в шаблоне. Каждое правило объявляется с помощью тэга <code><a href="/ru/docs/Mozilla/Tech/XUL/rule" title="rule">rule</a></code>; вы можете объявлять несколько правил. Для каждого результата запроса просматриваются условия, определённые правилом, и если они удовлетворяются, генерируется контент. Для каждого результа запроса применяется только первое согласующееся правило. Например, первое правило может быть применено к результатам, соответствующим книгам, тогда как второе правило может быть применено только к результатам, соответствующим журналам. Таким образом, в зависимости от особенностей результирующих данных может быть сгенерирован различный контент. -</p><p>Во многих случаях вам будет достаточно одного правила, обрабатывающего все данные одинаковым образом. Например, при создании элементов списка вы, скорее всего, будете использовать всего одно правило. В этом случае элемент <code><a href="/ru/docs/Mozilla/Tech/XUL/rule" title="rule">rule</a></code> необязателен. Шаблон без правил (или с правилом без условий) сгенерирует вывод для каждого набора выходных данных. -</p><p>Пока что можем представить синтаксис шаблонов примерно таким образом. -</p> -<pre><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" - ref="http://www.xulplanet.com/rdf/A" flex="1"> - <template> - <query> - -- query content goes here -- - </query> - <rule> - -- rule content goes here -- - </rule> - <rule> - -- rule content goes here -- - </rule> - </template> -</vbox> -</pre> -<p>Когда конструктор шаблона начинает загрузку и обработку данных, он, прежде всего, должен скомпилировать запрос и правила. Этот шаг включает обработку правил запроса и их преобразование во внутренние структуры. Таким образом, динамическое изменение правил ни на что не влияет, поскольку они уже скомиплированы. Тем не менее, повторная сборка шаблона (с использованием метода builder.rebuild) повторно скомпилирует запрос и правила и применит их для построения шаблона. Это обозначает, что вы можете динамически изменить правила, используя методы объектной модели документа (DOM), повторно собрать шаблон, и получить новый результат. -</p><p>Когда конструктор шаблонов скомпилировал правила, он может приступать к обработке запросов и генерации контента. Конструктор генерирует контент лениво (lazily), т.е. обрабатывает столько данных, сколько нужно именно сейчас, и продолжает обработку только тогда, когда это действительно необходимо. Давайте, например, рассмотрим следующий пример: -</p> -<pre><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" - ref="http://www.xulplanet.com/rdf/A" hidden="true"> - <template> - ... - </template> -</vbox> -</pre> -<p>Элемент <vbox> скрыт (hidden="true"). Поскольку любой сгенерированный контент всё равно не будет отображён, конструктор шаблонов ничего не делает, откладывая работу "на потом". Если же вы отобразите элемент vbox (hidden="false"), будет вызван конструктор шаблонов и сгенерирован соответствующий контент. -</p><p>Означает ли это, что шаблоны не могут быть использованы внутри скрытых областей пользовательского интерфейса? Нет, ибо вы можете использовать их и в этом случае. Изменение свойства hidden не является единственным способом вызова конструктора шаблонов и генерации контента. Вызов программного интерфейса объектной модели документа (DOM API), которому необходимо получить доступ к созданному контенту, заставит конструктор генерировать контент. Например, достаточно вызвать код, подобный приведённому ниже, и внутри скрытого элемента vbox конструктор шаблонов создаст контент. -</p> -<pre>var length = vbox.childNodes.length; -</pre> -<p>Таким образом, запрос на количество дочерних узлов элемента vbox заставит конструктор обработать запрос и вывести контент. И только после окончания работы конструктора может быть вычислено требуемое число элементов. -</p><p>Всё это должно быть очевидно XUL-разработчику. Решение о том, когда конструктор должен начать работу, принимается автоматически; вам для этого ничего особенного делать не нужно. Тем не менее, есть два случая, когда контент не создаётся автоматически: создание меню и дочерних элементов дерева. -</p><p>Содержимое меню не генерируется до тех пор, пока оно не открыто. Это имеет смысл, поскольку пользователь не может видеть содержимого меню до тех пор, пока оно не открыто. Тем не менее, это означает также, что использование программного интерфейса объектной модели документа (DOM API), такое как попытка получить количество дочерних узлов элемента, не заставит конструктор шаблонов создать содержимое до тех пор, пока пользователь не отобразит меню. Это на самом деле важная особенность. Это означает, что вы не можете полагаться на возможность получения сгенерированных элементов меню до тех пор, пока оно не открыто. Похожее правило применяется к дочерним элементам дерева. Таким образом, дочерние элементы дерева не генерируются до тех пор, пока пользователь либо скрипт не вызвают раскрытие строки в дереве. -</p><p>Ленивая генерация прийдётся кстати при работе с меню и деревьями, особенно рекурсивными. Создание дочерних элементов узла дерева, особенно тех, которые не отображаются, - весьма трудоёмкий процесс, поэтому конструктор шаблонов откладывает эту работу на потом. -</p><p>На самом деле, конструктор ещё более ленив. Если созданный контент сам содержит скрытые дочерние элементы, эти элементы не будут сгенерированы до тех пор, пока это не станет необходимо. При создании дерева контента конструктор обходит дерево и выполняет работу только в том случае, если это действительно необходимо. -</p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/рекурсивное_генерирование_контента/index.html b/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/рекурсивное_генерирование_контента/index.html deleted file mode 100644 index 44f23c389b..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/рекурсивное_генерирование_контента/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Рекурсивное генерирование контента -slug: >- - Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Рекурсивное_генерирование_контента -tags: - - Руководство_по_шаблонам_XUL -translation_of: Archive/Mozilla/XUL/Template_Guide/Recursive_Generation ---- -<p>В предыдущем примере конструктор создал во второй строке лишний набор из двух кнопок. Тем не менее, надписи на кнопках во втором наборе отличаются от надписей в первом наборе. Если вы посмотрите на <a>граф</a> снова, вы можете догадаться, почему так происходит. На нём видно, что узлы C и D соединены дугой с меткой relatedItem. Эта лишняя дуга, которой ни имеет ни узел B, ни узел D, и стала причиной создания дополнительного набора кнопок. -</p><p>После создания контента конструктор повторяет таким же образом процесс и на более нижних уровнях - до тех пор, пока это возможно. Таким образом, можно сказать, что конструктор создаёт контент рекурсивно. Т.е. после создания контента на одном уровне, конструктор выполняет работу на новом уровне - для нового родительского узла и новой начальной вершины. Естественно, родительский узел будет выбран из только что созданного контента, а не из какого-либо внешнего элемента, и начальная вершина будет выбрана среди конечных вершин предыдущего набора конечных вершин. В данном случае родительский узел - это элемент с атрибутом datasources, т.е. <vbox>. Для вложенных результатов родительским узлом станет один из элементов, созданных на предыдущем уровне. Таким образом, после первой итерации имеем: -</p> -<pre><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" - ref="http://www.xulplanet.com/rdf/A"> - <template> - <query> - <content uri="?start"/> - <triple subject="?start" - predicate="http://www.xulplanet.com/rdf/relatedItem" - object="?relateditem"/> - </query> - <action> - <hbox uri="?relateditem"> - <button label="?start"/> - <button label="?relateditem"/> - </hbox> - </action> - </template> - <hbox id="http://www.xulplanet.com/rdf/B"> - <button label="http://www.xulplanet.com/rdf/A"/> - <button label="http://www.xulplanet.com/rdf/B"/> - </hbox> - <hbox id="http://www.xulplanet.com/rdf/C"> - <button label="http://www.xulplanet.com/rdf/A"/> - <button label="http://www.xulplanet.com/rdf/C"/> - </hbox> - <hbox id="http://www.xulplanet.com/rdf/D"> - <button label="http://www.xulplanet.com/rdf/A"/> - <button label="http://www.xulplanet.com/rdf/D"/> - </hbox> -</vbox> -</pre> -<p>Для следующей итерации точками вставки контента станут три элемента <hbox>. Тем не менее, поскольку только узел C имеет дополнительный контент, только во второй элемент <hbox> будут вложены дополнительные дочерние элементы. -</p><p>Для вложенных элементов конструктор обрабатывает запрос как обычно; разве что в качестве начальной точки (seed) вместо атрибута ref используется конечная вершина (end point or member). Причём это значение должно соответствовать атрибуту id подходящего элемента. Вначале обрабатывается узел B: -</p> -<pre>(?start = http://www.xulplanet.com/rdf/B) -</pre> -<p>После проверяется условие <triple>, однако из узла B не выходит дуга с меткой relatedItem, поэтому результат отбрасывается. Поскольку нет никаких результатов, контента не создаётся. Аналогичная ситуация и с узлом D. Тем не менее, для узла C условие выполняется и к промежуточным результатам добавляется набор данных: -</p> -<pre>(?start = http://www.xulplanet.com/rdf/C, ?relateditem = http://www.xulplanet.com/rdf/D) -</pre> -<p><img alt="Image:Template-guide-p9.png"> -</p><p>Поскольку имеются результаты, к контенту, соответствующему узлу C, будет добавлена новая информация - согласно инструкциям в блоке action. Поскольку переменная ?start указывает на узел C и переменная ?relateditem указывает на D, будут добавлены кнопки именно с этими надписями. Посмотрите на приведённый рисунок и проверьте это. Теперь контент для узла C выглядит так: -</p> -<pre><hbox id="http://www.xulplanet.com/rdf/C"> - <button label="http://www.xulplanet.com/rdf/A"/> - <button label="http://www.xulplanet.com/rdf/C"/> - <hbox id="http://www.xulplanet.com/rdf/D"> - <button label="http://www.xulplanet.com/rdf/C"/> - <button label="http://www.xulplanet.com/rdf/D"/> - </hbox> -</hbox> -</pre> -<p>Рекурсивная природа шаблонов имеет полезное применение при работе с меню и деревьями, позволяя автоматически создавать вложенный контент. Мы узнаем больше о рекурсивных шаблонах позже, а пока что рассмотрим более-менее реалистичный пример. -</p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/синтаксис_запросов_rdf/index.html b/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/синтаксис_запросов_rdf/index.html deleted file mode 100644 index 016a7679c9..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/синтаксис_запросов_rdf/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Синтаксис запросов RDF -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Синтаксис_запросов_RDF -tags: - - Руководство_по_шаблонам_XUL ---- -<p>Давайте рассмотрим простой запрос с двумя условиями. Каждому условию соответствует дочерний узел элемента <query>. -</p> -<pre><vbox datasources="http://www.xulplanet.com/ds/sample.rdf" - ref="http://www.xulplanet.com/rdf/A"> - <template> - <query> - <content uri="?start"/> - <triple subject="?start" - predicate="http://www.xulplanet.com/rdf/relatedItem" - object="?relateditem"/> - </query> - <rule> - ... - </rule> - </template> -</vbox> -</pre> -<p>Двум условиям запроса сопоставлены два различных тэга. Конструктор шаблонов ничего не будет создавать до тех пор, пока блок <action> пуст. Тем не менее, он имеет возможность скомпилировать правила; именно этот процесс мы и рассмотрим. -</p><p>Конструктор начинает работу, имея всего один элемент (seed), который определён тэгом <content>. Он задаёт начальную точку для обхода графа. Ясно, что нужно начинать с чего-то; тэг <content> задаёт эту вершину и поэтому должен быть первым условием запроса. Поскольку мы можем иметь только одну начальную точку, может быть использован только один тэг <content>. Таким образом начальный результат будет выглядеть так: -</p> -<pre>(?start = http://www.xulplanet.com/rdf/A) -</pre> -<p>Значение переменной ?start определено атрибутом 'uri'. Выбор названия переменной оставлен на ваше усмотрение; как правило, используется название ?uri. Поскольку все правила должны использовать одну и ту же переменную для начальной вершины, назовём её ?start. Она имеет значение '<span class="nowiki">http://www.xulplanet.com/rdf/A</span>'. Обратите внимание на то, что это соответствует значению атрибута ref, указывающего на требуемый начальный узел. Таким образом, переменная ?start становится контейнером (исходной точкой). -</p><p>Поскольку тэг <content> ничего больше не делает, т.е. не добавляет никакой новой информации, обработчик переходит к следующему условию <triple> -</p><p>На самом деле, приведённое описание работы шаблона не совсем корректно; во всяком случае, для данной программной реализации этого механизма. Начальный узел (seed) на самом деле - это внутренняя переменная, указывающая на контейнер; в данном случае это элемент <vbox>; переменная ?start получает значение атрибута ref позже, но это лишь деталь реализации, ненамного улучшающая понимание механизма работы шаблонов. Поэтому положим пока что, что имеется лишь один возможный результат. -</p><p>После анализа содержимого тэга <content> конструктор переходит к следующему условию, <triple>, которое выглядит примерно так: -</p> -<pre><triple subject="?start" - predicate="http://www.xulplanet.com/rdf/relatedItem" - object="?relateditem"/> -</pre> -<p>Условие <triple> используется для перехода по дугам в графе RDF. Атрибут predicate определяет метку дуги, по которой необходимо перемещаться. В данном случае, он имеет значение '<span class="nowiki">http://www.xulplanet.com/rdf/relatedItem</span>', поэтому конструктор переходит по дугам с этой меткой; он может переходить по направлению, указанному в графе, либо в противоположном направлении, но только в одном направлении для каждого условия. Конструктор сам определяет, в каком направлении необходимо двигаться, в зависимости от того, какие данные известны, а какие нужно найти. Возвращаясь к имеющимся результатам, имеем: -</p> -<pre>(?start = http://www.xulplanet.com/rdf/A) -</pre> -<p>Как вы помните, начальный узел (seed) был определён условием <content>. Как вы уже, наверное, догадываетесь, конструктор подставляет значение этой переменной в атрибут subject, получая: -</p> -<pre><triple subject="http://www.xulplanet.com/rdf/A" - predicate="http://www.xulplanet.com/rdf/relatedItem" - object="?relateditem"/> -</pre> -<p>На самом деле, конструктор не изменяет элемент triple, но такая условность упрощает понимание работы шаблона. Конструктор просматривает содержимое атрибутов subject и object элемента triple и пытается найти все переменные, использующие эти данные. Переменная ?start имеет значение '<span class="nowiki">http://www.xulplanet.com/rdf/A</span>', поэтому её значение подставляется в условие. Переменная ?relateditem не имеет никакого значение, поэтому она будет оставлена как есть. После того, как значения переменных подставлены, можно выполнить запрос к графу RDF. -</p><p>Запрос выявит все дуги, выходящие из вершины '<span class="nowiki">http://www.xulplanet.com/rdf/A</span>' с меткой, соответствующей предикату '<span class="nowiki">http://www.xulplanet.com/rdf/relatedItem</span>'. Поскольку переменная ?relateditem неизвестна, конструктор позволяет в качестве объекта любой узел, и просмотрит в источнике данных все утверждения RDF, удовлетворяющие такому условию. В условии <triple> атрибут subject всегда соответствует узлу, из которого выходит дуга, тогда как атрибуту object соответствует узел, в который дуга входит. В данном случае конструктор будет переходить в стандартном направлении, а не в обратном. Давайте снова посмотрим на наш граф: -</p><p><img alt="Image:Template-guide-p2.png"> -</p><p>Начиная с вершины A и следуя по дуге relatedItem, можем видеть, что есть три возможных значения для переменной ?relateditem: узлы B, C и D. Это новые данные, поэтому конструктор добавляет их к графу результатов. Поскольку было найдено три узла, набор возможных (промежуточных) результатов выглядит так: -</p> -<pre>(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/B) -(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/C) -(?start = http://www.xulplanet.com/rdf/A, ?relateditem = http://www.xulplanet.com/rdf/D) -</pre> -<p>Вы, должно быть, заметили, что переменная ?start повторяется для каждого результата. Это происходит потому, что конструктор копирует существующие данные для всех промежуточных результатов и добавляет новые данные. Точнее, это не совсем так; конструктор на самом деле использует одну копию результатов, остальные значения - это только ссылки на эту копию. -</p><p>Это может показаться несколько запутанным, но, когда мы перейдём к рассмотрению примеров, это станет более ясным. Поскольку <triple> был последним условием, конструктор переходит к этапу генерации контента, т.е. будет создано три элемента. -</p> diff --git a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/шаблоны_на_основе_sqlite/index.html b/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/шаблоны_на_основе_sqlite/index.html deleted file mode 100644 index d597289c0f..0000000000 --- a/files/ru/mozilla/tech/xul/руководство_по_шаблонам_xul/шаблоны_на_основе_sqlite/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Шаблоны на основе SQLite -slug: Mozilla/Tech/XUL/Руководство_по_шаблонам_XUL/Шаблоны_на_основе_SQLite -tags: - - Руководство_по_шаблонам_XUL ---- -<p> -</p><p>Шаблоны могут использовать источник данных, получающий информацию из базы данных Sqlite. Это позволяет использовать информацию, полученную из базы данных, для генерации контента XUL. Чтобы сделать это, установите значение атрибута <code id="a-querytype"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/querytype">querytype</a></code> корневого узла шаблона равным <code>storage</code>. Это позволяет рассматривать источник данных как базу данных Sqlite. -</p><p>Атрибут <code id="a-datasources"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/datasources">datasources</a></code> может быть установленным равным одному из двух возможных типов значений. Во-первых, это может быть URL файла, указывающего на локальный файл. В этом случае, вы, скорее всего, будете устанавливать атрибут <code>datasources</code> динамически, после определения пути к файлу. Во-вторых, вы можете использовать специальную форму url: -</p> -<pre>profile:filename.sqlite -</pre> -<p>Эта форма, содержащая префикс 'profile' используется для указания на файлы в директории, содержащей параметры пользователя (profile). Это полезно для хранения пользовательских данных, и применимо в том случае, если вам не нужно вычислять, где находится данная директория. Файл, находящийся в этой директории, указан после двоеточия, и в данном случае это 'filename.sqlite'. Файлы базы данных Sqlite имеют, как правило, расширение 'sqlite'. -</p><p>Точно также, как и с источниками данных на основе XML, атрибут <code id="a-ref"><a href="https://developer.mozilla.org/ru/docs/Mozilla/Tech/XUL/Атрибуты/ref">ref</a></code> в данное время не используется для источников Sqlite, поэтому вам нужно всего лишь оставить атрибут <code>ref</code> пустым; как правило, для этого используется специальное значение '*'. </p><p>Запрос для источника данных Sqlite представляет из себя просто предложение select языка SQL, как текст внутри элемента <code><a href="/ru/docs/Mozilla/Tech/XUL/query" title="query">query</a></code>. Этот простой пример иллюстрирует, как отобразить список, содержащий значения из одной колонки в таблице из базы данных. -</p> -<pre><listbox datasources="profile:userdata.sqlite" ref="*" querytype="storage"> - <template> - <query> - select name from myfriends - </query> - <action> - <listitem uri="?" label="?name"/> - </action> - </template> -</listbox> -</pre> -<p>Запрос возвращает список значений из колонки 'name' в таблице 'myfriends'. Тело блока action, начинающееся узлом с атрибутом uri="?" повторяется для каждого результата, возвращенного в результате выполнения запроса. Если запрос возвращает шесть результатов, будет создано шесть элементов списка. Атрибут label имеет специальное значение '?name'. Синтаксис, использующий знак вопроса, похож на используемый для других типов запросов. Это обозначает, что каждому атрибуту label будет сопоставлено значение из соответствующей колонки таблицы. В данном случае, значение '?name' обозначает, что необходимо подставить значение из таблицы name. В результате получим список элементов, содержащий имена из базы данных. -</p><p>Используя более сложные запросы, можно получить значения из нескольких колонок или же данные, выбранные по определённому критерию. -</p> -<pre><vbox datasources="profile:userdata.sqlite" ref="*" querytype="storage"> - <template> - <query> - select name, email from myfriends where age >= 30 - </query> - <action> - <hbox uri="?"> - <label value="?name"/> - <label value="?email"/> - </hbox> - </action> - </template> -</vbox> -</pre> -<p>Этот шаблон отображает данные, полученные из двух колонок. Всякое вхождение знака вопроса в блоке action заменяется на значение из результата запроса. В данном случае он используется дважды: в первый раз для отображения имени и во второй раз для отображения адреса электронной почты. Атрибут <code>uri</code> элемента <code>hbox</code> необходим для одного элемента внутри блока action. Для запросов Sqlite в большинстве случаев это будет самый внешний узел. -</p><p>Обратите внимание также на то, что запрос содержит оператор where, который выбирает только те строки, для которых значение поля возраст не меньше 30. -</p> -<h3 id=".D0.9F.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.B0" name=".D0.9F.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.B0"> Параметры запроса </h3> -<p>Иногда, вам потребуется динамически изменять запрос в зависимости от определённых критериев. Вы можете использовать простой способ, изменяя текст внутри элемента <code>query</code>, а после перестраивать шаблон. Тем не менее, этот подход может стать громоздким и неповоротливым для более сложных запросов, и может стать источником большого количества ошибок, если для значений не были правильно обработаны специальные символы, такие как лишние кавычки и двоеточия. Это особенно важно, если вы обрабатываете значения, полученные от пользователя. -</p><p>Простым решением проблемы является использование параметров запросов, используя элемент <code><a href="/ru/docs/Mozilla/Tech/XUL/param" title="param">param</a></code>. -</p> -<pre><query> - select name, email from myfriends where gender == :wantedgender - <param name="wantedgender">male</param> -</query> -</pre> -<p>В этом примере используется параметр 'wantedgender'. Прямым потомком элемента <code>query</code> должен быть элемент <code>param</code>. Атрибут <code>name</code> используется для определения имени параметра, а содержимое элемента <code>param</code> определяет используемое значение. Когда имя, предварённое двоеточием, появляется в запросе, такое как ':wantedgender' в вышеприведённом примере, значение этого параметра будет подставлено в запрос. В конечном счёте, используемый запрос выглядит так: -</p> -<pre>select name, email from myfriends where gender == 'male' -</pre> -<p>При использовании такого приёма, специальные символы, такие как кавычки, обрабатываются автоматически. Если кавычки появляются в запросе, то они будут при необходимости обработаны. Теперь, чтобы настроить запрос для выбора чего-то иного, например, чтобы выбрать информацию, относящуюся к женщинам, всё что нужно сделать - это просто получить ссылку на элемент <code>param</code> и изменить его содержимое. Скорее всего, вы присвоите определённый идентификатор элементу <code>param</code>, чтобы использовать метод <a href="ru/DOM/document.getElementById">getElementById</a> для доступа к нему. -</p><p>Вы можете добавить столь много параметров, сколько необходимо для выполнения вашего запроса. Пример, приведённый выше использовал строковый параметр. Тем не менее, если вам нужен числовой параметр, вам также потребуется установить значение атрибута <code>type</code>. -</p> -<pre><listbox id="friends" datasources="profile:userdata.sqlite" ref="*" querytype="storage"> - <template> - <query> - select name, from myfriends where age >= :minage && age <= maxage - <param id="minage" name="minage" type="integer">30</param> - <param id="maxage" name="maxage" type="integer">40</param> - </query> - <action> - <listitem uri="?" label="?name"/> - </action> - </template> -</listbox> -</pre> -<p>В данном случае age - целочисленный параметр, поэтому атрибуту <code>type</code> установлено значение <code>integer</code>. Целые числа представлены 32-битными значениями, но вы можете использовать значение <code>int64</code> для 64-битных целых. Вы можете также использовать специальное значение <code>double</code> для вещественных чисел с двойной точностью. Если же тип не определён, то по умолчанию предполагается, что он строковый. -</p><p>Позже мы можем изменить значение параметра age, используя простой скрипт: -</p> -<pre>function adjustAge(min, max) -{ - document.getElementById("minage").textContent = min; - document.getElementById("maxage").textContent = max; - document.getElementById("friends").builder.rebuild(); -} -</pre> -<p>Эта функция принимает два параметра, максимальное и минимальное используемое значения. Мы получаем элементы <code>param</code> и устанавливаем их свойства <a href="ru/DOM/element.textContent">textContent</a> равными требуемому значению. Наконец, мы перестраиваем весь шаблон. -</p> diff --git a/files/ru/mozilla/tech/xul/справочник/index.html b/files/ru/mozilla/tech/xul/справочник/index.html deleted file mode 100644 index ef599ae729..0000000000 --- a/files/ru/mozilla/tech/xul/справочник/index.html +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: XUL Справочник -slug: Mozilla/Tech/XUL/Справочник -tags: - - XUL -translation_of: Archive/Mozilla/XUL/XUL_Reference ---- -<p> </p> - -<table class="fullwidth-table"> - <tbody> - <tr> - <th colspan="3">Перечень всех XUL элементов</th> - </tr> - <tr> - <td> - <p><a href="/ru/XUL/action">action</a><br> - <a href="ru/XUL/arrowscrollbox">arrowscrollbox</a><br> - <a href="ru/XUL/bbox">bbox</a><br> - <a href="ru/XUL/binding">binding</a><br> - <a href="ru/XUL/bindings">bindings</a><br> - <a href="ru/XUL/box">box</a><br> - <a href="ru/XUL/broadcaster">broadcaster</a><br> - <a href="ru/XUL/broadcasterset">broadcasterset</a><br> - <a href="ru/XUL/button">button</a><br> - <a href="ru/XUL/browser">browser</a><br> - <a href="ru/XUL/checkbox">checkbox</a><br> - <a href="ru/XUL/caption">caption</a><br> - <a href="ru/XUL/colorpicker">colorpicker</a><br> - <a href="ru/XUL/column">column</a><br> - <a href="ru/XUL/columns">columns</a><br> - <a href="ru/XUL/commandset">commandset</a><br> - <a href="ru/XUL/command">command</a><br> - <a href="ru/XUL/conditions">conditions</a><br> - <a href="ru/XUL/content">content</a><br> - <a href="ru/XUL/datepicker">datepicker</a><br> - <a href="ru/XUL/deck">deck</a><br> - <a href="ru/XUL/description">description</a><br> - <a href="ru/XUL/dialog">dialog</a><br> - <a href="ru/XUL/dialogheader">dialogheader</a><br> - <a href="ru/XUL/dropmarker">dropmarker</a><br> - <a href="ru/XUL/editor">editor</a><br> - <a href="ru/XUL/grid">grid</a><br> - <a href="ru/XUL/grippy">grippy</a><br> - <a href="ru/XUL/groupbox">groupbox</a><br> - <a href="ru/XUL/hbox">hbox</a><br> - <a href="ru/XUL/iframe">iframe</a><br> - <a href="ru/XUL/image">image</a><br> - <a href="ru/XUL/key">key</a><br> - <a href="ru/XUL/keyset">keyset</a><br> - <a href="ru/XUL/label">label</a><br> - <a href="ru/XUL/listbox">listbox</a><br> - <a href="ru/XUL/listcell">listcell</a><br> - <a href="ru/XUL/listcol">listcol</a><br> - <a href="ru/XUL/listcols">listcols</a><br> - <a href="ru/XUL/listhead">listhead</a><br> - <a href="ru/XUL/listheader">listheader</a></p> - </td> - <td> - <p><a href="ru/XUL/listitem">listitem</a><br> - <a href="ru/XUL/member">member</a><br> - <a href="ru/XUL/menu">menu</a><br> - <a href="ru/XUL/menubar">menubar</a><br> - <a href="ru/XUL/menuitem">menuitem</a><br> - <a href="ru/XUL/menulist">menulist</a><br> - <a href="ru/XUL/menupopup">menupopup</a><br> - <a href="ru/XUL/menuseparator">menuseparator</a><br> - <a href="ru/XUL/notification">notification</a><br> - <a href="ru/XUL/notificationbox">notificationbox</a><br> - <a href="ru/XUL/observes">observes</a><br> - <a href="ru/XUL/overlay">overlay</a><br> - <a href="ru/XUL/page">page</a><br> - <a href="ru/XUL/panel">panel</a><br> - <a href="ru/XUL/popup">popup</a><br> - <a href="ru/XUL/popupset">popupset</a><br> - <a href="ru/XUL/preference">preference</a><br> - <a href="ru/XUL/preferences">preferences</a><br> - <a href="ru/XUL/prefpane">prefpane</a><br> - <a href="ru/XUL/prefwindow">prefwindow</a><br> - <a href="ru/XUL/progressmeter">progressmeter</a><br> - <a href="ru/XUL/radio">radio</a><br> - <a href="ru/XUL/radiogroup">radiogroup</a><br> - <a href="ru/XUL/resizer">resizer</a><br> - <a href="ru/XUL/richlistbox">richlistbox</a><br> - <a href="ru/XUL/richlistitem">richlistitem</a><br> - <a href="ru/XUL/row">row</a><br> - <a href="ru/XUL/rows">rows</a><br> - <a href="ru/XUL/rule">rule</a><br> - <a href="ru/XUL/scale">scale</a><br> - <a href="ru/XUL/script">script</a><br> - <a href="ru/XUL/scrollbar">scrollbar</a><br> - <a href="ru/XUL/scrollbox">scrollbox</a><br> - <a href="ru/XUL/scrollcorner">scrollcorner</a><br> - <a href="ru/XUL/separator">separator</a><br> - <a href="ru/XUL/spacer">spacer</a><br> - <a href="ru/XUL/spinbuttons">spinbuttons</a><br> - <a href="ru/XUL/splitter">splitter</a><br> - <a href="ru/XUL/stack">stack</a><br> - <a href="ru/XUL/statusbar">statusbar</a></p> - </td> - <td> - <p><a href="ru/XUL/statusbarpanel">statusbarpanel</a><br> - <a href="ru/XUL/stringbundle">stringbundle</a><br> - <a href="ru/XUL/stringbundleset">stringbundleset</a><br> - <a href="ru/XUL/tab">tab</a><br> - <a href="ru/XUL/tabbrowser">tabbrowser</a><br> - <a href="ru/XUL/tabbox">tabbox</a><br> - <a href="ru/XUL/tabpanel">tabpanel</a><br> - <a href="ru/XUL/tabpanels">tabpanels</a><br> - <a href="ru/XUL/tabs">tabs</a><br> - <a href="ru/XUL/template">template</a><br> - <a href="ru/XUL/textnode">textnode</a><br> - <a href="ru/XUL/textbox">textbox</a><br> - <a href="ru/XUL/textbox_(Firefox_autocomplete)">textbox (автозаполнение в Firefox)</a><br> - <a href="ru/XUL/textbox_(Mozilla_autocomplete)">textbox (автозаполнение в Mozilla)</a><br> - <a href="ru/XUL/timepicker">timepicker</a><br> - <a href="ru/XUL/titlebar">titlebar</a><br> - <a href="ru/XUL/toolbar">toolbar</a><br> - <a href="ru/XUL/toolbarbutton">toolbarbutton</a><br> - <a href="ru/XUL/toolbargrippy">toolbargrippy</a><br> - <a href="ru/XUL/toolbaritem">toolbaritem</a><br> - <a href="ru/XUL/toolbarpalette">toolbarpalette</a><br> - <a href="ru/XUL/toolbarseparator">toolbarseparator</a><br> - <a href="ru/XUL/toolbarset">toolbarset</a><br> - <a href="ru/XUL/toolbarspacer">toolbarspacer</a><br> - <a href="ru/XUL/toolbarspring">toolbarspring</a><br> - <a href="ru/XUL/toolbox">toolbox</a><br> - <a href="ru/XUL/tooltip">tooltip</a><br> - <a href="ru/XUL/tree">tree</a><br> - <a href="ru/XUL/treecell">treecell</a><br> - <a href="ru/XUL/treechildren">treechildren</a><br> - <a href="ru/XUL/treecol">treecol</a><br> - <a href="ru/XUL/treecols">treecols</a><br> - <a href="ru/XUL/treeitem">treeitem</a><br> - <a href="ru/XUL/treerow">treerow</a><br> - <a href="ru/XUL/treeseparator">treeseparator</a><br> - <a href="ru/XUL/triple">triple</a><br> - <a href="ru/XUL/vbox">vbox</a><br> - <a href="ru/XUL/window">window</a><br> - <a href="ru/XUL/wizard">wizard</a><br> - <a href="ru/XUL/wizardpage">wizardpage</a></p> - </td> - </tr> - </tbody> -</table> - -<h3 id=".D0.A1.D0.BC._.D1.82.D0.B0.D0.BA.D0.B6.D0.B5_.D0.BE_XUL" name=".D0.A1.D0.BC._.D1.82.D0.B0.D0.BA.D0.B6.D0.B5_.D0.BE_XUL">См. также о XUL</h3> - -<ul> - <li><a href="ru/XUL/%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d1%8b">Атрибуты</a> - - <ul> - <li><a href="ru/XUL/%d0%93%d0%bb%d0%be%d0%b1%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5_%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d1%8b">применимые ко всем XUL элементам</a></li> - </ul> - </li> - <li><a href="ru/XUL/%d0%a1%d0%b2%d0%be%d0%b9%d1%81%d1%82%d0%b2%d0%b0">Свойства</a></li> - <li><a href="ru/XUL/%d0%9c%d0%b5%d1%82%d0%be%d0%b4%d1%8b">Методы</a></li> - <li><a href="ru/XUL/%d0%a1%d0%be%d0%b1%d1%8b%d1%82%d0%b8%d1%8f">Обработчики событий</a></li> -</ul> - -<p></p> diff --git a/files/ru/mozilla/tech/xul/стили/index.html b/files/ru/mozilla/tech/xul/стили/index.html deleted file mode 100644 index a9fbd80c13..0000000000 --- a/files/ru/mozilla/tech/xul/стили/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Классы стилей -slug: Mozilla/Tech/XUL/Стили -translation_of: Archive/Mozilla/XUL/Style ---- -<p><a href="/ru/docs/XUL/Справочник" title="« XUL Справочник">« XUL Справочник</a></p> - -<ul> - <li><code><a href="https://developer.mozilla.org/ru/docs/XUL/Стили/alert-icon">alert-icon</a></code></li> - <li><a href="/en/XUL/Style/chromeclass-toolbar" title="en/XUL/Style/chromeclass-toolbar">chromeclass-toolbar</a></li> - <li><a href="/en/XUL/Style/error-icon" title="en/XUL/Style/error-icon">error-icon</a></li> - <li><a href="/en/XUL/Style/groove" title="en/XUL/Style/groove">groove</a></li> - <li><a href="/en/XUL/Style/header" title="en/XUL/Style/header">header</a></li> - <li><a href="/en/XUL/Style/indent" title="en/XUL/Style/indent">indent</a></li> - <li><a href="/en/XUL/Style/listcell-iconic" title="en/XUL/Style/listcell-iconic">listcell-iconic</a></li> - <li><a href="/en/XUL/Style/listitem-iconic" title="en/XUL/Style/listitem-iconic">listitem-iconic</a></li> - <li><a href="/en/XUL/Style/menuitem-iconic" title="en/XUL/Style/menuitem-iconic">menuitem-iconic</a></li> - <li><a href="/en/XUL/Style/menuitem-non-iconic" title="en/XUL/Style/menuitem-non-iconic">menuitem-non-iconic</a></li> - <li><a href="/en/XUL/Style/message-icon" title="en/XUL/Style/message-icon">message-icon</a></li> - <li><a href="/en/XUL/Style/monospace" title="en/XUL/Style/monospace">monospace</a></li> - <li><a href="/en/XUL/Style/plain" title="en/XUL/Style/plain">plain</a></li> - <li><a href="/en/XUL/Style/question-icon" title="en/XUL/Style/question-icon">question-icon</a></li> - <li><a href="/en/XUL/Style/small-margin" title="en/XUL/Style/small-margin">small-margin</a></li> - <li><a href="/en/XUL/Style/statusbarpanel-iconic" title="en/XUL/Style/statusbarpanel-iconic">statusbarpanel-iconic</a></li> - <li><a href="/en/XUL/Style/statusbarpanel-iconic-text" title="en/XUL/Style/statusbarpanel-iconic-text">statusbarpanel-iconic-text</a></li> - <li><a href="/en/XUL/Style/statusbarpanel-menu-iconic" title="en/XUL/Style/statusbarpanel-menu-iconic">statusbarpanel-menu-iconic</a></li> - <li><a href="/en/XUL/Style/text-link" title="en/XUL/Style/text-link">text-link</a></li> - <li><a href="/en/XUL/Style/thin" title="en/XUL/Style/thin">thin</a></li> - <li><a href="/en/XUL/Style/tree-splitter" title="en/XUL/Style/tree-splitter">tree-splitter</a></li> - <li><a href="/en/XUL/Style/treecol-image" title="en/XUL/Style/treecol-image">treecol-image</a></li> -</ul> - -<p></p> diff --git a/files/ru/mozilla/thunderbird/index.html b/files/ru/mozilla/thunderbird/index.html deleted file mode 100644 index 64f01ed0c2..0000000000 --- a/files/ru/mozilla/thunderbird/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -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://nkreeger.com/correo/">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">Документация</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)">Представление базы данных</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>Thunderbird API documentation</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">Сообщество</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">Инструменты</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> - - <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Related Topics</h2> - - <ul> - <li><a href="/en-US/docs/Extensions" title="Extensions">Extensions</a></li> - </ul> - </td> - </tr> - </tbody> -</table> - -<p> </p> diff --git a/files/ru/mozilla/thunderbird/автоконфигурация/index.html b/files/ru/mozilla/thunderbird/автоконфигурация/index.html deleted file mode 100644 index aefa42d448..0000000000 --- a/files/ru/mozilla/thunderbird/автоконфигурация/index.html +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Автоконфигурация в Thunderbird -slug: Mozilla/Thunderbird/Автоконфигурация -translation_of: Mozilla/Thunderbird/Autoconfiguration ---- -<p>Автор: Ben Bucksch<br> - Пожалуйста, не изменяйте этот документ без согласования c автором</p> - -<p>Thunderbird начиная с версии 3.1 (и 3.0 в некоторых редакциях) включает в себя функционал автоконфигурации почтового аккаунта. Цель автоконфигурации состоит в том, чтобы упростить настройку подключения клиента Thunderbird к своим почтовым серверам. В большинстве случаев, пользователь лишь должен загрузить и установить Thunderbird, ввести свое настоящее имя, почтовый адрес и пароль в настройках аккаунта, и почтовый клиент полностью готов к работе для получения и отправки писем. Настолько безопасно, насколько это возможно.</p> - -<p>См. также:</p> - -<ul> - <li><span class="link-https">для инструкций пользователя см. </span><a class="external external-icon" 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> в базе знаний Thunderbird</li> - <li><a href="/en/Thunderbird/Autoconfiguration/FileFormat/HowTo" title="en/Thunderbird/Autoconfiguration/FileFormat/HowTo">описание</a> и <a href="https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat" title="en/Thunderbird/Autoconfiguration/FileFormat/Definition">формат</a> файла конфигурации</li> - <li>оригинальную <a class="link-https" href="https://wiki.mozilla.org/Thunderbird:Autoconfiguration" title="https://wiki.mozilla.org/Thunderbird:Autoconfiguration">страницу проекта на Mozilla wiki</a> <span class="tlid-translation translation" lang="ru"><span title="">для получения знаний, дизайна, реализации и деталей проекта</span></span></li> -</ul> - -<p>Этот документ описывает как работает Автоконфигурация в Thunderbird и что необходимо выполнить, чтобы почтовый сервер был сконфигурирован автоматически.</p> - -<h1 id="Механизмы">Механизмы</h1> - -<p>Thunderbird получает настройки сервера различными способами, каждый из которых предназначен для различных случаев:</p> - -<ul> - <li>ISPDB<br> - ISPDB - это центральная база данных, которая в настоящий момент принадлежит коммерческой организации Mozilla Messaging, но может быть использована любым клиентом. Она содержит настройки для крупнейших почтовых провайдеров. Мы надеемся что эта база в ближайшем времени будет содержать достаточное количество информации для автоконфигурации не менее половины почтовых аккаунтов пользователей.<br> - Эта база была добавлена из-за нашей уверенности в том, что не все почтовые провайдеры (в том числе Microsoft) сразу же добавят файлы конфигурации для Thunderbird на своих сервера.</li> - <li>Конфигурация сервера почтового провайдера<br> - Почтовые провайдеры имеют возможность предоставить информацию о своих настройках для пользователей, настроив автоконфигурацию на своем веб-сервере как autoconfig. <домен>, который просто возвращает статический XML с настройками, как описано ниже. Для более сложных настроек, когда, например, логин не отображается в почтовом адресе, XML-файл может быть также сгенерирован провайдером. В таких случаях это единственный способ получить автоматическую настройку.</li> - <li>Файл конфигурации на жестком диске<br> - Администраторы могут поместить файл конфигурации в установочную папку Thunderbird. Этот способ предназначен для компаний, которые устанавливают Thunderbird на компютеры своих сотрудников и хотят облегчить настройку учетной записи без необходимости настраивать конфигурацию почтового сервера. Этот метод не стоит применять в других случаях, потому что обновлять файл конфигурации весьма трудно.</li> - <li>Подборка наугад<br> - В тех случаях, когда определить настройки автоматически не удалось, Thunderbird пытается угадать конфигурацию, пробуя распространенные имена почтовых серверов вроде imap.<domain>, smtp.<domain>, mail.<domain> и так далее, и, когда сервер отвечет поддерживается ли SSL, STARTTLS и шифрование паролей (CRAM-MD5).</li> - <li>Ручная настройка<br> - Если все же подобрать настройки не удалось, пользователь должен ввести настройки вручную. Пользователь также имеет возможность вручную изменять настройки, даже если они были получены способами описанными выше.</li> -</ul> - -<p>Все механизмы поиска используют домен почтового адреса в качестве основы для поиска. Например, для почтового адреса <a class="moz-txt-link-abbreviated link-mailto" href="mailto:fred@example.com">fred@example.com</a>, поиск выполняется в следующем порядке:</p> - -<ol> - <li>проверка<em> tb-install-dir</em>/isp/example.com.xml на жестком диске</li> - <li>проверка autoconfig.example.com</li> - <li>поиск "example.com" в базе ISPDB</li> - <li>поиск "MX example.com" в базе DNS, и для mx1.mail.hoster.com производится поиск "hoster.com" в базе ISPDB</li> - <li>подборка (imap.example.com, smtp.example.com и т.д.)</li> -</ol> - -<p><span class="tlid-translation translation" lang="ru"><span title="">Мы можем добавить записи DNS SRV в качестве поддерживаемого механизма в будущем, но в настоящее время этот функционал не внедряется.</span></span></p> - -<h1 id="Как_добавить_поддержку_для_вашего_домена">Как добавить поддержку для вашего домена</h1> - -<h2 id="Классификация">Классификация</h2> - -<p>Если вы большой почтовый провайдер (> 100,000 пользователей) предоставляющий почтовые адреса только под несколько доменов типа "example.com" и "example.de", вы можете подтвердить конфигурацию в базе ISPDB или добавить конфигурационный файл на сервере.<br> - <br> - Если вы поддерживаете псевдонимы почтовых адресов и имя пользователя для входа не является частью почтового адреса (например, почтовым адресом пользователя является <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:hero@example.com">"hero@example.com"</a>, и IMAP/POP/SMTP логином является не "hero" и не <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:hero@example.com">"hero@example.com"</a>, а "u67578"), вам необходимо настроить конфигурацию сервера, которая выполняет поиск логина по почтовому адресу.<br> - <br> - Если вы поддерживаете пользовательские домены, то есть вы "hoster.com", а ваши клиенты пользуются почтовыми адресами <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:fred@flintstone.com">"fred@flintstone.com"</a> и <a class="moz-txt-link-rfc2396E link-mailto" href="mailto:louis@kent.com">"louis@kent.com"</a> как доменными, только с несколькими пользователями на домен, вам необходимо настроить конфигурафию сервера (или полагаться на MX записи в DNS).<br> - <br> - Если же вы небольшая компания устанавливающая Thunderbird на компьютеры своих работников, вы можете положить конфигурационный файл в установочную папку Thunderbird.</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. Request review from bwinton, gozer or ben.bucksch.<br> - <br> - Future: add the configuration to the <a class="link-https" href="https://ispdb.mozillamessaging.com">ISPDB server app</a>.</p> - -<h2 id="Конфигурация_сервера_почтового_провайдера">Конфигурация сервера почтового провайдера</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 class="notranslate"><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 class="notranslate"><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> - -<h2 id="Файл_конфигурации">Файл конфигурации</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/ru/mozilla/xpi/index.html b/files/ru/mozilla/xpi/index.html deleted file mode 100644 index e85fa09433..0000000000 --- a/files/ru/mozilla/xpi/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Кросс-платформенный модуль установщика (XPI) -slug: Mozilla/XPI -tags: - - Toolkit API - - XPInstall - - xpi - - Кросс-платформенный модуль установщика - - Модули XPI - - Установка пакетов -translation_of: Mozilla/XPI ---- -<p><strong>Кросс-платформенный модуль установщика (XPI)</strong> - это ZIP-файл, используемый для установки пакетов, с использованием технологии <a href="/en/XPInstall" title="en/XPInstall">XPInstall</a>. <span id="result_box" lang="ru"><span>Модули XPI</span></span> ( <span id="result_box" lang="ru"><span>так называемые</span></span> "<a href="/en/Bundles" title="en/Bundles">Bundles</a>") <span id="result_box" lang="ru"><span>используются для установки широкого спектра программного обеспечения</span></span> , включая <a href="/en/Plugins" title="en/Plugins">Plugins</a>, <a href="/en/Extensions" title="en/Extensions">Extensions</a>, <a href="/en/Themes" title="en/Themes">Themes</a>, и <a class="external" href="http://www.mozilla.com/thunderbird/dictionaries.html">Thunderbird dictionaries</a>.</p> - -<p><span id="result_box" lang="ru"><span>XPI содержит инструкции по установке</span></span> (install.js или <a href="/en/Install_Manifests" title="en/Install_Manifests">install.rdf</a>), <span id="result_box" lang="ru"><span>а также фактическое программное обеспечение для установки</span></span>, <span id="result_box" lang="ru"><span>которое часто само упаковано как файл JAR</span></span>. <span id="result_box" lang="ru"><span>При загрузке или добавлении в диспетчер расширений XPInstall автоматически взаимодействует с инструкциями по установке, содержащимися в XPI, и устанавливает содержащееся в нем программное обеспечение.</span></span></p> - -<p><span id="result_box" lang="ru"><span>Архивы XPI поддерживают только файлы, хранящиеся несжатыми или сжатыми с помощью метода "deflate".</span></span></p> - -<div class="note"> -<p><strong>Примечание:</strong> <span id="result_box" lang="ru"><span>Начиная с {{Gecko ("2.0")}}, XPI-файлы больше не распаковываются при установке расширений.</span> <span>Вместо этого сам XPI помещается в каталог расширений, и файлы загружаются непосредственно из пакета</span></span>. <span id="result_box" lang="ru"><span>Дополнительную информацию см. в разделе</span></span> <a href="/en/Extensions/Updating_extensions_for_Firefox_4" title="en/Extensions/Updating extensions for Firefox 4">Updating extensions for Firefox 4</a>.</p> -</div> - -<p><span id="result_box" lang="ru"><span>Когда файлы XPI передаются через HTTP, тип MIME application / x-xpinstall должен соответствовать расширению файла xpi.</span></span></p> - -<h2 id="See_Also" name="See_Also"><span class="short_text" id="result_box" lang="ru"><span>Смотрите также</span></span></h2> - -<ul> - <li><a href="/en/Bundles" title="en/Bundles">Bundles</a></li> - <li><a href="/en/XPInstall" title="en/XPInstall">XPInstall</a></li> - <li><a href="/en/Creating_XPI_Installer_Modules" title="en/Creating_XPI_Installer_Modules">Creating XPI Installer Modules</a></li> -</ul> - -<p>{{ languages( { "de": "de/XPI", "fr": "fr/XPI", "ja": "ja/XPI", "pl": "pl/XPI" } ) }}</p> diff --git a/files/ru/mozilla/безопасность/index.html b/files/ru/mozilla/безопасность/index.html deleted file mode 100644 index afce2ad92a..0000000000 --- a/files/ru/mozilla/безопасность/index.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Безопасность браузера -slug: Mozilla/Безопасность -tags: - - Firefox - - Безопасность - - Разработка -translation_of: Mozilla/Security ---- -<p><span class="seoSummary">Важный часть программирования для любого браузера, и Firefox не исключение, а также любого другого веб-проекта, это его безопасность. Статьи далее содержат справочники и руководства, как сделать Ваш код безопасным, и приводят множество рекомендаций по дизайну и тестированию проекта.</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!">Bug bounty program</a></li> - <li><a href="http://www.mozilla.org/projects/security/known-vulnerabilities.html" title="Learn from our past mistakes.">Known vulnerabilities and fixes in Mozilla</a></li> - <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Security">Debugging and testing</a> - <ol> - <li>{{Link("/en-US/docs/Clang_Static_Analysis")}}</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("/en-US/docs/Mozilla/QA/Fuzzing")}}</li> - </ol> - </li> - <li>{{Link("/en-US/docs/Mozilla/Developer_guide")}}</li> - <li>{{Link("/en-US/docs/Web/Security")}}</li> -</ol> -</section> |