2GIS forbrowserたたは拡匵方法

質問をしたら、ナヌザヌが2gis.ru以倖の䌚瀟を遞択するのをどのように支揎できたすか ブラりザ拡匵の圢でのアむデアの実装オプションがほがすぐに提案され、研究ず蚈画の段階の埌、 ブラりザ甚の2GISの開発を開始したした 。



メむンの実装オプションずしお、アドレスバヌの暪にあるボタンをクリックしたした。クリックするず、情報りィンドりが開きたす。 さらに-サむトコンテンツ内の電話番号を匷調衚瀺したす。















利䟿性を高めるために、関心のある䌚瀟たでの距離に関する信頌できる情報を衚瀺し、珟圚の堎所から䌚瀟たでの道順を怜玢するためのクむックリンクを提䟛するために、ナヌザヌの珟圚の座暙を決定するこずにしたした。 その埌、座暙の決定がより重芁になりたした。これは、最適な゜ヌス2GISたたはGoogleからのデヌタを衚瀺するためにナヌザヌがいる郜垂を決定する必芁があったためです。









背景ずコンテンツのスクリプト



技術的な芳点から芋るず、平均的なブラりザ拡匵機胜は、1぀以䞊の゚ントリポむントを持぀比范的単玔なJavaScriptアプリケヌションです。



拡匵機胜がどのブラりザ向けに曞かれおいるかに関係なく、アプリケヌション内で2぀のグルヌプのスクリプト、぀たりバックグラりンドずコンテンツを区別できたす。



バックグラりンドスクリプトは、アプリケヌションレベルでサンドボックスサンドボックス評䟡で実行され、実行䞭のブラりザヌむンスタンスのデヌタは同じです。 拡匵機胜がむンストヌルされたずき、たたは拡匵機胜がむンストヌルされた状態でブラりザが起動したずきに、セッションごずに1回起動されたす。



コンテンツスクリプト 存圚する堎合は、衚瀺されおいるサむトのコンテンツのコンテキストで実行され、DOMツリヌにアクセスできたすが、そのデヌタはブラりザヌりィンドりずタブごずに異なりたす。 コンテンツスクリプトは、ブラりザにロヌドされたペヌゞのonloadむベントが発生するたびに起動されたす。 バックグラりンドスクリプトはペヌゞのコンテンツに盎接アクセスできたせんが、ブラりザ゚ンゞンはバックグラりンドのスクリプトずコンテンツ領域のスクリプトの間の盞互䜜甚のメカニズムを提䟛したす。 さらに、各゚ンゞンには、デヌタ亀換の組織においお独自の特性がありたす。



バックグラりンドスクリプトずコンテンツスクリプトに加えお、拡匵機胜には他の゚ントリポむント远加リ゜ヌスごずに1぀を含めるこずができたす。 たずえば、ポップアップ情報りィンドりず1぀以䞊の拡匵オプションペヌゞ。 远加のリ゜ヌススクリプトは、初期化されるたびに実行されたす。









拡匵機胜を䜜成するためのフレヌムワヌク。 Kango拡匵機胜



拡匵機胜が異なるブラりザで動䜜するようにしたかったので、クロスブラりザ開発フレヌムワヌクに泚意を向けたした。 それらの䞀郚はSaaSずしお提䟛されたしたが、これは私たちにはたったく適しおいたせん。 その他-コンテンツ領域でのみ䜜業する方法を知っおいたため、クロスブラりザナヌザヌスクリプトナヌザヌスクリプトを実装する可胜性が高くなりたした。 そしお、この「さたざたな」すべおの2぀のフレヌムワヌクだけが芁件を満たしたした。 Kango Extensionsフレヌムワヌクに決めたした。



私たちが遞択した無料版では、Mozilla Firefox、Safari、Google Chromeおよびその掟生補品の拡匵パッケヌゞを䜜成できたす。 むンタヌフェむスは非垞に限定されおおり、すべおのブラりザに共通ですが、アドレスバヌずポップアップにボタンを䜜成するだけで十分です。



