Javascript ajax没有';t执行或接收外部脚本

Javascript ajax没有';t执行或接收外部脚本,javascript,jquery,html,ajax,content-security-policy,Javascript,Jquery,Html,Ajax,Content Security Policy,这是我上一篇文章的后续文章 .htaccess中的指令: Header always set Content-Security-Policy "default-src 'none'; base-uri 'self'; style-src 'self'; font-src 'self'; img-src 'self'; script-src 'self' 'nonce-22os9h3sdfa'; connect-src 'self'; object-src 'self'; media-src 's

这是我上一篇文章的后续文章

.htaccess中的指令:

Header always set Content-Security-Policy "default-src 'none'; base-uri 'self'; style-src 'self'; font-src 'self'; img-src 'self'; script-src 'self' 'nonce-22os9h3sdfa'; connect-src 'self'; object-src 'self'; media-src 'self'; child-src 'none'; report-uri https://mydomain.info/csp-reporting.php"
CSP日志->我的域中的report.txt文件: 从链接中删除/csp/report_2017-02-07.txt,然后获得指向我自己网站的链接

我尝试通过ajax get metod加载外部脚本:

$.ajax({
        type: 'GET',
        dataType: 'script',
         headers: {
            Accept : 'text/javascript; charset=utf-8',
            'Content-Type': 'text/javascript; charset=utf-8'
        },
        url: 'https://mydomain.info/js/library.js',/*I change url for fake on public share. My correct url is in above link*/
        /*data: { nonce: '22os9h3sdfa' }, - use attrs solution from: https://github.com/jquery/jquery/issues/3028*/
        attrs: { nonce: '22os9h3sdfa' },
        cache : true,
        jsonp: false,
        async: true,
        success: function() { console.log('xhr was send'); },
        error: function (XMLHttpRequest, status, errorThrown) {
            if (status == 'Unauthorized') { console.log(' === Error: ' + errorThrown + ' === '); }
            else { console.log(' === Error: ' + errorThrown + ' === '); }
        },
        complete: function (jqXHR, textStatus) {
            console.log(textStatus);
            console.log(jqXHR.status);
            console.log(jqXHR.responseText);
        }
    })
我花了很多时间查找错误&是什么阻止了脚本的执行。。
需要帮助,请..

您这里似乎有不同的东西会导致错误:

  • 首先,出现的第一批CSP错误来自声明为“inline”的样式(直接在html标记中使用属性
    style=
    )。要允许这样做,您必须这样声明:

    样式src'self''不安全内联'


  • 按照相同的方案,CSP也将禁止所有内联javascript,这些javascript可能不是来自您,但可以在库中(从未声明nonce作为源,但我相信您的话,现在没有时间搜索):

    脚本src“self”不安全内联“nonce-22os9h3sdfa”

  • 您似乎加载了外部映像,但它没有在CSP中声明,请尝试添加它们(您可以对路径进行更严格的限制,此处的*允许您访问指定域的所有子域):

    img src'self''https://*.amazonaws.com'

  • 最后,您的主要问题似乎是加载资源本身,可能是它们的顺序或其他,但加载顺序不稳定。大多数情况下,它实际上会加载lib文件,但其余时间我有一个jquery未定义错误(ReferenceError:$未定义)。加载库时,调用元素时未定义元素(jQuery.Deferred exception:Swiper未定义@index.js:380:4)。也许您可以尝试将jQuery包含移动到
    标题
    ,或者像这样声明无冲突(我以前从未见过这样做,不知道是否合法):


希望有帮助

Ad4。好的,我删除'jQuery.noConflict();'并且仍然有效:)'jQuery.noConflict();'仅用于工作jquery代码。AD1。是的,我在风格上有一些错误,但这并没有停止脚本。Ad2。当我有“nonce-22os9h3sdfa”时,我不能使用“unsafe-inline”,错误:“内容安全策略:忽略脚本src或样式src中的“unsafe-inline”:指定为“nonce-source”或“hash-source”Ad3。好主意!:)所以你的解决方案在Ad2。不工作:(从未在CSP中将nonce声明为源代码,因此我在这里无法提供真正的帮助,但如果您找不到方法,您仍然可以尝试删除内联JS,这样您就可以不使用“不安全的内联”(这是一个好主意),希望它不在神秘的库中..祝您好运;)我发现nounce可以用作源的信息:CSP级别2通过允许您使用加密nonce(使用一次的数字)或散列来白名单特定的内联脚本,为内联脚本提供了向后兼容性。虽然这在实践中可能会很麻烦,但在必要的时候它是有用的。(..)我只从发送头之后的请求中获取字符串,所以我应该使用pharser来执行脚本。我在其他解决方案上更改代码。我不建议将上述代码用于CSP。当CSP级别3稳定后,“使用严格的动态”将正常工作。
$(document).ready(function(){
    var $ = jQuery.noConflict();
    //the call of jQuery.noConflict(); makes the global $ var undefined, and returns the jQuery instance