9

Chrome拡張機能に小さな問題があります。

別のサーバーからJSON配列を取得したかっただけです。しかし、マニフェスト2ではそれができません。指定しようとしcontent_security_policyましたが、JSON配列がSSL証明書なしでサーバーに保存されています。

では、マニフェスト1を使用せずに何をすべきでしょうか?

4

1 に答える 1

15

CSPはあなたが説明した問題を引き起こすことはできません。プレーンJSONの代わりにJSONPを使用している可能性が非常に高いです。JSONPは、属性がWebサービスのURLに設定されている<script>タグをドキュメントに挿入することで機能するため、Chromeでは機能しません。これは、CSPでは許可されていませんsrc

マニフェストファイルに正しい権限を設定している場合(たとえば"permissions": ["http://domain/getjson*"]、JSONをいつでも取得して解析できるようになります:

var xhr = new XMLHttpRequest();
xhr.onload = function() {
    var json = xhr.responseText;                         // Response
    json = json.replace(/^[^(]*\(([\S\s]+)\);?$/, '$1'); // Turn JSONP in JSON
    json = JSON.parse(json);                             // Parse JSON
    // ... enjoy your parsed json...
};
// Example:
data = 'Example: appended to the query string..';
xhr.open('GET', 'http://domain/getjson?data=' + encodeURIComponent(data));
xhr.send();

jQuery for ajaxを使用する場合は、以下を使用してJSONPが要求されていないことを確認してjsonp: falseください。

$.ajax({url:'...',
        jsonp: false ... });

または、使用する場合$.getJSON

$.getJSON('URL which does NOT contain callback=?', ...);
于 2012-08-07T12:07:49.307 に答える