mobile.de, autoscout24 Entfernungsrechner

Berechnet Entfernung von Ihrem Wohnort bis zum angebotenen Fahrzeug. Funktioniert sowohl auf der Suchergebnis-Seite als auch auf der mit Details.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name           mobile.de, autoscout24 Entfernungsrechner
// @description    Berechnet Entfernung von Ihrem Wohnort bis zum angebotenen Fahrzeug. Funktioniert sowohl auf der Suchergebnis-Seite als auch auf der mit Details.
// @namespace      softwarecanoe.de
// @include        http://suchen.mobile.de/*
// @include 	   http://*.autoscout24.*
// @version        1.3
// @copyright      Eugen Kremer
// @grant          GM_getValue
// @grant          GM_setValue
// @grant          GM_registerMenuCommand
// @grant          GM_xmlhttpRequest
// ==/UserScript==
(function(){
	function debug(msg){
		console.log(msg);
	}
	
	function SetStart(){
		if (typeof(GM_getValue)=="undefined")
			return;
		
		var start = GM_getValue("addr");
		start = prompt("Geben Sie die Startadresse ein", start);
		GM_setValue("addr", start);
	} 

	function GetStart(){
		var start = null;
		if (typeof(GM_getValue)!="undefined")
			start = GM_getValue("addr");
			
		return start;
	}

	GM_registerMenuCommand("Mobile.de Settings", SetStart);

	function OnLoadResponse(responseDetails) {
		if (responseDetails.readyState !=4)
			return;
			
		var json  = eval("("+responseDetails.responseText+")");
		
		var distanz = json.routes[0].legs[0].distance;
		var dauer = json.routes[0].legs[0].duration;

		this.divEl.innerHTML = dauer.text+" - "+distanz.text;
	}

	function SendRequest(start, ziel, resultEl){
		GM_xmlhttpRequest({
			method: 'GET',
			url: 'http://maps.google.de/maps/api/directions/json?language=de&mode=driving&origin='+start+'&destination='+ziel+'&sensor=false',
			ziel:ziel,
			divEl: resultEl,
			headers: {
				'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
			},
			onload: OnLoadResponse
		});
	}

	function CreateAnchor(parent, start, ziel){
		var aEl = document.createElement('a');
		aEl.style.display = "block";
		
		parent.appendChild(aEl);

		if (start){
			aEl.href = "http://maps.google.de/maps?f=d&source=s_d&saddr="+start+"&daddr="+ziel+"&hl=de&ie=UTF8";
			aEl.target = "_blank";
			SendRequest(start, ziel, aEl);
		} else {
			aEl.href = "javascript: void(null);";
			aEl.addEventListener("click", function(){ SetStart(); document.location.href = document.location.href;}, false);
			aEl.innerHTML = "Startpunkt setzen!";
		}
	}

	function AddDistanceAndDuration(){// autoscout searchresult
		var p = document.querySelectorAll(".listItem .truncc span:nth-child(1)");
		if (!p || p.length==0)
			return;

		var handler  = p[0];

		var ziel = handler.textContent;

		var start = GetStart();

		CreateAnchor(handler, start, ziel);
	}
	function AddDistanceAndDuration5(){// autoscout details
		var p = document.querySelectorAll(".contact-container div:nth-child(2)");
		if (!p || p.length==0)
			return;

		var handler  = p[0];

		var ziel = handler.textContent;

		var start = GetStart();

		CreateAnchor(handler, start, ziel);
	}
	function AddDistanceAndDuration4(){ // mobile.de details page
		var p = document.querySelectorAll("#vcardAddress");
		if (!p || p.length==0)
			return;

		var handler  = p[0];
		var ziel = handler.textContent;
		
		var start = GetStart();

		CreateAnchor(handler, start, ziel);
	}

	function AddDistanceAndDuration2(){ // mobile.de search results 
		var list = document.querySelectorAll(".cBox-body--resultitem .g-col-10 .u-margin-bottom-9");

		if (!list || list.length == 0)
			return;

		var start = GetStart();

		for(var i=0, c=list.length; i<c; i++){
			var ziel = list[i];
			AddDistanceAndDurationFor(start, ziel.textContent, ziel);
		}
	}

	function AddDistanceAndDuration3(){
		var list = document.querySelectorAll("div.maps-location td.maps-data div");
		
		if (!list || list.length == 0)
			return;
			
		var start = GetStart();

		var ziel = list[0].textContent.replace(/\s{2,}/g,' ');
		
		if (ziel.length < 1 )
			return;
			
		var divEl = document.createElement("div");
		divEl.style.cssFloat = "right";
		
		var container = document.getElementById("detailRight");
		container.insertBefore(divEl, container.firstChild);
		
		CreateAnchor(divEl, start, ziel);
				
	}

	function AddDistanceAndDurationFor(start, ziel, textNode){
		// create new node containing destination and duration
		var divEl = document.createElement("div");
		
		textNode.appendChild(divEl);

		CreateAnchor(divEl, start, ziel);
	}
	window.addEventListener('load', 
		function() { 
			try{
				AddDistanceAndDuration();
				AddDistanceAndDuration2();
				AddDistanceAndDuration3();
				AddDistanceAndDuration4();
				AddDistanceAndDuration5();
			}catch(e){
				if (typeof(console)!='undefined')
					console.log(e);
			} 
		},
		true
	);
	
})();