むンタヌネットを私たちの䞋に曲げたしょう



長い間むンタヌネットを 自分自身のために 少しでも良くしたいず思っおいたが、 怠lazの時間がないなら、今日はあなたの幞運な日です。 21のステップで、この倧切な目暙を達成する方法を瀺したす。

無料ボヌナス むンタヌネットに加えお、Google怜玢も改善しおいたす。 たぶん、Googleはこのアむデアを高く評䟡し、手ず心を提䟛したすもしそうなら、私はその研究をあきらめたす。
</冗談>

この蚘事では、レヌキレヌスでの私自身の経隓を䜿甚しお、Chrome、FireFox、およびMS Edgeブラりザヌ甚のプラグむンを䜜成する方法に぀いお説明したす。

プラグむンを䜿甚するず、ブラりザで衚瀺されるペヌゞに独自のJavaScript / CSSを簡単に埋め蟌むこずができたす。 すなわち ブラりザ拡匵機胜API liteバヌゞョンの䞀皮。

春の初めに、「むンタヌネットテクノロゞヌ」をテヌマにしたタヌムペヌパヌのタスクが䞎えられたした。
提案されたトピックの䞭で最も簡単なものを遞択したように思えたした「最新のブラりザでのナヌザヌむンタヌフェむスずナビゲヌション」。 圌女が数回埌悔したこずは、残念ながら遅すぎたした。

TL; DR

誰かが21のステップすべおに぀いお読みたくない堎合は、5぀行うこずができたす。

プラグむンコヌドはGitHubからダりンロヌドできたす 。

そしおその埌

  1. Chromeを開く// Chromeブラりザの拡匵機胜
  2. [開発者モヌド]の暪にあるチェックボックスをオンにしたす
  3. 「アンパックされた拡匵機胜をロヌド」をクリックしお、゜ヌスコヌドが保存されたディレクトリを遞択したす。
  4. その埌、「CustomActions」プラグむンの「オプション」を遞択したす
  5. オプションフォヌムで、[デモ構成]および[保存]をクリックしたす。



それだけです。たずえば、google.comやHabrを開いたり、構成を修正したり、スクリプトを操䜜したりできたす。

次は叙情的な䜙談のある拡匵版です。

英囜の科孊者の研究を信じおいる堎合、球状のむンタヌネットナヌザヌは、圌らが圌に捚おたい情報の量から逃げ、5-10のサむトからなる居心地の良いむンタヌネットの䞖界を䜜成したす。

認めるのは悲しいでしょうが、鏡を芋るず、この非垞に球状のナヌザヌを芋たしたおばあちゃん、この蚘事を読んでいるならダむ゚ットパむだけを䜜っおください、さもなければ私の幟䜕孊は苊しむでしょう。

しかし、私の9幎半のサむトが完璧ではなかったこずに気付くのはさらに悲しいこずでした。 したがっお、コヌスワヌクの䞀環ずしお、その他のむンタヌネットずずもにそれらをより良くするこずが決定されたした。

ほずんどの堎合、これにはJavaScriptで3〜4行、CSSで2〜3行のみを蚘述する必芁がありたした。

最初の調査ず協議の埌、ブラりザメヌカヌは機胜を拡匵する手段を通しおそのような機䌚を提䟛するこずが明らかになりたした。

りィッシュリストを定矩したす。

  1. サむトを開くず、このサむトに関連付けられたナヌザヌJスクリプトが導入されたす
  2. カスタムスクリプトは、蚭定ペヌゞで構成されたす。
  3. ブラりザのツヌルバヌにボタンを远加しお、構成をすばやく呌び出したす

参照条件が定矩され、コヌディングを開始したす。

ステップ1

どちらの偎を芋るかによっお、悟りの前にgetstartedを読んだり、青に倉わったりしたす。

ステップ2

プロゞェクトの構造を決定したす

options.html
options.js

popup.html
popup.js

background.js

manifest.json

icon.png
images
images\icon128.png
images\icon16.png
images\icon48.png

ステップ3

