为什么 Chrome 将数据 URL 评级为跨源?

And*_*rde 5 javascript svg google-chrome cross-domain

我正在尝试使用父窗口中的 javascript 访问 SVG 的 DOM(通过嵌入标签和数据 url 嵌入)。然而,Chrome 将 data-url 评级为跨源。知道为什么以及如何防止这种情况吗?不幸的是,我无法控制服务器端来设置任何跨域标志或类似标志。

谢谢你,

安德烈亚斯

var c = document.getElementById("myembed");
c.onload = function() {
	var s = c.getSVGDocument();
	alert(s.tagName);
}
Run Code Online (Sandbox Code Playgroud)
<embed id="myembed" src="data:image/svg+xml;utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20width%3D%22100px%22%20height%3D%22100px%22%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20height%3D%22100%22%20width%3D%22100%22%20style%3D%22stroke%3A%23ff0000%3B%20fill%3A%20%230000ff%22%2F%3E%3C%2Fsvg%3E" type="image/svg+xml"></embed>
Run Code Online (Sandbox Code Playgroud)

sid*_*ker 5

在这种情况下,Chrome 只是符合HTML 规范中的以下要求

\n
\n

如果是从URLDocument生成的\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0A创建时指定的唯一不透明源。data:
Document

\n
\n

这是因为该embed元素在 DOM 中创建了一个 SVG 文档:

\n

由带有 data: URL 的嵌入元素创建的 DOM 中的 svg 文档

\n

如果您检查该 SVG 文档的属性,您\xe2\x80\x99 将看到它origin被序列化为nullit\xe2\x80\x99s 实际上是内部唯一的起源,但只是被序列化为null。)

\n