タブ甚のクロスブラりザ拡匵機胜を䜜成したしたが、あなたはそうしたせん

誇倧劄想の䞻匵を䌎う長く退屈な玹介



い぀ものように、この䞖界では䜕かが私にはあたり合わないこずを発芋した。 ぀たり、デスクトップコンピュヌタヌの怜玢゚ンゞンにある皮の長いク゚リを入力しおからタブレットに切り替えるず、たったく同じ結果を埗るためにク゚リのテキストを逐語的に思い出せたせんでした。 すべおが順調に始たりたした。 私は怜玢゚ンゞンで私の質問ぞの答えぞのリンクを芋たした、そしおそれが長い読曞問題を玄束するこずを実珟したした。 次に、コンピュヌタヌの電源を切り、タブレットで゜ファに倒れたした。怜玢゚ンゞンにすべおを再入力し、タブレットでそのリンクを開き、萜ち着いお、より快適な䜍眮に暪たわっお、読みたす...だった。 テキスト内のいく぀かの小さな䞍䞀臎-私のリンクは怜玢゚ンゞンではなくなりたした。 リンク自䜓を再生するこずもオプションではありたせん。長すぎたす。 ク゚リテキストのオプションに戞惑い、私はタブレットを壊すこずにほずんど怒りたした。 くそヌ、起きお、コンピュヌタヌの電源を入れ盎しお、ブラりザヌを起動し、履歎を掘り䞋げお、芁求の正確なテキストを芋぀けなければなりたせんでした。









ChromeおよびFirefoxにむンストヌルされた拡匵機胜



アむデア



私は考えたしたが、開いおいるタブをサヌバヌを介しお他のコンピュヌタヌに転送し、そこで匕き続き䜜業できるようにするブラりザヌ甚の拡匵機胜を䜜成するのは良いこずです。 はい、䞀郚のブラりザにはすでにクラりド機胜がありたす。䞡方のデバむスにログむンするだけで... ...それが問題です。 しかし、コンピュヌタヌにChromeがあり、タブレットにFirefoxがある堎合はどうなりたすか そしお...ええ、ログむンするだけです。 それでもGoogleアカりントのパスワヌドを思い出した堎合。 たた、Firefoxにはアカりントがありたせん。 アカりントがあるかどうかさえ知りたせんか もちろん、登録しお、おそらく䜕らかの圢で目的のリンクを自分に投げるこずができるサヌドパヌティのクラりドサヌビスがありたす。 ただし、そこに登録しお別のパスワヌドをしっかりず蚘憶する必芁がありたす...いいえ、これは完党に非珟実的です。 最終的に、メヌルを介しおリンクを自分で投げるこずができたす。 しかし、これはすべお時間がかかり、アドレスバヌからコピヌしお貌り付けおから、アドレスバヌに貌り付けたす。これは、たずえばタブレットでは非垞に䞍䟿です。 いいえ、これはなんらかのナンセンスです...



゜ファに暪たわっお、私はゆっくりずこれらすべおの行動があたりにも倚くの動きを必芁ずするこずに気づきたした...いいえ、みんな、そうしたせん。 そしお、この䞖界で䜕かが私に合わないこずを理解したら、私は座っお自分のやり方ですべおを行うコヌドを曞きたす。 私は、タブレットずデスクトップコンピュヌタヌの䞡方の゜ヌシャルネットワヌクで承認されおいるず思いたした。 たた、たずえば同じコンピュヌタヌ䞊の異なるブラりザヌでも。 䞀般的に、私にずっおの解決策は明らかでした-゜ヌシャルネットワヌクを介しおナヌザヌを認蚌するこず。



叙情的な䜙談



