There's no simple, cross-platform way to register protocol handlers in Electron. Every OS requires a different solution. This seems like something that Electron should smooth over.

There's already a W3C API for this: [`Navigator.registerProtocolHandler`](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/registerProtocolHandler). Can Electron implement it?

atom/browser/api/atom_api_app.cc
*prevent_default = Emit("open-file", file_path);
}
void App::OnOpenURL(const std::string& url) {
  Emit("open-url", url);
}
void App::OnActivate(bool has_visible_windows) {
  Emit("activate", has_visible_windows);
}
void App::OnWillFinishLaunching() {
  Emit("will-finish-launching");
}
void App::OnFinishLaunching() {
  Emit("ready");
}
void App::OnLogin(LoginHandler* login_handler) {
  v8::Locker locker(isolate());
  v8::HandleScope handle_scope(isolate());
  bool prevent_default = Emit(
      "login",
      WebContents::CreateFrom(isolate(), login_handler->GetWebContents()),
      login_handler->request(),
      login_handler->auth_info(),
      base::Bind(&PassLoginInformation, make_scoped_refptr(login_handler)));
  
  if (!prevent_default)
    login_handler->CancelAuth();
}
void App::AllowCertificateError(