Node-webkitシリーズ(01):FixオープンソースプロジェクトのBugの

3872 ワード

このブログは主に私がオープンソースプロジェクトを修復することを書いています:Node-Webkit(私の前のブログから大体を知ることができます)のBugとMergeの過程です.主にそこからいくつかの方法をまとめ、経験を積みたいと思っています.(備考:以下nwはnode-webkitを指す)
 
Bug
GithubのIssueへのリンク:
https://github.com/rogerwang/node-webkit/issues/403
問題の説明:nwでは、
<a href="mailto:[email protected]">Mail</a>

このようなハイパーリンクラベルは、ブラウザ(chrome)のように、システム内のデフォルトのメール送信クライアントを開くことはできません.もう1つの例は、
<a href="github-windows://openRepo/https://github.com/rogerwang/node-webkit">Clone in Windows</a>

このようなリンクも正常に動作しません.
 
問題の分析
  • 最初は、なぜChromeで同じリンクが正常に開くことができるのか(プロトコルによっては確認ダイアログがいくつかポップアップされます)、例えばGithub上の倉庫のClone in Windowsというリンクをクリックしたときにポップアップされたダイアログを想像しました.このようなHTMLのタグのクリックイベントへの応答はWebkitで実現すべきではないでしょうか.しかしよく観察してみると、このダイアログボックスはChrome特有のものです.nwはChrome Content APIに基づいて実現されている.つまりnwではこのイベントに何か応答する関数が実現されていないはずだ.そこで、私はこの関数を探す過程を始めました.
  • Chromeのアーキテクチャとnwのアーキテクチャを知った上で、Chromeでの関連実装をPatchの参考に探し始めました.最初は手がつけられないでしょう.このコードの量は根本的に海で針をすくっているのではないでしょうか.その後、突然、Chromeに関連するBugが存在したかどうかを探すことができますか?そうなるとPatchの記録を見ればどこで実現したのか大体わかる!そこでChrome Issueの追跡システムに着きました:https://code.google.com/p/chromium/issues/list mailto status=Fixed(All issues)を検索して、この簡単なキーワードの検索で、私は次のIssue:https://code.google.com/p/chromium/issues/detail?id=20696を見つけて、このIssueの説明をよく読んでみると、今私がnwで完成しなければならないコードと一致しています!
  • しかし、私はとても喜んでリンクを開いて、コードがどれらを修正したかを見たいと思っています.ああ、このコードはどうしてなくなったのですか.(Chromeというプロジェクトでは、あるフォルダにファイルを移動することがよくありますのでおかしくありませんが、ファイル名は一般的に変わりません).そこでexternalを探し始めましたprotocol_handler.ccというファイルのプロセス.
  • Google Chromiumこのプロジェクトにはすごいツールがあります!コード検索:https://code.google.com/p/chromium/codesearchこのツールは最近いくつかの機能をアップグレードしました(https://groups.google.com/a/chromium.org/forum/#!starred/chromium-dev/LnkIhHajvyA)!externalを直接使用protocol_handlerは検索を行い、次のコードを見つけました:https://code.google.com/p/chromium/codesearch#chrome/src/chrome/browser/external_protocol/external_protocol_handler.h&q=external_protocol_handler&sq=package:chrome&type=cs&l=5.同時に注釈をよく読んだ後、私が必要としているのはこれだともっと確信しました.
  • 以降のことは、その中のコードを読んで、自分の必要な部分を見つけることです.Commitは以下の通り:https://github.com/rogerwang/node-webkit/commit/0bcc9840660d390c463ffc061a55ce280d5dc629
  •  
    何を学んだの?
  • 一つは、あなたが何の見当もつかない問題に見えても、一定の方法:ツールを合理的に使用し、少し筋道のある推論の下で一歩深く進むだけで、解決できるはずです.
  • 思考できるプログラマーになります.

  •