ちなみに、自分で䜕かを曞くずきは、それも自分のやり方でやりたす。 高床なノヌトブックに玔粋なjavaScriptを蚘述し、githubを䜿甚せず、サヌドパヌティのラむブラリを䜿甚せず、jqueryも䜿甚したせん。 したがっお、ブラりザヌ拡匵機胜の䜜成方法に関するチュヌトリアルはありたせん。 これは教えたせん。 私のようにしないでください。 譊告したす-これは悪い䟋です。 私はたた、圌らの反応を予想しお、すべおの朜圚的な批評家に䌝えたいです-はい、私はあなたのすべおの正しい怒りに完党に同意したす。 はい、スクリプト党䜓を1぀たたは2぀のファむルに抌し蟌むこずはできたせんが、サラダのようにすべおを现かく切り刻んで、コマンドラむンから長くスマヌトなコマンドを䜿甚しお3時間収集できるようにする必芁がありたす。 はい、javascriptコヌドずhtmlコヌドを1぀のファむルに結合するこずはできたせん-それらを結合する別のレベルの抜象化を台無しにするこずをお勧めしたす。 はい、テヌブルレむアりトを䜿甚するこずはできたせんが、いたいたしい、それは鉄です そしお、さらにそう-今、圌らは私を燃やしたす-innerHtmlを䜿甚しお耇雑なhtml構造を䞀挙に䜜成するこずはできたせんが、ルヌプ内のすべおの子をアタッチおよびデタッチし、各ハンドラヌを慎重にアタッチしお削陀する必芁がありたす...はい、私はすべお間違っおいたす。 眪深い、悔い改める。 しかし、私は意識的にそれを行いたす。簡単だからです。 そしお誰が私を犁じたすか 最埌に、それは違法ではありたせんか 開発プロセス図は䞍必芁に耇雑であるず考えおいるため、珟代のmodが必芁ずするようにプログラミングする方法がわかりたせん。たた、詊したくさえありたせん。 私は自分の手でコヌドを曞き、䞀行も曞かずに他の人の䜜品からそれを構築するのではありたせん。 ただし、私のコヌドは軜量であり、特別なチヌムが組み立おる必芁はなく、すぐに動䜜したす。 F5テクノロゞヌを䜿甚しおコヌドを曞いおいたす。 これは、開発プロセスで珟圚のバヌゞョンがどのように機胜するかを確認するために、F5ブラりザヌをクリックするだけです。











ただし、それ以倖の堎合は拡匵機胜がテストに合栌しないため、ハンドラヌをルヌプで切断する必芁がありたした。 たた、念のため拡匵機胜では、htmlむンデックスファむルで-突然-動的に接続されたスクリプトは犁止されおいたす。 そこで、スクリプトタグを介しおそれらを接続したした。



タブストレヌゞ



そこで、ブラりザで開いたタブを特定のリストに保存するこずを決定したした。このリストは、コンピュヌタヌ-ホヌムコンピュヌタヌ、職堎コンピュヌタヌ、ロヌカルコンピュヌタヌず呌ばれたす。 ロヌカルずは、リストがサヌバヌ䞊ではなくブラりザヌデヌタベヌスに保存されおいる堎合であり、したがっお、リストの保存元のブラりザヌでのみ䜿甚できたす。 これは、異なるコンピュヌタヌ間でスロヌする必芁のないタブ甚です。 たあ、残りのリストは、拡匵機胜でサポヌトされおいるものの䞭から任意のコンピュヌタヌずブラりザヌで衚瀺できたす。



各タブに぀いお、ナヌザヌは任意のテキストコメントを残すこずができたす。 たずえば、シリヌズを芋おいるずきに停止したシリヌズを芚えおおくず䟿利です。たた、タむトルやリンクの皮類が明確でない堎合は、ペヌゞの内容を自分でマヌクしおおくず䟿利です。



ChromeずFirefoxの拡匵機胜の䜜成に関するドキュメントによるず、拡匵機胜コヌドはメむンずバックグラりンドの2぀のファむルに配眮する必芁がありたす。 メむンスクリプトはナヌザヌむンタヌフェむスの衚瀺を凊理し、バックグラりンドスクリプトはブラりザヌのタブを制埡し、サヌバヌずデヌタを亀換できたす。 ChromeずFirefoxのタブの管理は非垞に䌌おいたす。 たずえば、Chromeでタブを開いたり閉じたりするためのむベントハンドラヌは次のようになりたす。



chrome.tabs.onUpdated.addListener( function(tabId, changeInfo) { });
      
      





そしお、Firefoxでは次のようになりたす。



 browser.tabs.onUpdated.addListener( function(tabId, changeInfo, tabInfo) { });
      
      





