Подтвердить что ты не робот

Расширение Chrome "Отказано для оценки строки как JavaScript, потому что" небезопасно-eval "

У меня есть ошибка:

Отказаться от выполнения встроенного script, поскольку он нарушает следующую безопасность содержимого Директива политики: "script-src 'self' chrome-extension-resource:". Либо ключевое слово 'unsafe-inline', либо hash ('sha256-...'), или unce ('nonce-...') требуется для включения встроенное выполнение.

хром-расширение://ldbpohccneabbobcklhiakmbhoblcpof/popup.html: 1

Отказался от оценки строки как JavaScript, потому что 'unsafe-eval'не разрешенный источник script в следующем Content Security Директива политики: "script-src 'self' chrome-extension-resource:".

код popup.js

$(document).ready(function() {
     $.getJSON('http://.......alerts.json', function(data) {
        alert('HELLO');
      });
});

манифеста:

{
  "manifest_version": 2,

  "name": "Alert",
  "description": "This extension for  .",
  "version": "2.0",
  "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
  "permissions": [
    "http://www.......il/"
  ],
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "content_scripts": [ {
    "js": [ "jquery.min.js", "popup.js" ],
    "matches": [ "http://*/*", "https://*/*"]
  }]
}

Popup:

<!doctype html>
<html>
  <head>
    <title>Getting Started Extension Popup</title>
    <style>
      body {
        min-width: 357px;
        overflow-x: hidden;
      }

      img {
        margin: 5px;
        border: 2px solid black;
        vertical-align: middle;
        width: 75px;
        height: 75px;
      }
    </style>
     <head>
     <script src='jquery.min.js'></script>
     <script src='popup.js'></script>
</head>
  </head>
  <body>
  </body>
</html>
4b9b3361

Ответ 1

У меня появилось это сообщение, потому что Chrome больше не разрешает встроенные скрипты и обработчик встроенных событий (например, onClick): их нужно переместить во внешний JS файл (например, popup.js), а addEventListener() должен использоваться для ассоциировать события с объектами DOM.

Например:

<body onload="initialize()">
<button onclick="handleClick()" id="button1">

необходимо заменить на:

window.addEventListener("load", initialize);
document.getElementById("button1").addEventListener("click",handleClick);

В вашем случае я не вижу JS в HTML, но есть несколько вещей, которые вы могли бы попробовать:

  • move popup.js включает непосредственно перед.
  • исправить html (double head).
  • удалить раздел content_scripts из манифеста. Предполагается, что сценарии содержания должны выполняться против содержимого страницы, это не файл JS, включенный в всплывающее окно страницы или браузера. Раздел действия браузера должен быть достаточным.

См. Расшифровка расширений расширения V2

Ответ 2

У меня была очень похожая проблема. Я не использовал никаких встроенных скриптов или Inline Event Handlers, но все еще получал эту ошибку. Оказывается, jQuery внутренне пытается оценить ответ таких запросов, который не разрешен в расширениях Chrome. В моем случае я использовал $.ajax() с dataType: 'json'. Я решил проблему, изменив dataType на text, а затем вручную разобрав JSON с помощью JSON.parse().

Также уместно упомянуть, что большинство API jQuery пытаются выполнить скрипты, включенные в данную строку html, при разборе, что вызывает подобные ошибки при использовании в расширении Chrome. В таких случаях требуется явное экранирование скриптов в ответах. Вот цитата из документации jQuery parseHTML():

Большинство jQuery API, которые принимают строки HTML, будут запускать скрипты, которые включены в HTML. jQuery.parseHTML не запускает скрипты в анализируемом HTML, если keepScripts явно не верен. Тем не менее, по-прежнему возможно в большинстве сред выполнять сценарии косвенно, например, через атрибут. Вызывающий должен знать об этом и защищаться от него, очищая или избегая любых ненадежных входов из таких источников, как URL-адрес или файлы cookie. Для будущей совместимости вызывающие абоненты не должны зависеть от возможности запуска любого содержимого script, если keepScripts не указано или false.

Обратите внимание, что эти проблемы вызывают проблемы при использовании в Chrome Extension из-за ограничения Chrome о встроенной script оценке. В целом они могут не соответствовать действительности.