マニフェストを䜜成したす。

 { "name": "CustomActions", "description": "plugin for CustomActions", "version": "1.0", "background" : { "scripts": ["background.js"] }, "icons": { "128": "images/icon128.png", "16": "images/icon16.png", "48": "images/icon48.png" }, "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", "permissions": [ "webRequest", "tabs", "activeTab", "http://*/*", "https://*/*", "storage", "unlimitedStorage", "contextMenus", "<all_urls>" ], "browser_action": { "default_title": "Custom Actions Injection plugin", "default_icon": "icon.png", "default_popup": "popup.html" }, "commands": { "cmd-exec-1": { "suggested_key": { "default": "Ctrl+Q" }, "description": "Custom Action #1" }, "cmd-exec-2": { "suggested_key": { "default": "Ctrl+B" }, "description": "Custom Action #2" }, "cmd-exec-3": { "suggested_key": { "default": "Ctrl+Y" }, "description": "Custom Action #3" } }, "options_page": "options.html", "manifest_version": 2 } 

ステップ4

私はoptions.htmlフォヌムに取り組んでいたす。

前のセッションに参加したのも䞍思議ではありたせん。 コヌス「Web Design 2.0」のknockout.jsの有甚な知識

ファむルknockout-3.4.1.jsずknockout.mapping-latest.jsをプロゞェクト構造に远加したす。

䜕も動䜜したせん。 掘りたす。 助けにはなりたせん。 矀れ。 Chrome拡匵機胜はノックアりトを奜たないこずがわかりたした。
愛し、マニフェストを曎新したす。

 "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" 

ステップ5

ナヌザヌむンタヌフェむスを実装しようずしお苊劎した埌、むンスピレヌションが生たれたす。

クロムからすべおを匕き出したす//蚭定

私たちは巚人の肩の䞊に立っお、物事は行きたした



ステップ6

デヌタを保存する必芁がありたす。 chrome.storageに぀いお読んだ
chrome.storage.syncずchrome.storage.localを遞択するこずのゞレンマ

chrome.storage.syncはより魅力的ですが、厳しい制限がありたす。

別の掞察-私はテストプロゞェクトを持っおいるので、ロヌカルはすべおです。
マニフェストを支配しお、制限に問題がないようにしたす。

そしお、chrome.storage.local.setを䜿甚しお構成を保存したす。

  chrome.storage.local.set(items, function () { self.status('Items saved.'); setTimeout(function () { self.status(''); }, 750); }); 

ステップ7

保存された構成はbackground.jsでリロヌドする必芁があるこずを理解しおいたすが、どのように???

うん、甘いカップルchrome.runtime.sendMessage
  chrome.storage.local.set(items, function () { self.status('Items saved.'); setTimeout(function () { self.status(''); }, 750); chrome.runtime.sendMessage({ command: 'refreshConfig' }); }); 

およびchrome.runtime.onMessage
  chrome.runtime.onMessage.addListener( function (request, sender, sendResponse) { onCommand(request.command); }); 

ステップ8

popup.jsを開きたす。 閉じたす。 もう䞀床開けたす。 そしお7回。 䜕も明確ではありたせん。

私はただ䞀人ですか 埅ちに埅った朝が来お、 サンプルに぀たずいた。目に芋えないGoogleワヌカヌのおかげで。

貎重な知識の瓊rubをかき集めたす。 最埌に、正しい䟋を芋぀けお、魔法の組み合わせACVCtrl-A / Ctrl-C / Ctrl-Vを䜿甚したす。 13時間埌-ゞョブは完了したした。

ステップ9

それでは、䞻芁郚分であるむンタヌセプトず実装に進みたしょう。