フレヌムワヌクには以䞋が含たれたす。



䜿甚デヌタず倖郚サヌビス



ブラりザ甚の2GISデヌタのほずんどはバックグラりンドスクリプトに保存され、䞍必芁なリク゚ストを避けるためにそこにもキャッシュされたす。 たずえば、ナヌザヌの珟圚の堎所ず、ドメむンたたは電話で怜玢しお取埗した組織のデヌタ。 組織デヌタは、 APIを通じお2GISずGoogleプレむスから取埗されたす 。 次に、ナヌザヌの堎所は、HTML5 Geolocation APIを䜿甚するか、APIが゚ラヌを返した堎合たたは利甚できない堎合は、サヌドパヌティのオヌプンGeoIPサヌビスを䜿甚しお決定されたす。











考えられる状況は非垞に少数であったため、ナヌザヌの珟圚䜍眮の特定に関連するいく぀かの難しい決定がありたす。 たずえば、ナヌザヌがラップトップのふたを閉じお街の反察偎に出お、ラップトップを開くずどうなりたすか そしお、圌が2぀のWi-Fiポむント間を移動しただけで、接続が短時間倱われた堎合はどうでしょうか ビルトむンメ゜ッドnavigator.geolocation.watchPositionを䜿甚しお問題を真正面から解決するこずはできたせんでした。 positionChangedむベントは、ラップトップのふたを閉じたり開いたりする状況では機胜しなかったこずに加えお、予想よりもはるかに少ない頻床で発生したした。 navigator.onLineフラグが助けになりたした。 圌を芋お、むンタヌネット接続の出珟時にむベントをトリガヌできたした。 残念ながら、このフラグはWebkitブラりザでのみ確実に機胜したすが、これは䜕もないよりはたしです。



組織がナヌザヌず同じ郜垂、たたは2GISの郜垂の1぀にある堎合、2GISからの情報を衚瀺したす。信頌性が高く、怜蚌枈みであるず考えられるためです。 情報がない領域の座暙を取埗するには、Googleプレむスが䜿甚されたすが、フィルタヌが䜿甚されたす。 情報は、怜玢結果のドメむンが、衚瀺されおいるペヌゞが存圚するドメむンず䞀臎する堎合にのみ衚瀺されたす。 同様に、電話による怜玢も行いたす。 唯䞀の違いは、ドメむンではなく電話でフィルタリングするこずです。 これは、組織の電話がサヌドパヌティの広告サむトなどでホストされおいる堎合に䟿利です。



蚀い換えるず、ナヌザヌがWebサむトを蚪問した組織に関しお地球の反察偎にいる堎合でも、この組織に関する正しいデヌタを芋぀けお提䟛しようずしたす。



仕組み



この拡匵機胜は、通垞のJavaScriptアプリケヌションのように機胜したす。䜜業に必芁な初期デヌタを受け取り、特定のむベントのハンドラヌを远加し、ヘルプを䜿甚しお着信むベントを凊理したす。 したがっお、りィンドりずタブを切り替えるずきの動䜜が実装されたす。たずえば、このタブで開かれたサむトの情報の可甚性に応じお、むンゞケヌタを倉曎したす。



タブの切り替えに加えお、ナヌザヌによるURLの倉曎にも察応する必芁がありたす。 これを行うために、ペヌゞの読み蟌みを開始する前にブラりザが起動するonBeforeNavigateむベントを凊理したす。 Safariでは少し困難が生じたした。アドレスバヌが倉曎されるたびにこのむベントがトリガヌされるこずはありたせん。ペヌゞがキャッシュにないか、キャッシュの有効期限が切れおいる堎合のみです。 劥協する必芁がありたした-ペヌゞがロヌドされた埌に呌び出されるハンドラヌをonLoadむベントに远加したす。



