gpt4 book ai didi

javascript - 如何修复 chrome 扩展程序中的 'Chrome Content Security Policy Directive'

转载 作者:行者123 更新时间:2023-11-29 23:06:42 24 4
gpt4 key购买 nike

我正在制作一个 chrome 扩展,它通过使用 JQuery 的 ajax 调用访问维基百科的 API。我在扩展程序的本地 js 文件夹中包含了一份 JQuery。在弹出窗口中,我有一个输入,我采用该值并在 popup.js 中执行获取请求,我得到一个“拒绝加载脚本,因为它违反了以下内容安全策略指令:”script-src 'self' blob : filesystem: chrome-extension-resource:"。请注意,未明确设置“script-src-elem”,因此“script-src”用作后备。”

我有WebRequest and <all_urls>manifest.json 中设置权限文件。这是我的权限在 list 中的样子:

"permissions": [
"tabs",
"webNavigation",
"webRequest",
"<all_urls>",
"https://en.wikipedia.org/*"
],

我看到添加一个 "content_security_policy": "script-src-elem 'self' https://www.wikipedia.org/"会让它更容易,但这并没有解决问题。

$('#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);
}


})

})

我希望它会成功并且数据会在控制台中显示出来,但它不会抛出此错误:

拒绝加载脚本'https://en.wikipedia.org/w/api.php?action=opensearch&format=json&maxlag=5&search=dfa&callback=jQuery33108394586597996985_1549655186216&_=1549655186217 ' 因为它违反了以下内容安全策略指令:“script-src 'self' blob: filesystem: chrome-extension-resource:”。请注意,“script-src-elem”未明确设置,因此“script-src”用作后备。

发送@jquery.js:2"

最佳答案

维基百科的 callback=?参数是一个古老的 hack 加载 dataType: 'json'作为脚本,在扩展中默认 CSP 是禁止的。虽然许多现有答案建议放宽默认扩展 CSP,但这显然是一个糟糕的解决方案,因为它会向各种远程攻击(如 MitM)开放扩展。

只需删除 &callback=?参数,以便维基百科默认返回有效的 JSON。

无需像 header 或 crossDomain: true 这样的 CORS 相关调整, 无需修改 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:

  • "permissions": ["https://*.wikipedia.org/"]
  • "permissions": ["<all_urls>"]

关于javascript - 如何修复 chrome 扩展程序中的 'Chrome Content Security Policy Directive',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54599294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com