anchor.diff:    }
     
     void gotoPath(String path, String title) {
  +    _logger.finest('gotoPath $path');
       var url = _getUrl(path);
       if (url != null) {
         _go(path, title);
  -      _handlers[url](path);
  +      // If useFragment, onHashChange will call handle for us.
  +      if (!_listen || !useFragment) {
  +        _handlers[url](path);
  +      }
       }
     }
   
  
positive.code: class Router {
    final Map<UrlPattern, Handler> _handlers;
    final bool useFragment;
  
    /**
     * [useFragment] determines whether this Router uses pure paths with
  
negative.code:    * browsers the hashChange event is used instead.
     */
    void listen({bool ignoreClick: false}) {
      _logger.finest('listen ignoreClick=$ignoreClick useFragment=$useFragment');
      if (_listen) {
        throw new StateError('listen should be called once.');
      }
      _listen = true;
      if (useFragment) {
        window.onHashChange.listen((_) {
          var path = '${window.location.pathname}${window.location.hash}';
          _logger.finest('onHashChange handle($path)');
          return handle(path);
        });
        handle('${window.location.pathname}${window.location.hash}');
      } else {
        window.onPopState.listen((_) {
          var path = '${window.location.pathname}${window.location.hash}';
          _logger.finest('onPopState handle($path)');
          handle(path);
        });
      }
      if (!ignoreClick) {
        window.onClick.listen((e) {
  