そしお、開いおいるすべおのタブのリストを衚瀺する関数は、䞡方のブラりザヌで同じように蚘述されおいたす。



 chrome.tabs.query({},function(data){ });
      
      





はい、はい、クロムはFirefoxでも曞かれおいたす...など これは少し奇劙ですが、ブラりザがAPIの暙準化に向かっおいるずいう事実は非垞に勇気づけられたす。



実際には、拡匵機胜のすべおの機胜は、いく぀かの機胜を䜿甚しお実珟されたす-アむコンをクリックしお拡匵りィンドりを開き、開いおいるタブを読み取り、タブを閉じ、新しいタブを䜜成し、タブむベントをリッスンし、拡匵りィンドりずデヌタを亀換したす。 それだけです これらのメ゜ッドは、バックグラりンドスクリプトからのみ䜿甚できたす。



読み取り埌、ブラりザヌで開かれたタブはサヌバヌに送信され、通垞のSQLデヌタベヌスに保存されたす。 サヌバヌスクリプトはPHPで蚘述されおいたす。 デヌタテヌブルずいう別のテヌブルの行ぞのリンクを栌玍するナヌザヌテヌブルがありたす。 このデヌタは、ペヌゞのアドレス、ペヌゞの名前、ナヌザヌのテキストコメントであり、玄1キロバむト長のテキストタむプフィヌルドにテキスト文字列の圢匏で保存されたす。 デヌタは暗号化されおいない圢匏で保存されたす。 1メガバむトあたり玄1,000個のタブを保存できたす。 ナヌザヌごずに最倧25個のストレヌゞ「コンピュヌタヌ」が提䟛されたす。



ただし、拡匵機胜の無料バヌゞョンでは、ナヌザヌは2぀のストレヌゞホヌムコンピュヌタヌず仕事甚コンピュヌタヌに制限され、各ストレヌゞは10個たでのタブを保存できたす。 私はただ有料版ず支払い方法に取り組んでいたす。 最倧25台の「コンピュヌタヌ」ずそれぞれ玄1000個のタブがあり、背景画像、各コンピュヌタヌのアむコンず名前、階局リストなどが遞択できたす。



別のリポゞトリ-ロヌカルコンピュヌタがありたす。 タブデヌタはナヌザヌのコンピュヌタヌのロヌカルブラりザヌデヌタベヌスに保存されるため、ここでは制限はありたせん。 ここには、奜きなだけタブを保存できたすが、ハヌドドラむブが蚱可する以䞊のタブは保存できたせん。 さらに、デヌタはロヌカルストレヌゞではなくindexedDBに栌玍されるため、5たたは数メガバむトの制限はありたせん。 重芁なこずは、ブラりザの履歎ずずもにこのリポゞトリを誀っお消去しないこずです。 たた、タブをテキストファむルに゚クスポヌトおよびむンポヌトする予定です。



indexedDBを䜿甚するために、長さが106行しかない小さなサブラむブラリを䜜成したした。 サヌバヌ䞊のデヌタベヌスずは異なり、ここではすべおのデヌタをテキスト文字列に抜出する必芁はありたせんが、連想配列にそのたた保存できたす。 そこにあるストレヌゞの原理はこれですキヌは䟡倀です。 たた、倀は巚倧な連想配列になる堎合がありたす。



ナヌザヌ認蚌









Firefox



既に述べたように、承認は゜ヌシャルネットワヌクを介しお行われ、サヌバヌではOAuthプロトコルを䜿甚したす。 FacebookずVKontakteで匕き続きサポヌトされおいたすが、ナヌザヌを認蚌する方法の数を増やす予定です。 OAuthサヌバヌ認蚌スキヌムは、䞡方の゜ヌシャルネットワヌクのドキュメントで詳现に説明されおいるため、詳现に説明する意味はありたせん。 ナヌザヌが既に゜ヌシャルネットワヌクにログむンしおおり、既に拡匵暩限を付䞎しおいる堎合でも、承認䞭に新しいブラりザヌタブが開くずいう事実が気に入らなかったこずにのみ泚意しおください。 このタブは、バックグラりンド拡匵スクリプトによっおキャッチされ、その埌匷制的に閉じられたす。䞀般に、芋た目は矎しくなく、他のタブに抌し蟌たれお、衚瀺されお砎棄されるず点滅したす。



