Расширение отказывается загружать сценарий из-за директивы политики безопасности содержимого

Ниже приведен мой код HTML

скрипт:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="background.js"></script>

HTML-код:

      <button name="btnlogin" id="btnlogin">Login</button><br/><br/>

и следование js

$(document).ready(function(){
document.getElementById("#btnlogin").click(function(){
   alert("s");
 });
});

файл манифеста:

{
"manifest_version": 2,
"name": "One-click Kittens",
"description": "This extension demonstrates a 'browser action' with kittens.",
 "version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
}

я обнаружил, что когда я запускаю этот код просто в браузере, чем предупреждение появляется правильно, но когда я запускаю его как расширение chrome, это дает мне следующие ошибки.

Uncaught ReferenceError: $ не определен

и

отказалась чтобы загрузить скрипт'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js 'потому что это нарушает следующую директиву политики безопасности контента:" script-src 'self' chrome-extension-resource:".

Я не понимаю, что это за ошибки. Пожалуйста, помогите мне понять расширение..

спасибо

2 ответов


в расширении Chrome внешние источники скриптов должны быть явно разрешены расширением политика безопасности контента (CSP) в вашем манифесте:

если у вас есть потребность в некоторых внешних ресурсах JavaScript или объекта, вы можете ослабить политику в ограниченной степени, белый список безопасных источников, из которых сценарии должны быть приняты...

расслабленное определение политики, которое позволяет загружать ресурсы скрипта из example.com конец HTTPS может выглядеть так:

"content_security_policy":"script-src 'self' https://example.com; object-src 'self'"

скрипты могут быть загружены только в расширение по HTTPS, поэтому вы должны загрузить ресурс jQuery CDN по HTTPS:

<script src="https://ajax.googleapis.com/..."></script>

и добавьте измененный CSP в манифест, чтобы разрешить этот ресурс HTTPS:

{
    "manifest_version": 2,
    "name": "One-click Kittens",
    "description": "This extension demonstrates a 'browser action' with kittens.",
    "version": "1.0",
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html"
    },
    "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'"
}

и еще лучшим решением для вашего конкретного случая, однако, было бы включить jQuery в ваше расширение локально, а не загружать из интернета (например, ваше расширение в настоящее время не будет работать автономный.) Просто включите копию jQuery в папку расширения и обратитесь к ней с относительным путем в теге скрипта. Предполагая, что ваша библиотека jQuery и всплывающий файл HTML находятся в одном подкаталоге, просто сделайте:

<script src="jquery-x.y.z.min.js"></script>

<script nonce='<?= CSP::getNonce() ?>'>
var oldCreate = document.__proto__.createElement;
document.__proto__.createElement = function (elementName) {      
    var el = oldCreate.apply(this, arguments);
    if (elementName == "script") {           
        el.setAttribute('nonce', '<?= CSP::getNonce() ?>');
    }
    return el;
}
</script>

<script nonce='<?= CSP::getNonce()?>' type="text/javascript" src="/include/jquery.js"></script>