Skip to content

nobkd/replace-maps

Repository files navigation

Replace Maps

Light blue icon with white border. Shape is a pin for the current position on a map.

CI GitHub Workflow Status MPL-2.0 License Mozilla Add-on Version

Replace Google Maps iFrames with OpenStreetMap

'Get Firefox Add-On'-Badge

Capabilities

How it Works

This browser extension intercepts web requests from frames in a page. If the request URL matches the syntax to a Google Maps map, the response will be replaced. The search parameters of the request are decoded and converted to compatible syntax. As a result, the response is an extension page that contains a Leaflet + OSM + ArgGIS map.

You can turn the extension off for every hostname by using the browser action button or by using the settings page.

Extension Flowchart

flowchart TD

subgraph action [Browser Action]
actionclick(Action Icon) -->|add / remove| storage[(Disabled Hostnames)]
settings(Settings Page) -->|add / remove| storage
end


subgraph reqres [Request-Response Sytem]
    req([Frame Request]) --> url{Matches\nGoogle Maps\nURL?}
    url -->|no| nomatch([Continue Original Request])

    url -->|yes| match{Hostname\nDisabled?}
    storage -->|provide hostnames| match
    match -->|no| res([Redirect to extension map page])
    match -->|yes| nomatch

end

res -->|use params| params

subgraph dec [Search-Param Decoding]
    params(Search Params) -->|has q| q([readQ])
    q -->|with title| pos[Marker/s]
    params -->|has z| zoom[Zoom]

    params -->|has pb| pb([readPB])
    pb -->|has| minfo[Marker Info]
    pb -->|has| marea[Map Area]

    minfo -->|has\nsearch string| q
    minfo -->|has\n0x...:0x...| cid[CID]
    cid -.->|unknown usage| pos
    minfo -->|has\nDMS coords| dms([parseDMS])
    dms --> pos

    pb -->|has| mtype[Map Type]

    marea -->|has\ncoords| mcoords[Map Coords]
    marea -->|has\naltitude| mzoom([getMapZoom])
    mzoom --> zoom

    pos --> mdata[(Map Data)]
    mtype --> mdata
    mcoords --> mdata
    zoom --> mdata
end

mdata -->|use map data| mview([Load Leaflet Map])

Known issues

  • Sometimes the zoom level is completely wrong
  • Not working when a website does not use an iFrame / embed
  • Not working when iFrame uses only CIDs
  • No routes, just positions
  • If insufficient information is gathered, the map stays blank