これを閉じるには、VKontakteの堎合、タブむベントハンドラヌでアドレスの存圚を確認する必芁がありたす。



 oauth.vk.com/blank.html
      
      





Facebookの堎合



 https://www.facebook.com/connect/blank.html
      
      





念のため



 facebook.com/connect/login_success.html
      
      





そのため、最初に拡匵アセンブリをGoogle Web Storeに送信し、察応するクラむアントjavascript api゜ヌシャルネットワヌクの予備プルアップを䜿甚しお、クラむアントで認蚌を実行したした。 さらに、拡匵機胜はナヌザヌにむンストヌルされおおり、サヌバヌで認蚌する必芁があるため、iフレヌムの拡匵機胜のバックグラりンドスクリプトで、サヌバヌからhtmlをプルアップしたしたが、既に゜ヌシャルネットワヌクAPIをプルアップしおいたす...



そしお、サヌバヌずのデヌタ亀換スキヌムはそのようなものでした。 拡匵むンデックスペヌゞは、コマンドクリック情報などをバックグラりンド拡匵スクリプトに送信したす。 postMessageを䜿甚するバックグラりンドスクリプトは、iフレヌムhtmlにデヌタを送信したす。 Iフレヌムは、サヌバヌ䞊のphpスクリプトにデヌタを送信したす。 サヌバヌはiフレヌムで応答し、iフレヌムはバックグラりンドスクリプトで応答し、バックグラりンドスクリプトはむンデックスで応答し、ナヌザヌには答えが衚瀺されたす。 うヌん...そしお、最も重芁なこず-それはすべおうたくいきたした



䞀般に、これは機胜したせんでした。 Googleは拡匵機胜をいく぀かの文蚀で囲みたしたが、その䞭には、拡匵機胜がセキュリティポリシヌに準拠しおいないずいう挠然ずした蚀葉がありたした。 サポヌトずのやり取りを通じお、詳现を達成するこずができたした。 ぀たり、拡匵機胜がサヌドパヌティのサヌバヌからhtmlずjsをプルアップするずいう事実が奜きではありたせんでした...䞀般に、私はクラむアントの承認を埗お、サヌバヌの承認を埗る必芁がありたした。 はい。バックグラりンド拡匵スクリプトからhttp postリク゚ストをサヌバヌに盎接送信したしたが、蚱可されおいるこずが刀明したした。 いいでしょう それはさらに良いです。 短いこずが刀明したため、゜ヌシャルネットワヌクからJavaScript APIを取埗する必芁はありたせん。これはナヌザヌにずっお䜙分な埅ち時間です。



タブを衚瀺



拡匵オプションに戻りたす。 タブのリスト自䜓は䞀連の行であり、最初に画像のファビコン、次にペヌゞタむトル、最埌にリンクが続きたす。 画面䞊の指定された行サむズに収たらないものはトリミングされたす。 ただし、デヌタベヌスは完党に保存されたす。 たた、任意の行を色付きのタむルの圢で画面から取り出すこずができたす。 これは、そもそも目の前にあるべき最も重芁なサむトのためのものです。









Chromeタブリスト



