您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
cleans up the unnecessary junk off the end of urls and links location to vrbo
// ==UserScript== // @name Rental Utils // @namespace https://fxzfun.com/userscripts // @version 2024-08-03 // @description cleans up the unnecessary junk off the end of urls and links location to vrbo // @author FXZFun // @match https://*.vrbo.com/* // @match https://*.airbnb.com/* // @icon https://fxzfun.com/favicon.ico // @grant none // ==/UserScript== /* global __PLUGIN_STATE__ */ (async function() { 'use strict'; const pageWindow = window; async function getAddress(lat, lng) { let r = await fetch(`https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode?location=${lng}%2C${lat}&f=pjson`); let j = await r.json(); return j.address.Match_addr; } if (location.host.endsWith('vrbo.com')) { if (location.pathname.startsWith("/search")) { console.log("adding crime map"); let lastUrl; const iframe = document.createElement("iframe"); pageWindow.iframee = iframe; iframe.src = "https://crimegrade.org/violent-crime-conroe-tx/?fullscreen=true&removeLayers=true&noChurches=true"; iframe.style = `display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.5; pointer-events: none;`; let mapEl = document.querySelector('[data-stid="map"]'); let i = setInterval(() => { if (!!mapEl) { clearInterval(i); mapEl.insertAdjacentElement("afterEnd", iframe); mapEl.parentElement.style.position = "relative"; } else { mapEl = document.querySelector('[data-stid="map"]'); } }, 500); let oldPushState = history.pushState; history.pushState = function pushState() { let ret = oldPushState.apply(this, arguments); pageWindow.dispatchEvent(new Event('pushstate')); pageWindow.dispatchEvent(new Event('locationchange')); return ret; }; let oldReplaceState = history.replaceState; history.replaceState = function replaceState() { let ret = oldReplaceState.apply(this, arguments); pageWindow.dispatchEvent(new Event('replacestate')); pageWindow.dispatchEvent(new Event('locationchange')); return ret; }; pageWindow.addEventListener('popstate', () => { pageWindow.dispatchEvent(new Event('locationchange')); }); //&mapBounds=27.05782%2C-102.02289&mapBounds=34.95454%2C-95.32262 pageWindow.addEventListener('locationchange', function () { const p = new URLSearchParams(location.search); const mapBounds = p.getAll("mapBounds"); let pos = JSON.parse(`[${mapBounds[0]},${mapBounds[1]}]`); iframe.contentWindow?.postMessage({"sender": "realtor addons", "message": pos}, "*"); }); pageWindow.addEventListener("message", (event) => { if (event.data && event.data.sender == "crime map addons") { console.log("crime map said something"); if (event.data.message === "loaded") pageWindow.dispatchEvent(new Event('locationchange')); } }); } else { const woSearch = window.location.href.replace(window.location.search, ''); window.history.replaceState(null, null, woSearch); const key = Object.keys(__PLUGIN_STATE__.apollo.apolloState).filter(k => k.startsWith('PropertyInfo'))[0]; const { latitude, longitude } = __PLUGIN_STATE__.apollo.apolloState[key].summary.location.coordinates; // const ll = new URLSearchParams(__PLUGIN_STATE__.controllers.stores.staticMap.signedUrlNoPins).get("center").split(','); const addr = await getAddress(latitude, longitude); console.log(addr); const p = document.createElement("a"); p.target = "_blank"; p.href = `https://www.google.com/maps/search/?api=1&query=${latitude},${longitude}`; p.style = "position: relative;background: #ffffffd1;z-index: 999;"; p.innerText = addr; [...document.querySelectorAll("img")].filter(i => i.src.startsWith("https://maps.googleapis.com"))[0].insertAdjacentElement("afterEnd", p); } } if (location.host.endsWith('airbnb.com')) { if (location.pathname.startsWith("/rooms/")) { const woSearch = window.location.href.replace(window.location.search, ''); window.history.replaceState(null, null, woSearch); setTimeout(() => window.history.replaceState(null, null, woSearch), 1000); } if (location.pathname.startsWith("/s/")) { let lastUrl; const iframe = document.createElement("iframe"); pageWindow.iframee = iframe; iframe.src = "https://crimegrade.org/violent-crime-conroe-tx/?fullscreen=true&removeLayers=true&noChurches=true"; iframe.style = `display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.5; pointer-events: none;`; let mapEl = document.querySelector('div[data-testid="map/GoogleMap"]'); let i = setInterval(() => { if (!!mapEl) { clearInterval(i); mapEl.insertAdjacentElement("afterEnd", iframe); } else { mapEl = document.querySelector('div[data-testid="map/GoogleMap"]'); } }, 500); let oldPushState = history.pushState; history.pushState = function pushState() { let ret = oldPushState.apply(this, arguments); pageWindow.dispatchEvent(new Event('pushstate')); pageWindow.dispatchEvent(new Event('locationchange')); return ret; }; let oldReplaceState = history.replaceState; history.replaceState = function replaceState() { let ret = oldReplaceState.apply(this, arguments); pageWindow.dispatchEvent(new Event('replacestate')); pageWindow.dispatchEvent(new Event('locationchange')); return ret; }; pageWindow.addEventListener('popstate', () => { pageWindow.dispatchEvent(new Event('locationchange')); }); //&ne_lat=33.90016382905531&ne_lng=-94.76663261971368&sw_lat=28.394655850300225&sw_lng=-100.3890784048296&zoom=7.295276000453701&zoom_level=7.295276000453701 pageWindow.addEventListener('locationchange', function () { const p = new URLSearchParams(location.search); let pos = JSON.parse(`[${p.get("ne_lat")},${p.get("ne_lng")},${p.get("sw_lat")},${p.get("sw_lng")}]`); iframe.contentWindow?.postMessage({"sender": "realtor addons", "message": pos}, "*"); }); pageWindow.addEventListener("message", (event) => { if (event.data && event.data.sender == "crime map addons") { console.log("crime map said something"); if (event.data.message === "loaded") pageWindow.dispatchEvent(new Event('locationchange')); } }); } } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址