Отказался от загрузки скрипта Chrome Extension

0

Я пытаюсь позвонить на этот сайт и получить обратно объект json. Как я могу правильно взаимодействовать с этим API в моем chrome-расширении, предоставляемом CSP?

Ошибка: отказался загрузить сценарий " http://thesaurus.altervista.org/service.php?word=smile&language=en_US&output=json&key=REMOVEDMYKEY&callback=thesaurus ", поскольку он нарушает следующую директиву политики безопасности контента: "script-src" self 'chrome-extension-resource: ".

var word = "smile";
var s = document.createElement("script");
s.src = "http://thesaurus.altervista.org/service.php?word="+ word +"&language=en_US&output=json&key=REMOVEDMYKEY&callback=thesaurus";
document.getElementsByTagName("head")[0].appendChild(s);
function thesaurus(result) { 
  output = "";
  for (key in result.response) { 
list = result.response[key].list; 
output += list.synonyms+"<br>"; 
} 
if (output) 
document.getElementById("synonyms").innerHTML = output; 
}
Теги:
google-chrome
google-chrome-extension

2 ответа

1

В указанном вами URL-адресе явно говорится, что он может вернуть объект JSON. Обратный вызов (стиль JSONP) является необязательным.

Вы не можете использовать JSONP из этого домена из-за политики безопасности содержимого Chrome для расширений. Хотя вы можете добавлять домены с белыми списками в политику, причины HTTP запрещены по соображениям безопасности.

Вместо этого вы хотите записать ответ JSON в виде строки и проанализировать его.

Вам нужно сделать XHR-вызов для этого URL-адреса:

function thesaurus(word) {
  var xhr = new XMLHttpRequest();
  xhr.onload = function() {
    try {
      var result = JSON.parse(this.responseText);
      // Do something with the result
    } catch(e) {
      // Invalid JSON response
    }
  }
  xhr.onerror = function(e) {
    // Something bad happened
  }
  xhr.open(
    "GET",
    "http://thesaurus.altervista.org/service.php?word=" + word +
      "&language=en_US&output=json&key=REMOVEDMYKEY", 
    true
  );
  xhr.send();
}

И для этого вам могут потребоваться разрешения хоста в вашем манифестах, если только этот сервер не включил CORS из любого источника (что, кстати, имело бы смысл для такого API).

  "permissions": [
    "*://thesaurus.altervista.org/*"
  ],
0

Убедитесь, что ваш скрипт объявляет требуемые разрешения, как описано здесь: https://developer.chrome.com/extensions/xhr#requesting-permission
https://developer.chrome.com/apps/app_external#external

Внутри вашего манифеста должно быть что-то вроде:

"permissions": [
  "*http://thesaurus.altervista.org/*"
],

Ещё вопросы

Сообщество Overcoder
Наверх
Меню