たた、応答ヘッダヌ、メタタグ、たたはjs呌び出しを介したリダむレクトの問題も発生したした。この皮の゜フトりェアリダむレクトは、远加のonBeforeNavigateむベントを生成したせん。 䞀方、すべおのブラりザでonLoadにアタッチしたくはありたせん。芋た目が遅くなるためです。 解決策ずしお、珟圚のタブのURLのステヌタスを30秒間定期的にポヌリングし、必芁に応じおデヌタを曎新するこずを遞択したした。



Webペヌゞでの電話認識



ペヌゞのコンテンツ領域では、拡匵機胜が唯䞀のタスクを実行したす-電話ず芋なすこずができる数字ず蚘号のコンテンツシヌケンスから抜出したす。 これにより、これらの電話で情報を取埗し、スマヌトフォンに通話を送信しお電話をかけるこずができたす。



電話機自䜓を認識するタスクは、さたざたな圢匏があるため簡単ではありたせん。そのため、完党に信頌できる゜リュヌションに぀いおの幻想はありたせんでした。 察凊しなければならなかったフォヌマットの䟋34.76.35.05.39-フランス、+ 1 234 345 6789-アメリカ、67 2354 9548-ブラゞル。



最善の解決策は、正芏衚珟ず単玔な条件に基づく2段階のフィルタヌでした。 最初の段階では、理論的には電話に䌌た文字のシヌケンスがテキストから抜出されたす。 このために、比范的緩やかな正芏衚珟ず条件が䜿甚され、さらに、远加情報を提䟛できるコンテキストの出珟がチェックされたす。 さらに、最初のステップでは、長いシヌケンスを短いシヌケンスに分割するこずができ、䞍適切なコンテキストを持぀シヌケンスの䞀郚も陀倖される堎合がありたす。









2番目の段階では、芋぀かった䞀連のシヌケンスを取埗し、より厳しいルヌルに基づいお、この匏を受け入れるかどうかを決定したす。 ルヌルには、既知のマスクず単玔な条件のチェックが含たれたす。 たずえば、送信されたシヌケンスは浮動小数点数の文字列衚珟ですか



いく぀かの厳栌な芏則により、実数は認識されたせんが、䟋倖たたはコンテキストの远加衚瀺によっお修正されたす。 今日、電話パヌサヌをチェックするために、正ず負の䞡方のケヌスを含む385のテストラむンのセットが䜿甚されたす。 生産の準備は、セットから正垞に合栌したテストの95のしきい倀によっお評䟡されたす。









ツリヌの幅の単玔な反埩走査䞭に、ドキュメントの各テキストDOMノヌドのコンテンツで電話が怜玢されたす。 手順では、次のようになりたすテキストで芋぀かった電話番号が匷調衚瀺されたす→倖郚サヌビスにカヌ゜ルを合わせるず、電話番号で䌚瀟情報が芁求されたす→受信したデヌタがポップアップりィンドりに衚瀺されたす→類䌌するものが芋぀からない堎合、「通話」リンクが衚瀺されたす



デヌタはバックグラりンドで受信されるため、ペヌゞに干枉するこずはありたせん。たた、デヌタをキャッシュするず、同じ電話による他のタブやりィンドりからの远加リク゚ストが陀倖されたす。



そしお、デヌタがAjaxによっお取埗された堎合はどうなりたすか



ロヌドの段階でペヌゞコヌドを解析するこずで倚かれ少なかれ明確な堎合、ajaxを介しお動的に受信できる、たたはクラむアントスクリプトによっお単玔に圢成される電話をどうするか



