gpt4 book ai didi

javascript - 从 Chrome 扩展程序访问 Google Maps API

转载 作者:行者123 更新时间:2023-12-02 07:44:34 34 4
gpt4 key购买 nike

假设我想在任何网页上查找地址,然后点击每个地址,在地址下方插入一个小型 Google map 。

我遇到的问题是 GMaps 库必须通过 <script> 标签加载。但是因为通过 <script> 加载的任何内容都不在 Chrome 扩展执行上下文中,所以“google.maps”对象对我的内容脚本不可用。

有什么解决方法吗?

最佳答案

您可以做的是创建一个包含 map 查看器页面的 iframe。那么您将属于 Content Scripts 的上下文并且您可以完全访问 Chrome 的 Message Passing .

自从我创建了数百个扩展以来,我已经完成了大量的扩展,其中一些在我的 github.com/mohamedmansour 中可用。页。我将在下面展示我刚刚针对此问题所做的示例,不幸的是它可能包含错误。查看我上面的 github 页面以获得更完整的示例。

我会做什么

  1. 创建 map_viewer.html您的扩展程序中的页面。
  2. 包含在 <head> 中标记 <script src="http://maps.google.com/maps?file=api.....
  3. 使用 Chrome Message Passing在内容脚本之间传递数据。

例如

ma​​p_viewer.html

<!DOCTYPE html> 
<html>
<head>
<link type="text/css" rel="stylesheet" href="/css/map_viewer.css" />
<script type="text/javascript" src="/js/map_viewer.js"></script>
</head>
<body>
<div id="map_canvas"></div>
</body>
</html>

ma​​p_viewer.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == 'RenderMap') {
renderMap(request.data.latitude, request.data.longitude);
}
});

function renderMap(latitude, latitude) {
var map = new GMap2(document.getElementById('map_canvas'));
map.setCenter(new GLatLng(latitude, latitude), 13);
var marker = new GMarker(new GPoint(lng, lat));
map.addOverlay(marker);
}

webpage_content_script.js

...
// Unique ID to differentiate this content script from the rest of the web.
// or use the extension id from @@__extension_id__, I recall there was a bug, haven't
// checked if it got resolved though.
var UNIQUE_MAP_VIEWER_ID = 'crx_myextension_iframe';
var latitude = -1;
var longitude = -1;

/**
* Here is where you want to render a latitude and longitude. We create an iframe so we
* we can inject it. We just want to maintain a single instance of it though.
*/
function onRenderMap() {
var mapViewerDOM = document.getElementById(UNIQUE_MAP_VIEWER_ID);
if (mapViewerDOM) {
mapViewerDOM.parentNode.removeChild(mapViewerDOM);
}

mapViewerDOM = document.createElement('iframe');
mapViewerDOM.setAttribute('id', UNIQUE_MAP_VIEWER_ID);
mapViewerDOM.setAttribute('src', chrome.extension.getURL('map_viewer.html');
mapViewerDOM.setAttribute('frameBorder', '0');
mapViewerDOM.setAttribute('width', '99.90%');
mapViewerDOM.setAttribute('height', '100%');
mapViewerDOM.setAttribute('style', 'position: fixed; top: 0; left: 0; overflow: hidden; z-index: 99999');
mapViewerDOM.onload = function(e) {
sendResponse({
method: 'RenderMap',
data: {
latitude: latitude,
longitude: longitude
}
});
}
document.body.appendChild(mapViewerDOM);
}

...

我希望这会引导您朝着正确的方向前进。

谢谢,穆罕默德·曼苏尔

关于javascript - 从 Chrome 扩展程序访问 Google Maps API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7896480/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com