タむルの色は、サむトのドメむン名に基づいお自動的に遞択されたす。 この関数はURLを受け入れたす。 ドメむン名は3぀のほが等しい文字グルヌプに分割され、各グルヌプの最初の文字は色成分の倀R、G、Bに倉換されたす。この倉換は次のように実行されたす。 これらの3文字のコヌドは、26による陀算の残りを取埗するこずにより、0〜25の範囲d1に瞮小されたす。ロシア語のアルファベットの文字もこの範囲に瞮小されたす。 27番目の文字が最初に来るこずは問題ではありたせん。アルファベットのすべおの文字の色成分が必ずしも異なる必芁はないので、繰り返しおみたしょう。 次に、範囲d10 ... 25から埗られた3぀の数倀は、範囲d2150 ... 255に比䟋しお枛少したす。 䞀般に、これらの範囲は関数の開始時に蚭定され、他の範囲に倉曎できたす。 色成分が明るくなるように150〜255を取りたした。 たずえば、0 ... 100に蚭定するず、タむルは暗くなりたす。 したがっお、ドメむン名の3文字は、150〜255の範囲の3぀の数字に倉換されたす。 そしお、ご想像のずおり、これらはタむルR、G、Bの色成分ずしお解釈されたす。すべおが非垞に単玔です。



 getSiteColor=function(url) { var d1=[0,25], d2=[150,255]; var code=0, codep=0, color=0, str='', domen='', ar=[], inc=0; ar=url.split('//'); if (ar.length>1) {str=ar[1];} else {str=ar[0];}; str=str.split('www.').join(''); domen=str.split('/')[0]; str=domen.split('.').join(''); ar=[]; inc=Math.floor(str.length/3); if (str.length % 3 >0) {inc++;}; for (var i=0; i<str.length; i+=inc) { code=str.slice(i, i+1).charCodeAt(0); codep=code % (d1[1]-d1[0]+1); color=Math.round( codep * (d2[1]-d2[0]) / (d1[1]-d1[0]) ) + d2[0]; ar.push(color); }; return {r:ar[0], g:ar[1], b:ar[2], domen:domen}; }
      
      





HTMLドキュメント構造



htmlドキュメントは、オヌバヌレむによっお結合された絶察配眮を備えた耇数のキャンバス芁玠ず、リストが衚瀺されるdivブロックで構成されたす。 サむズを倉曎するず、ブラりザりィンドりにこれらのすべおの芁玠のサむズを倉曎する関数がハングし、新しい高さず幅に調敎されたす。 最小サむズもあり、これが克服されおスクロヌルバヌが衚瀺されたす。 背景画像は䞋のキャンバスに衚瀺されたす。 ナヌザヌがナビゲヌトしやすいように、さたざたなリスト぀たり、コンピュヌタヌに察しお、さたざたな背景を蚭定する必芁があるず刀断したした。 背景画像は、りィンドりの瞊暪比を維持したたた塗り぀ぶされ、泚意を匕かないようにわずかに明るくなりたす。その䞊に癜い半透明の長方圢が描画されたす。 バックグラりンドキャンバスの䞊には、メむンメニュヌのキャンバスがあり、画面の䞊郚のみを塗り぀ぶしたす。 さお、さらに高いのはdivブロックで、タブのリスト自䜓が圢成されたす。 キャンバスメニュヌナビゲヌションは、ミニラむブラリを介しお行われたす。









OperaおよびYandexブラりザヌ



ロヌカリれヌション



メむン画面にはフラグがあり、クリックするず、むンタヌフェヌスがロシア語ず英語の間で切り替わりたす。 ここでは、ペヌゞは同じアドレスにリダむレクトされたすが、コマンドラむンにパラメヌタヌがありたす。 このパラメヌタヌは、他のすべおの芁玠をロヌドする前に読み取られたす。 そしお、その倀に基づいお、これたたはロシア語たたは英語のフレヌズを含むjsファむルは、フレヌズの連想配列lng_en.jsたたはlng_ru.jsにロヌドされたす。 たた、アプリケヌション自䜓では、むンタヌフェむスフレヌズを導出するために、この連想配列からのテキスト文字列ぞのリンクが既に䜿甚されおいたす。 たた、アドレスバヌの倀に応じお、グラフィカルむンタヌフェむスの芁玠buttons_en.pngたたはbuttons_ru.pngを含むファむルがロヌドされたす。 特に倚くはなく、このスプラむトリスト党䜓の重量が50しかないため、空のボタンを1぀䜜成しおアむコンず碑文をオヌバヌレむするよりも、グラフィック゚ディタで各蚀語のアむコンず碑文ず䞀緒にボタンを䜜成する方がよいず刀断したしたKb 匕き続きデザむンに取り組み、すべおのボタンの圢を倉える予定です。











ずにかく、特定のロヌカラむズに関連付けられおいないグラフィック芁玠を含むスプラむトmain.pngを含む䞀般ファむルがロヌドされたす。



りェブ版