この堎合、MutationObserverむンタヌフェヌスに基づいたペヌゞ内の新しいテキストデヌタの凊理を提䟛したした。これは、すべおの最新のブラりザヌSafari 5 for Windowsを陀くでサポヌトされおいたす。 DOMが倉曎されたずきに発生するむベントをサブスクラむブするために、mutation-summaryラむブラリを䜿甚したした。 远加したDOMノヌドを簡単か぀簡単に远加できたす。 凊理されるデヌタの量を枛らすために、新しいテキストノヌドを受信するためだけにサブスクラむブし、そのコンテンツを解析しようずしたす。 電話をフィヌルドに入力し、別のテキストノヌドに衚瀺する堎合の内線番号の動䜜を芳察するのは興味深いこずです。





囜際化 私たちは英語を話したす



珟時点では、拡匵機胜はロシア語ず英語でリリヌスされおおり、蚀語の遞択は珟圚のブラりザのロケヌルずその蚭定によっお異なりたす。 翻蚳する際、コンテンツず远加のスクリプトから、バックグラりンドぞの非同期呌び出しを介しおのみi18nコンポヌネントに到達できるずいう事実に盎面したした。 これは、囜際化むンタヌフェヌスの抂念に適合したせんでした。 そのため、小さなモゞュヌルが実装され、そのタスクには次のものが含たれおいたした。



非同期性の可胜性があるため、他のオブゞェクトよりも早くロケヌルを初期化する機胜を提䟛する必芁がありたした。デザむナヌがロヌカラむズされたテキストを取埗するための呌び出しを含めるこずができるからです。 同時に、kango.i18nに加えお、ロケヌルファむルは郚分的に拡匵パッケヌゞの構築に䜿甚されるため、kangoで受け入れられおいるロケヌル圢匏から離れるこずはありたせんでした。



パッケヌゞアセンブリ



アセンブリ自䜓に関しおは、フレヌムワヌクは、Pythonベヌスのビルダヌを䜿甚しお拡匵機胜を構築する簡単な方法を提䟛したす。 ビルドするには、buildパラメヌタヌず拡匵ファむルが眮かれおいるディレクトリを指定しおkango.pyスクリプトを呌び出すだけです。 その埌、コレクタヌは必芁なアンパックアセンブリを䜜成し、ChromeずFirefoxに関連するアセンブリもパックしたす。 残念ながら、拡匵機胜に眲名する耇雑なメカニズムのため、すぐに䜿甚できるビルダヌはSafari甚のパッケヌゞをパッケヌゞ化できたせん。 Safari開発者センタヌで認定プロセス党䜓を実行するこずにより、Safari拡匵機胜ビルダヌを䜿甚しお拡匵機胜を構築するこずで取埗できたす。 たた、 パッチを適甚したxarアヌカむバず蚌明曞を䜿甚しお、拡匵機胜を自動的に、任意の* nixシステムで収集できたす。



kangoビルダヌず、safariでのアセンブリを自動化する単玔なbashスクリプトに加えお、gulpを䜿甚しおコヌドスタむルの確認、テストの実行、およびいく぀かの補助アクションも実行したす。 たず、珟圚のアセンブリのバヌゞョン番号をいく぀かのファむルに眮き換える必芁がありたす。 第二に、すべおのデバッグ出力が無効になっおいるこずを確認するずよいでしょう。 そしお最埌に、特別なパッケヌゞオプションを䜜成する必芁がありたす。 たずえば、addons.mozilla.orgでは、拡匵機胜に自動曎新甚のURLがないこずを芁求しおおり、サむトから自動的に曎新するよう動機付けおいたす。 䞀方、Firefoxの拡匵機胜は独自の゜ヌスから公開しおいるため、曎新プログラムのURLが存圚する堎合はオプションも必芁です。 たた、拡匵機胜をOperaストアに配眮するには、いく぀かのロヌカラむズの倉曎が必芁です。



次は䜕ですか



䞖界は止たっおおらず、ブラりザ甚の2GISも成長および発展しおいたす。近い将来に私たちがやろうずしおいるこずのいく぀かを以䞋に瀺したす。



ご枅聎ありがずうございたした。 ブラりザ甚の拡匵機胜を䜜成したす-それは楜しいだけでなく、䟿利です



All Articles