拒绝运行JavaScript URL,因为它违反了以下内容安全策略指令
我试图在Linkedin页面的chrome控制台中运行js脚本。 脚本需要获取一个数组并下载该数组的.csv文件。 当我在google.com或任何其他网站上运行它时,它运行良好。但当我在Linkedin上运行它时,我得到了一个错误: 拒绝运行JavaScript URL,因为它违反了以下内容安全策略指令:拒绝运行JavaScript URL,因为它违反了以下内容安全策略指令,javascript,jquery,linkedin,Javascript,Jquery,Linkedin,我试图在Linkedin页面的chrome控制台中运行js脚本。 脚本需要获取一个数组并下载该数组的.csv文件。 当我在google.com或任何其他网站上运行它时,它运行良好。但当我在Linkedin上运行它时,我得到了一个错误: 拒绝运行JavaScript URL,因为它违反了以下内容安全策略指令: “脚本src”报告示例“”sha256-6GLJSWP3GRKZCUFWRX5AGHTECD1WVRGJOJP7R0ZQJV0=''不安全内联'static.licdn.com s.c.ln
“脚本src”报告示例“”sha256-6GLJSWP3GRKZCUFWRX5AGHTECD1WVRGJOJP7R0ZQJV0=''不安全内联'static.licdn.com s.c.lnkd.licdn.com static-fstl.licdn.com static-src.linkedin.com
https://www.linkedin.com/voyager/service-worker-push.js
https://platform.linkedin.com/js/analytics.js static-exp1.licdn.com static-exp2.licdn.com s.c.exp1.licdn.com s.c.exp2.licdn.com static-lcdn.licdn.com s.c.lcdn.licdn.comhttps://www.linkedin.com/sc/ https://www.linkedin.com/scds/ https://qprod.www.linkedin.com/sc/ https://www.linkedin.com/sw.js https://www.linkedin.com/voyager/abp-detection.js https://platform.linkedin.com/litms/utag/https://platform.linkedin.com/litms/vendor/“
请注意,如果源列表中存在哈希值或nonce值,则将忽略
“unsafe-inline”
这就是我试图运行的代码:
rowsso=[[“#:”、“姓名:”、“标题:”]、[“5”、“你好”、“5”];
让csvContentss=“data:text/csv;charset=utf-8,”;
rowsso.forEach(函数(rowArray){
让row=rowArray.join(“,”);
csvContentss+=行+“\r\n”;
});
var encodedUri=encodeURI(csvContentss);
var link=document.createElement(“a”);
link.setAttribute(“href”,encodedUri);
setAttribute(“下载”、“我的数据.csv”);
document.body.appendChild(链接);//FF所需
link.click();
我试图寻找类似的案例,但找不到解决方法 当您在控制台中为特定网站执行某些脚本时,您将在该网站的上下文中执行它 在linkedin网站上,可能有一些标准方法的覆盖,比如appendChild的覆盖,他们已经重新实现了这些方法,以进行额外的检查,以确保不会有人从外部执行未指定的脚本 此外,linkedin可能有监听DOM更改的脚本,如果您想在DOM中放置一些奇怪的内容,他们可能会阻止这样做 更新: 我发现执行这些命令有问题
link.click()
在linkedin页面上,所以它们以某种方式阻止以编程方式在csv格式的链接元素上使用click
更新:
我看到linkedin使用:内容安全策略
请在此处阅读更多信息:
因此,他们可能不允许在浏览器中动态生成csv。使用不违反CSP的不同方法,通过使用以下代码解决了问题: 此函数用于接收2D数组并以适当格式返回字符串,以便稍后创建csv文件:
function arrayToCSV (twoDiArray) {
var csvRows = [];
for (var i = 0; i < twoDiArray.length; ++i) {
for (var j = 0; j < twoDiArray[i].length; ++j) {
twoDiArray[i][j] = '\"' + twoDiArray[i][j] + '\"'; // Handle elements that contain commas
}
csvRows.push(twoDiArray[i].join(','));
}
var csvString = csvRows.join('\r\n');
return csvString;
}
所以大体上,in看起来是这样的:
rowsso = [["#: ", "Name: ", "Title: "], ["5","hi", "five"]];
twoDArrStr = arrayToCSV(rowsso);
downloadString(twoDArrStr, "csv" , "csvFile.csv");
但是,如果有人能更好地向我解释为什么这个方法有效而另一个不行,我会很高兴的 你知道我怎样才能克服它吗?我可以将.csv作为字符串的txt文件下载,但当我厌倦了将数据下载到.csv时,问题就开始了。我认为在linkedin页面上,csv可能会受到某种限制,下载不同的格式可能是唯一的方法……Linkedin已经实现了:我认为浏览器中动态生成csv被阻止了……我不认为这与文件类型有关,因为当我将其更改为任何类型时,相同的错误仍然存在。此外,我还尝试使用其他方法实现代码,使用window.open(link)而不定义任何文件类型,但错误保持不变。
rowsso = [["#: ", "Name: ", "Title: "], ["5","hi", "five"]];
twoDArrStr = arrayToCSV(rowsso);
downloadString(twoDArrStr, "csv" , "csvFile.csv");