3

我正在使用 JavaScript、HTML、CSS 制作谷歌浏览器扩展。为此,我需要读取用户提供的地址的经度和纬度。在测试我的扩展时,我一直在错误以下

错误

这是我的js代码

result: {
            data: function (from, to, hrs, mins) {
                fromaddress     = from;
                toaddress   = to;
                hours       = hrs;
                minutes     = mins;

                View.result.readLatLng();
            },

            readLatLng: function () {
                //var addressone = document.getElementById("addressone").value;
                geocoder    = new google.maps.Geocoder();
                geocoder.geocode( { 'address': fromaddress}, function(results, status) {
                  if (status == google.maps.GeocoderStatus.OK) {
                    var latitude = results[0].geometry.location.latitude;
                    var longitude = results[0].geometry.location.longitude;
                    console.log('lat: ' + latitude + ', lng: ' + longitude);
                  } else {
                    alert("Geocode was not successful for the following reason: " + status);
                  }
                });
            }
        }

这是我的 manifest.json 文件

{
  "name": "Name",
  "version": "1.0",
  "manifest_version": 2,
  "background": { 
    "scripts": [
      "js/result.js",
      "js/script.js"
    ] 
  },
  "description": "Desc",
  "browser_action": {
    "default_icon": "images/icon.png",
    "default_title": "Title",
    "default_popup": "html/popup.html"
  },
  "permissions": [ 
    "http://*/",
    "https://maps.google.com/*",
    "https://maps.googleapis.com/*",
    "http://localhost/*",
    "geolocation"
  ],
  "content_security_policy": "script-src 'self' https://maps.googleapis.com https://maps.gstatic.com; object-src 'self'"
}

请帮助我如何解决这个问题?

4

3 回答 3

1

Google Maps API 加载器使用 document.write() 显然 Chrome 扩展中不允许这样做。见这里

我在我的 Google Chrome 扩展程序中使用了你的地图。现在我尝试切换到 Chrome Extension manifest.v2,发现需要使用 Content Security Policy。但是您的代码包含“eval”函数使用和 document.write 来加载脚本,因此您的地图无法初始化。

于 2012-11-06T07:17:59.260 回答
1

这是Marcelo 答案的附录,因为我还不能发表评论,我的编辑被拒绝了。

"content_security_policy"您可以通过添加属性来更改清单文件中的键来规避该问题,'unsafe-eval'例如

"content_security_policy": "script-src 'self' 'unsafe-eval' https://; object-src 'self'"

Chrome 扩展内容安全政策探讨

正如对 Marcelo 的回答的评论中所提到的,Google Maps API 源代码中的 Streetview 代码使用了 document.write(),这是一个类似 eval 的构造。Eval 本质上是不安全的,因此希望 Google 能够通过他们的 Maps API 源代码解决这个问题。

我不确定如果有的话,这可能会如何影响向 Chrome 商店提交扩展程序。但是,我已经在本地解包扩展中成功使用了 Google Maps API。

于 2012-12-26T02:50:58.417 回答
0

在构建 Web 应用程序时,我也遇到了 Google Geocoding API 的问题。我可以立即看到您的代码的一个潜在问题涉及如何获得 lat 和 lng。

试试这个:

var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
于 2012-11-06T06:25:17.197 回答