Google Maps Coordinates Grabber

Once in Google Maps, click on the map (Do not click on markers) a popup should show at the bottom with the place and the coordinates displayed in the last line. If everything works as expected you should see a line of text on top of the map with the confirmation of the coordinates been copied to clipboard.

目前為 2021-08-21 提交的版本,檢視 最新版本

// ==UserScript==
// @name            Google Maps Coordinates Grabber
// @version         0.3.0
// @namespace       https://greasyfork.org/en/users/250979-mrmike
// @author          MrMike
// @description     Once in Google Maps, click on the map (Do not click on markers) a popup should show at the bottom with the place and the coordinates displayed in the last line. If everything works as expected you should see a line of text on top of the map with the confirmation of the coordinates been copied to clipboard.
// @grant           none
// @include         http*://*google*/maps/*
// @run-at          document-end
// ==/UserScript==

// Leave empty to get just the values separated by a comma
// Example: `"lat": {{lat}}, "lng": {{lng}}`
const FORMAT = ``;

let theCopiedCoords;
let theCoords;
let theLatLng;
let theLat;
let theLng;
let tempCard;

//Look for card every X time
setInterval(() => {
  //Get the card
  let theCard = document.getElementById("reveal-card");
  //Is the card not null?
  if (theCard != null) {
      let theDialog = theCard.querySelector("div[role='dialog']");
      if (theDialog != null) {
          theCoords = theDialog.lastElementChild.innerText;
          theLatLng = theCoords.replace(" ", "").split(",");

          if (theLatLng.length == 2 && theCopiedCoords != theCoords) {
              theLat = theLatLng[0];
              theLng = theLatLng[1];
              if (!isNaN(theLat) && !isNaN(theLng)) {
                  //Copy this data to clipboard
                  if(FORMAT != ""){
                      let out = FORMAT;
                      copyTextToClipboard(out.replace("{{lat}}", theLat).replace("{{lng}}", theLng));
                      theCopiedCoords = theCoords;
                  }
                  else{
                      copyTextToClipboard(theCoords);
                      theCopiedCoords = theCoords;
                  }
              }
          }
      }
  }
}, 1000);

function doDisplay(theData) {
	let theInput = document.getElementById("omnibox");
	let inBold = document.createElement("div");

	inBold.innerHTML = "<b style='font-size:20px'>Copied " + theData + "</b>";
	inBold.style.backgroundColor = "#202030CC";
	inBold.style.color = "#000099";
	inBold.style.width = "100vw";
	inBold.style.textAlign = "center";

	theInput.parentNode.insertBefore(inBold, theInput.nextSibling);

	setTimeout(() => {
		inBold.style.display = "none";
	}, 5000);
}

function fallbackCopyTextToClipboard(text, element) {
    var textArea = document.createElement("textarea");
    textArea.value = text;
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();
    try {
      var successful = document.execCommand('copy');
      if (successful) {
        doDisplay(text);
      }
    } catch (err) {
    }
    document.body.removeChild(textArea);
}

function copyTextToClipboard(text, element) {
    if (!navigator.clipboard) {
      fallbackCopyTextToClipboard(text, element);
      return;
    }
    navigator.clipboard.writeText(text)
      .then(() => {
	      doDisplay(text);
	    }, (err) => {});
}