У меня есть расширение chrome, которое обращается к локальному серверу и вызывает различные API. Адрес этого сервера зависит от установленного экземпляра и не может быть предсказан заранее. Чтобы справиться с этим, я добавил разрешение "permissions": ["*://*/*"]
Это сработало. Однако одна пользовательская организация отклонила расширение из-за чрезмерных разрешений. Так что к следующей версии нужно обратиться. У меня есть рабочая версия, которая добавляет разрешение программно для хоста. У меня есть форма, которая запрашивает хост локального сервера, а затем добавляет этот сервер и связанный с ним повар ie, как это.
chrome.permissions.request(
{
origins: [url],
},
function (granted) {
if (granted) {
// The permissions have been granted.
console.log("granted");
chrome.cookies.get({ url: url, name: "CLM-CSRF-TOKEN" }, function (
Опять это работает. У меня сейчас проблема в том, что когда я звоню в ранее работающий APIS, я получаю сообщение об ошибке.
Access to XMLHttpRequest at ‘http://localhost/rest/integration/endpoint’ from origin ‘chrome-extension://xxxxxxxxx’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
Каков правильный шаблон для динамического добавления нового разрешения сервера? и какой CSP требуется для этого?
Пояснения 1) см. Предоставлено в консоли разработчика, поэтому доступ предоставлен. 2) Я успешно вернул повара ie с сервера. (Похоже, я могу получить его только при обратном вызове.)
3) XHR вызывается из фонового скрипта. 4) Вот соответствующий раздел из манифеста. json
"manifest_version": 2,
"content_security_policy": "default-src 'none'; script-src 'self'; object-src 'none'; connect-src *; style-src 'self' data: 'unsafe-inline'; form-action 'none'; frame-ancestors 'none'; frame-src 'none'; sandbox allow-same-origin allow-scripts; ",
"optional_permissions": ["*://*/*"],
"permissions": [
"activeTab",
5) Вот вызов xhr в сценарии backgronud
let response = await axios(url, {
method: "post",
data: artifact,
withCredentials: true,
xsrfCookieName: xsrfCookieName,
xsrfHeaderName: xsrfHeaderName,
auth: {
username: settings.username,
password: settings.password,
},
headers: {
[xsrfHeaderName]: valueCSRF,
},