Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复';Chrome内容安全策略指令';在铬延伸_Javascript_Jquery_Ajax_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 如何修复';Chrome内容安全策略指令';在铬延伸

Javascript 如何修复';Chrome内容安全策略指令';在铬延伸,javascript,jquery,ajax,google-chrome,google-chrome-extension,Javascript,Jquery,Ajax,Google Chrome,Google Chrome Extension,我正在制作一个chrome扩展,通过使用JQuery的ajax调用访问Wikipedia的API。我在扩展的本地js文件夹中包含了一份JQuery。在弹出窗口中,我有一个输入,我接受该值并在popup.js中执行一个get请求,我得到一个“拒绝加载脚本,因为它违反了以下内容安全策略指令:”script src'self'blob:filesystem:chrome extension resource:。请注意,未显式设置“script src elem”,因此将“script src”用作回退

我正在制作一个chrome扩展,通过使用JQuery的ajax调用访问Wikipedia的API。我在扩展的本地js文件夹中包含了一份JQuery。在弹出窗口中,我有一个输入,我接受该值并在popup.js中执行一个get请求,我得到一个“拒绝加载脚本,因为它违反了以下内容安全策略指令:”script src'self'blob:filesystem:chrome extension resource:。请注意,未显式设置“script src elem”,因此将“script src”用作回退

我有
WebRequest和',因为它违反了以下内容安全策略指令:“script src'self'blob:filesystem:chrome extension resource:”。请注意,没有显式设置'script src elem',因此将'script src'用作回退


send@jquery.js:2“

Wikipedia的
回调=?
参数是一种古老的技巧,可以将
数据类型:“json”
作为脚本加载,在扩展中默认CSP是禁止的。虽然许多现有的答案建议放松默认的扩展CSP,但这显然是一个糟糕的解决方案,它会将扩展打开以应对各种远程攻击(如MitM)

只需删除
&callback=?
参数,以便wikipedia在默认情况下返回有效的JSON。

不需要与CORS相关的调整,如标题或
crossDomain:true
,不需要修改CSP

$.ajax({
  url: 'https://en.wikipedia.org/w/api.php?' +
       'action=opensearch&format=json&maxlag=5&search=' + encodeURIComponent(searchWord),
  success(data) {
    // ...............
    // data is an object/array, you can process it directly here
    // ...............
  },
});
manifest.json应允许URL:

  • “权限”:[“https://*.wikipedia.org/”]
  • “权限”:[“”]

如果您需要我查看,我可以用我所有的代码发布一个指向github repo的链接:只需在“权限”字段中声明站点,而不在请求中使用CORS标题。也不需要修改CSP。我已经在权限中找到了它:“权限”:[“选项卡”、“webNavigation”、“webRequest”、“*”],我从ajax调用中删除了CORS头,从manifset.json中删除了CSP。这仍然是一个错误:拒绝加载脚本“”,因为它违反了以下内容安全策略指令:“script src'self'blob:filesystem:chrome extension resource:”。请注意,未显式设置“script src elem”,因此将“script src”用作回退。。然而,当我点击链接时,它会把我带到我期望得到的地方。那么有没有办法让Chrome接受这个脚本呢?
$('#urlCopyButton').click(function search() {
    var searchWord = document.querySelector('#searchWord').value;
    console.log(searchWord);
    var results = [];


$.ajax({
          crossDomain: true,
          header: 'Access-Control-Allow-Origin',
          url:`https://en.wikipedia.org/w/api.php?action=opensearch&format=json&maxlag=5&search=${searchWord}&callback=?`,
          type: 'GET',
          dataType: 'json',
          beforeSend: function(xhr){xhr.setRequestHeader('https://en.wikipedia.org', 'https://en.wikipedia.org');},
          success: (data) => {
              $("#output").html("");
            var i =0;
            for (var i = 0; i < data[1].length; i++) {
              $("#output").append(`<li><a href= "${data[3][i]  } ">${data[1][i] + " " + data[2][i]}<a></li>`);
            }
            console.log(data);
          },
          error: (err) =>{
            console.log(err.responseJSON);
          }


      })
$.ajax({
  url: 'https://en.wikipedia.org/w/api.php?' +
       'action=opensearch&format=json&maxlag=5&search=' + encodeURIComponent(searchWord),
  success(data) {
    // ...............
    // data is an object/array, you can process it directly here
    // ...............
  },
});