むンタヌセプタヌ-chrome.tabs.onUpdated
 chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { var url = ''; if (changeInfo && changeInfo.url) url = changeInfo.url.toLowerCase(); else if (tab && tab.url) url = tab.url.toLowerCase(); // . . . }); 

およびロヌバヌ-chrome.tabs.executeScript
 if (item.sourceType == 'InjectCSS') chrome.tabs.insertCSS(item.output == 'Owner tab' ? tabId : null, { code: item.data }); else chrome.tabs.executeScript(item.output == 'Owner tab' ? tabId : null, { code: item.source }); 

すべおが思ったより簡単になりたしたが、それでも私が望んでいたよりも長くなりたした。

正芏衚珟ず呌ばれる新しい玠晎らしい䞖界を発芋したした。 難しいこずが簡単にできるこずがわかりたした。

ステップ10

すべお準備完了です。 あなたは正盎に皌いだ5぀に行くこずができたす...

...それほど速くない。 5぀ではなく、倚数のコメントず改善をもたらしたした。

手順11

最も簡単なものから始めたしょう。popup.jsで「珟圚のサむトを远加」機胜のサポヌトを远加したす

思ったほど簡単ではありたせん。popup.jsからoptions.jsにデヌタを転送する必芁がありたす。

メッセヌゞをキャッチし、拡匵ストレヌゞに保存しお読み返すのに3時間を費やしたしたが、結局、賢い人は䞘を登らないで、圌はそれを迂回するこずにしたした。

ク゚リ文字列は、この悲しみに察する答えです。

手順12

次の機胜はより耇雑で、コンテキストメニュヌのサポヌトを远加したす。
䟋は再び保存されたす。 すべおがそれよりも簡単であるこずが刀明したした-chrome.contextMenus.create
 chrome.contextMenus.create({ id: item.id, contexts: ["page", "frame", "selection"], title: item.name, onclick: function (info, tab) { onCommand(info.menuItemId); } }); 

手順13

私は兆候を信じおいたせんが、それは幞せな䞀歩ではありたせんでした。

ホットキヌを䜿甚しお通話をサポヌトする必芁がありたす。

䟋のようにすべおを行い、マニフェストを修正したす
 "commands": { "cmd-exec-1": { "suggested_key": { "default": "Ctrl+Q" }, "description": "Custom Action #1" } } 

chrome.commands.onCommandを䜿甚したす。
 chrome.commands.onCommand.addListener(onCommand); 

動䜜したせん。 2日間ず倜ず医療介入の埌、蚭定ペヌゞを䞋にスクロヌルするず、必芁な蚭定ぞの目立たないリンクが芋぀かりたした。


それは犬が埋葬された堎所です。 圌女自身のせいだ、圌女はあたりにも倚くの䟋を教えた、ここにリンクがあり、次の画面に走った。

ステップ14

私たちのzavlabには、英語の教垫である劻がいたす。 むンタヌフェむスの翻蚳が必芁です。 英語を孊ぶ必芁がありたす。

技術が助けになりたす。 Google翻蚳察英語教垫-スコア10でGoogleの生掻を支揎

手順15

私たちは再び5人をフォロヌしおいたすが、私の心ではすでに4人に同意しおいたす。

私はリファクタリングずいう新しい単語を返したすそれ以前は、FACToringずいう単語しか知りたせんでした。特にプロゞェクトの最初によく蚀っおいたした。

たた、远加の芁件は、プログラムを䜿いやすくし、デモ構成ずサンプルを䜜成するこずです。

Zavlabは、圌の英語の劻に加えお、UX / UI郚門の恋人がいるようです。
しかし、google-examplesの良き人々を思い出しお、圌女はほずんど抵抗したせんでした。

手順16

リファクタリングは終了したした。 コヌドの元のバヌゞョンのカバヌの䞋に隠されおいるバグの数は驚くべきこずです。この蚀葉をよりよく芚えおおく必芁がありたす。

ステップ17

lorem ipsumの䟋を远加したす。 誰がこれをアドバむスしたしたか ラテン語の先生

芁件キヌの組み合わせをクリックするず、フォヌムのフィヌルドにlorem蚀語の文章を入力したす。

うたくいったようです。

  var loremDemoData = { names: [ { firstName: "Victoria", lastName: "Veit", email: "Victoria.Veit@noreply.ru" }, { firstName: "Gisele", lastName: "Gillard", email: "Gisele.Gillard@noreply.ru" }, { firstName: "Edmund", lastName: "Edelson", email: "Edmund.Edelson@noreply.ru" }, { firstName: "Joey", lastName: "Janelle", email: "Joey.Janelle@noreply.ru" } ], lorem: [ "Orem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sit amet purus condimentum, porta nulla sed, consequat felis. Phasellus quis condimentum odio. Maecenas scelerisque vehicula leo, sit amet tristique tellus molestie sed. Aenean lacus lorem, feugiat semper imperdiet a, vehicula ac orci. Pellentesque ac nisi commodo, pellentesque lorem quis, fringilla tellus. Fusce bibendum erat sit amet libero maximus rutrum. Integer dictum nibh sodales efficitur congue. Mauris nulla libero, hendrerit eget dictum nec, aliquam eu mi. Donec ipsum nisi, bibendum et consequat eu, imperdiet eget nisl. Duis tincidunt nibh et nibh tempor, quis mattis mi vulputate.", "Suspendisse quis eleifend lectus. Sed nec vehicula elit. Praesent ac sollicitudin diam. Nam at venenatis lectus. Fusce condimentum tortor nec augue vestibulum tempus. Nullam faucibus vehicula lorem, et mollis justo dapibus a. Proin sagittis velit in lectus vehicula, id eleifend urna hendrerit. Integer rhoncus dui sed enim sollicitudin, a finibus magna fermentum.", "Fusce at urna vitae magna semper scelerisque id volutpat tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed ut elit nisl. Duis sit amet ante accumsan nibh ultricies pharetra at vitae purus. Donec a felis eget ipsum euismod tempus. Donec elementum vel tortor vel efficitur. Nunc tristique, magna hendrerit sagittis placerat, odio sem commodo ligula, eu aliquam arcu elit sit amet diam. Etiam ultrices vehicula auctor." ], loremShort: [ "Morbi nec sollicitudin augue.", "Suspendisse sagittis fringilla aliquam.", "Curabitur malesuada dolor.", "Praesent quis lacus neque. Duis vitae vehicula felis" ] }; 

  function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min)) + min; } var name = data.names[getRandomInt(0, data.names.length)]; var hadEmail = false; var t = document.querySelectorAll('input[type=text], textarea'); for (var i = 0, l = t.length; i < l; i++) { var e = t[i]; var ro = e.getAttribute('readonly'); if (e.disabled || ro === '' || ro === 'true' || ro == '1') continue; var loremTxt = data.lorem[getRandomInt(0, data.lorem.length)]; var loremShort = data.loremShort[getRandomInt(0, data.loremShort.length)]; var na = ('' + e.name).toLowerCase(); var ia = ('' + e.id).toLowerCase(); if (na == 'firstname' || ia == 'firstname' || na == 'fname' || ia == 'fname') e.value = name.firstName; else if (na == 'lastname' || ia == 'lastname' || na == 'lname' || ia == 'lname') e.value = name.lastName; else if (!hadEmail && (na.indexOf('email') >= 0 || ia.indexOf('email') >= 0)) { e.value = name.email; hadEmail = true; } else { e.value = (e.tagName == 'TEXTAREA' ? loremTxt : loremShort); } } 

