docs: function() {
  		// if running in Node.js, don't setup.
  		if (isNode()) {
  			return;
  		}
  
  		var document = getDocument(),
  			window = getGlobal();
  
  		this._value = getCurrentUrl();
  
  		// Intercept routable links.
  		domEvents.addDelegateListener(document.documentElement, "click", "a", this.anchorClickHandler);
  		var originalMethods = this.originalMethods = {};
  		var dispatchHandlers = this.dispatchHandlers;
  
  		// Rewrites original `pushState`/`replaceState` methods on `history`
  		// and keeps pointer to original methods.
  		canReflect.eachKey(methodsToOverwrite, function(method) {
  			this.originalMethods[method] = window.history[method];
  			window.history[method] = function(state, title, url) {
  
  				// Avoid doubled history states (with pushState).
  				var absolute = url.indexOf("http") === 0;
  				var location = LOCATION();
  				var searchHash = location.search + location.hash;
  
  				// If url differs from current call original history method and update `route` state.
  				if ((!absolute && url !== location.pathname + searchHash) ||
  					(absolute && url !== location.href + searchHash)) {
  					originalMethods[method].apply(window.history, arguments);
  					dispatchHandlers();
  				}
  			};
  		}, this);
  
  		// Bind dispatchHandlers to the `popstate` event, so they will fire
  		// when `history.back()` or `history.forward()` methods are called.
  		domEvents.addEventListener(window, "popstate", this.dispatchHandlers);
  	}