使用内容安全政策时,我尝试使用window.URL.createObjectURL关注Chrome 41(测试版)中的流程,我收到如下错误:
拒绝从'blob:http%3A // localhost%3A7000 / f59612b8-c760-43a4-98cd-fe2a44648393'加载插件数据,因为它违反了以下内容安全策略指令:“object-src blob:// * “
使用限制object-src
或其他default-src
的内容安全策略可以重现问题(为方便起见使用jQuery),如下所示:
blob = new Blob(
["%PDF-1.\ntrailer<</Root<</Pages<</Kids[<</MediaBox[0 0 3 3]>>]>>>>>>"],
{ type: "application/pdf" })
$("<embed>").attr("src", window.URL.createObjectURL(blob))
.appendTo(document.body)
似乎来自the spec that this should work,就像data://*
一样。我也尝试了blob
,blob:
,blob:*
,blob:http*
,blob:http:*
,blob:http://*
,但无济于事。
什么工作,但由于明显的原因是不可取的,是object-src *
。
是否有人在使用内容安全策略加载blob方面取得了成功?这是上游的问题,还是我忽略了什么?
答案 0 :(得分:37)
符合规范的答案为String output = "";
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("[P]ast or [F]uture?");
String input = scan.nextLine().toLowerCase();
if (input.equals("p") || input.equals("f")){
output = input;
break;
} else {
System.out.println("Please provide a valid answer.");
}
}
object-src 'self' blob:
应该只明确匹配blob:
,而不是blob:
或'self'
。这是Chrome中的错误,最近已在Firefox 40修复。
答案 1 :(得分:6)
对于Chrome 47.0.2526.73:
default-src * blob:;
为我工作