自宅や職堎のコンピュヌタヌから慎重に保存されたリンクを電話から途䞭で芋るこずができればいいず思いたした。 ただし、すべおのモバむルOSブラりザヌが拡匵機胜をサポヌトしおいるわけではありたせん。 そこで、Webアセンブリを䜜成したした。 特定のアドレスでサむトにアクセスするず、゜ヌシャルネットワヌクの1぀を䜿甚しおログむンし、タブを衚瀺できたす。



はい、リストにタブを远加したり線集したりする方法はありたせん。 ただし、少なくずもリストからタブを開いおペヌゞを閲芧するこずはできたす。 このサむトのモバむル版で䜜業し、その䞭にタブのより倧きなリストを衚瀺するこずは䟡倀があるず思いたす。









IE 11のWebバヌゞョン



広告



私はこれたで自分の拡匵を促進するこずに本圓に取り組んでいたせんでした。 圌は゜ヌシャルネットワヌクでグルヌプを䜜成し、そこにいる友人党員を招埅したした。 はい、圌はYandex Directで1,500ルヌブルの広告キャンペヌンを開始したした。 圌女は特別な結果を出さなかったが、倚分私は正しい発衚をしなかった。 たたは、問題は、拡匵機胜のホヌムペヌゞの英語版ぞのリンクを瀺したこずです。 たた、ホヌムペヌゞではなく、すぐに拡匵ストアの1぀にリンクを匵る䟡倀があるかもしれたせん。 ご存知のように、私はマヌケティングの倩才ではありたせん。 䞀般に、他のパラメヌタヌを䜿甚しお再詊行したす。 キャンペヌンでは39回のクリックが発生したした。 その結果、新しいナヌザヌを獲埗したかどうかを刀断するのは困難です。









Firefoxの䞋のバヌゞョンには奇劙な点が1぀ありたした。









10月17日の統蚈では、227回のダりンロヌドが瀺されおいたす。 Yandex.Directのキャンペヌンがこれに貢献したかどうかはわかりたせんが、䜕らかの理由で、䜕らかの理由で1日1〜2回ダりンロヌドが続けられたす。 同時に、Firefoxの拡匵機胜には、毎日のナヌザヌずいう抂念がありたす。









ダりンロヌド数が227だったのに1日1〜2人のナヌザヌしかいなかった理由は明らかではありたせん。 おそらくそれは䜕らかの倱敗でした。 䞀般的に、私はそれが䜕であり、これらの人々がどこにいるのか理解しおいたせんでした...



Chromeりェブストア拡匵ストアの統蚈は、氞遠にロヌドされないスケゞュヌルこれは私には芋られたせんでしたず毎日5〜10人のナヌザヌを満足させたした。









たた、アセンブリをOpera拡匵ストアに送信したした。 しかし、2぀のバヌゞョンを配眮し、それらのいずれかのモデレヌションを埅たずに、ある時点で、そこに新しいバヌゞョンを広めようずしたした。 実際、OperaがChromeストアから拡匵機胜を完党にむンストヌルする堎合、なぜこれが必芁なのですか。









たずめ



Chrome、Firefox、Webバヌゞョンの3぀の拡匵ビルドを䜜成したした。 実際、3぀のアセンブリはすべお同じアセンブリであり、珟圚䜿甚されおいるブラりザ゚ンゞンを構成内で単に瀺しおいたす。 そしお、タブを操䜜するための察応する関数が初期化されたす。 この倀を倉曎しおから、zipにパックしおパッケヌゞを適切な拡匵ストアに送信したす。



ChromeずFirefoxのバヌゞョンはテストされ、それぞれの公匏拡匵ストアに配眮されおいたす。 さらに、Googleでの拡匵機胜開発者ずしおの登録には5ドルかかりたす。 Mozillaは無料で提䟛しおいたす。 Webバヌゞョンの拡匵機胜はサヌバヌにありたす。 Chromeストアのアセンブリは、互換性のあるブラりザヌで正垞に機胜したす。YandexブラりザヌずOperaにもむンストヌルできたす。 さらに高床な機胜を備えた新しいバヌゞョンをリリヌスする予定です。



䞀般的に、ブラりザの拡匵機胜は匷力です。 今、私は゜ファから立ち䞊がる必芁はありたせんし、タブレットを壊す怒りも必芁ありたせん。 これは完党な犅です。 すべおに良い。



All Articles