3

JavaScript、HTML、CSSを使用してGoogle Chrome拡張機能を作成しています。このために、ユーザーから提供された住所の経度と緯度を読み取る必要があります。拡張機能をテストしている間、エラーが発生し続けます

エラー

これが私の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 拡張機能 manifest.v2 に切り替えようとすると、コンテンツ セキュリティ ポリシーを使用する必要があることがわかりました。ただし、コードには「eval」関数の使用とスクリプトをロードするための document.write が含まれているため、マップを初期化できません。

于 2012-11-06T07:17:59.260 に答える
1

これは、まだコメントできず、編集が拒否されたため、マルセロの回答の補遺です。

次のような属性"content_security_policy"を追加してマニフェスト ファイルのキーを変更することで、この問題を回避できます。'unsafe-eval'

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

Chrome 拡張機能のコンテンツ セキュリティ ポリシーに関するディスカッション

Marcelo の回答に関するコメントで述べたように、Google Maps API ソースの Streetview コードは、eval のような構造である document.write() を使用します。Eval は本質的に安全ではないため、Google が Maps API ソース コードでこの問題に対処することを願っています。

これが Chrome ストアへの拡張機能の送信にどのように影響するかはわかりません。ただし、ローカルのアンパックされた拡張機能で Google Maps API を使用することに成功しました。

于 2012-12-26T02:50:58.417 に答える
0

私も Web アプリを作成する際に Google Geocoding API に問題がありました。私がすぐに見ることができるあなたのコードの潜在的な問題は、緯度と経度を取得する方法を扱っています。

代わりにこれを試してください:

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