ステップ18

次の䟋は、サむトhabrahabr.ru甚です

芁件サむトを開くずき、構成にリストされおいるハブおよび䌁業の蚘事を非衚瀺にしたす。 䌚瀟に代わっお曞かれた蚘事に぀いおは、独立した著者によっお曞かれた蚘事ずは明らかに異なるものにしおください。

その過皋で、HabrずGiktaymsの存圚に぀いお孊びたした。 私はそれらに぀いお前に知っおいたでしょう、すべおが少なくずも2倍高速だったでしょう。 ノンストップで読曞を3日間過ごしたした。 圌女は昚幎だけ蚘事をマスタヌしたしたが、ただたくさんの興味深いこずがありたす

次のアポむントメントで、私の心理療法士は私の苊痛に぀いおの蚘事を曞くように勧めたした。 圌は、これはこのコヌスでの䜜業によっお匕き起こされる心理的トラりマの治療における重芁なステップだず蚀いたす。

蚘事の䜜成を適切な錠剀の摂取に眮き換える提案に぀いお、圌は拒吊したした。 最埌に、私は䞞薬に同意したしたが、蚘事を曞くずいう条件で。 座っおいたす。 私は曞いおいたす。

蚘事の方がコヌドよりも曞きやすいこずがわかりたした。 たぶん、チュクチは読者ではなく、䜜家ですか

 { "showCompanies": [ "yandex", "mosigra" ], "hideCompanies": [ "hashflare" ], "hideHubs": [ "lib" ] } 

  function hideParent(el) { if (el.classList && el.classList.contains('post_teaser')) el.style.display = 'none'; else if (el.parentElement) hideParent(el.parentElement); } function sanitizeParent(el) { if (el.classList && el.classList.contains('post_teaser')) { el.querySelectorAll('img').forEach(function (img) { img.style.display = 'none'; }); el.querySelectorAll('.post__body_crop').forEach(function (chld) { chld.style.maxHeight = '4em'; chld.style.overflow = 'hidden'; el.addEventListener('mouseover', function () { chld.style.maxHeight = "inherit"; chl d.querySelectorAll('img').forEach(function (img) { img.style.display = 'block'; }); }, false); el.addEventListener('mouseout', function () { chld.style.maxHeight = "4em"; chld.querySelectorAll('img').forEach(function (img) { img.style.display = 'none'; }); }, false); }); el.querySelectorAll('.post__title a').forEach(function (titl) { titl.style.color = '#707040'; }); } else if (el.parentElement) sanitizeParent(el.parentElement); } document.querySelectorAll('a[href*="https://geektimes.ru/hub/"]').forEach(function (el) { var hub = el.getAttribute('href').replace(/^.*\.ru\/hub\//, '').replace(/\/.*$/, ''); if (data && data.hideHubs && data.hideHubs.indexOf(hub) >= 0) hideParent(el); }); document.querySelectorAll('a[href*="https://geektimes.ru/company/"], a[href*="https://habrahabr.ru/company/"]').forEach(function (el) { var company = el.getAttribute('href').replace(/^.*\.ru\/company\//, '').replace(/\/.*$/, ''); if (data) { if (data.hideCompanies && data.hideCompanies.indexOf(company) >= 0) { hideParent(el); return; } else if (data.showCompanies && data.showCompanies.indexOf(company) >= 0) return; } sanitizeParent(el); }); 

ステップ19

むンタヌネットをさたよい、面癜いアむデアを芋぀け、Google怜玢の䟋ずしおそれを実装するこずにしたした。

たぶん圌はむニシアチブに感謝し、些现なこずを遞ぶのをやめるでしょう。

機胜Googleを開くず、最も頻繁に䜿甚される単語ずサむトのリストを含むツヌルチップが衚瀺され、すばやく怜玢できたす。

Harbの䟋に埓っお、これはいく぀かのナンセンスです。

  var googleDemoData = [ { "keywords": "python", "title": "python" }, { "keywords": "javascript", "title": "javascript" }, { "keywords": "php", "title": "php" }, { "keywords": "mysql", "title": "mysql" }, { "keywords": "site:stackoverflow.com", "title": "at stackoverflow.com" }, { "keywords": "site:developer.mozilla.org", "title": "at developer.mozilla.org" }, { "keywords": "site:developer.chrome.com", "title": "at developer.chrome.com" }, { "keywords": "site:habrahabr.ru", "title": "at habrahabr.ru" } ]; 

  function ggSetTimeRange() { var elemId = this.getAttribute('data-range'); var timeLimit = document.querySelector('#' + elemId + ' a'); if (timeLimit) timeLimit.click(); } function ggReplaceAndSearch() { var kw = this.getAttribute('data-search'); if (document.location.href.indexOf('chrome-search://') == 0 || document.location.href.indexOf('https://www.google.com/_/chrome/newtab?') == 0) { document.location.href = "https://www.google.com/search?q=" + encodeURIComponent(kw); return; } var inputText = document.querySelector('input[name="q"]'); if (inputText) { setTimeout(function () { var keyword = '' + inputText.value; if (kw.indexOf('site:') >= 0 && keyword.indexOf('site:') >= 0) { keyword = keyword.replace(/ *site:[^ ]+/, ''); } else if (keyword.indexOf(kw) >= 0) return; kw = ' ' + kw; if (kw.indexOf('site:') >= 0) { inputText.value = keyword + ' ' + kw; setTimeout(function () { var btn = document.querySelector('form[action="/search"]'); if (btn) { btn.submit(); } else { btn = document.querySelector('button[name="btnK"]'); if (btn) { btn.click(); } } }, 100); } else { inputText.value = kw + ' ' + keyword; var strLength = ('' + inputText.value).length; inputText.setSelectionRange(strLength, strLength); } }, 200); setTimeout(function () { inputText.focus(); }, 100); }; }; var ggHelper = document.getElementById('ggHelper'); if (!ggHelper) { var helperHtml = '<div id="ggHelper" style="position: fixed; ' + 'box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); ' + 'background-color: #f0f0f0; border-radius: 2px; flex: 1; ' + 'padding: 0.7em 1em 0.3em 1em; right: 1em; top: 12em; width: 13em; height: ' + (data.length + 4) + 'em; ' + 'font-size: 13px;">' + '<ul style="list-style-type: none; margin: 0; padding: 0;">'; data.forEach(function(dataItem ) { helperHtml += '<li style="text-align: left; cursor: pointer;"><a href="javascript: return false;" data-search="' + dataItem.keywords + '" class="gg-keyword">' + dataItem.title + '</a></li>'; }); helperHtml += '<li style="margin: 0.5em;"><hr size="1" style="height: 1px; border-color: #e0e0e0;"></li>'; helperHtml += '<li style="cursor: pointer;">' + '<a href="javascript: return false;" data-range="qdr_w" class="gg-range">week</a> :: ' + '<a href="javascript: return false;" data-range="qdr_m" class="gg-range">month</a> :: ' + '<a href="javascript: return false;" data-range="qdr_y" class="gg-range">year</a> :: ' + '<a href="javascript: return false;" data-range="qdr_" class="gg-range">any</a></li>'; helperHtml += '</ul></div>'; var bodyTag = document.querySelector('body'); if (bodyTag) { var e = document.createElement('div'); e.innerHTML = helperHtml; bodyTag.appendChild(e.firstChild); document.querySelectorAll('#ggHelper .gg-keyword').forEach(function (el) { el.addEventListener('click', ggReplaceAndSearch); }); document.querySelectorAll('#ggHelper .gg-range').forEach(function (el) { el.addEventListener('click', ggSetTimeRange); }); } } 

ステップ20

ハヌバヌの遺蚀によるず、私はレビュヌ甚のコヌドを専門家グルヌプに送信したした。 刀定-すべおを曞き換えたす。 泣いおるよもう泣いおる

連絡埌、少なくずも6぀のバグが芋぀かりたした。 レビュヌは力です この蚀葉を芚えおおく必芁がありたす。
コヌドを芋るずいい感じになり、そこに曞かれおいるこずずその理由を理解し始めたした。

ステップ21

すべお準備完了です。

私はトップ5に進み、4぀を頌りにしたすが、3぀には同意したす。 これ以䞊の匷さはありたせん。
3週間の生掻が珟代の技術ずの戊いに投げ蟌たれたす。

頑匵っお

PS :. 最埌に、stackoverflow.comの䜜成者ずナヌザヌに心から感謝したす。

䜜成前の䜜品がどのようなものか想像できたせん。 そしお、Webの出珟前TNBの栄光、私はWebの䜜成埌に生たれたした、プログラマヌの職業はおそらく最も萜ち蟌んでおり、単䜍面積あたりの最高レベルの自殺者でした。

今でも、頭䞊のすべおの怍生を匕き裂きたい堎合もあれば、さらに悪い堎合もありたす。

PPS :. 批刀は倧歓迎です。 どれでも。

アップデヌト1 。 圌らは私に4 ++ず評䟡したした。

「StackOverflowでの盗䜜が倚すぎる」ずいう文蚀から1぀のボヌルを匕きたしたが、Habréの蚘事にプラスを远加したした。 2番目のプラスに぀いおの質問に、圌は圌の口ひげを䞍思議に笑いたす。

アップデヌト2 。 2぀の良いニュヌス。

最初のもの 。 ネットワヌク技術の先生は、「友達ず共有」機胜を远加するず、詊隓に自動的に合栌するず玄束したした。 駐圚員のグルヌプがなじみのない蚀葉を話したした。

私は座っお、node.jsを喫煙しおいたす。キャンペヌンは喫煙だけでなく、飲酒も開始する必芁がありたす。 ボトルなしでは理解できたせん。

雲の䞭ぞ。 Herokaで必芁ですか い぀ものように匕き枡す方が良いかもしれたせん-ベビヌベッドずアむれン。 そしお、健康はより高䟡です。

二番目 。 コメントの投祚結果に基づいお3぀の远加機胜を远加した堎合、Zavlabは来幎為替レヌトを盞殺するこずを玄束したした。

したがっお、機胜を改善する方法に぀いおアむデアがある堎合は、提案、投祚しおください。 新しいデモ機胜、テンプレヌト、たたはUIのトリッキヌなものなどを䜿甚できたす。

ワむルドなファンタゞヌを声に出しおください。

3番目 。 それがうたくいけば、卒業蚌曞は䜕かのために䜕かをするでしょうか

アップデヌト3 。 やった ドルでの最初の絊䞎。 仕事ず旅行のプログラムでは、地元のマクドナルド料理で英語を勉匷しおいたす。

孊んだ最初のむディオム「芝生の䞊のマニア」。 倏の終わりたでには流fluentになるず思いたす。

私はドルに60を掛けたす。れロの数は、地域センタヌのプログラマヌにずっお最高のオファヌず競合したす。 地区センタヌでは、係数Nを入力する必芁がありたす。

Nは小さくありたせん。Mを取る必芁がありたす。

専門家のグルヌプは静かに遠くからうらやたしいが、到着するず私たちが隒ぎ立おるこずを瀺唆しおいる。 圌らはパむプを持っおくるこずを芁求しおいたす。 しかし、21歳でない人にずっおは、楜噚を販売しおいないので、どうすればいいのかわかりたせん。

私はたくさん思いたす。

たぶん私の料理は料理ですか 私は祖母を曞き、cheburechnyを開け、ダむ゚ットパむを取匕したす。 そしお、無料のマクドナルドのダむ゚ットでは、私は間違いなく非垞に球状のナヌザヌのたたです。

アップデヌト4 。 法的䌑息の代わりに、私は眠れない倜のプログラミングを2回過ごしたしたそしお、この2日間の結果、最初の絊䞎をスタヌバックスに匕き䞋げたしたが、それでもプラグむンをFireFoxずMS Edgeに倉換したした。

FireFoxはほずんど抵抗したせんでした。 GitHubからコヌドたたは既補のプラグむンをダりンロヌドできたす。

゜ヌスからのダりンロヌドを蚱可するには、web-extを䜿甚するか、蚭定を䜿甚する必芁がありたす。



完成したプラグむンをダりンロヌドするには



そしお、MS Edgeはすべおの手足に寄りかかっお、ほずんど詰たりたせんでした。 私は蟞めたかったのですが、切望された為替レヌトの機械はただ匱点が匷みに勝぀こずを蚱しおいたせんでした。

ドキュメントからの蚀葉Microsoft Edge拡匵機胜は珟圚、デフォルトのポリシヌ制限のみをサポヌトしおいたすscript-src 'self'; object-src 'self'、オプションの圢匏でのノックアりトの䜿甚に終止笊を打぀。 角床に倉換する必芁がありたした。 たた、冒険なしではありたせん。

しかし、奇跡が起こり、最終的にすべおが起こりたした。 コヌドはGitHubから取埗できたす。

aboutflagsで開発を有効にする必芁がありたす



その埌、ロヌカルで䜿甚するためにダりンロヌドできたす。



StackOverflowに既に感謝しおいたすか もう䞀床、この知識の宝庫の前で垜子を脱ぎたす。

Source: https://habr.com/ru/post/J333776/


All Articles