首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么使用HTMLObjectElement动态生成SVG会导致跨域错误?

为什么使用HTMLObjectElement动态生成SVG会导致跨域错误?
EN

Stack Overflow用户
提问于 2017-10-25 18:15:42
回答 2查看 859关注 0票数 19

请考虑以下JavaScript代码片段:

代码语言:javascript
复制
const app = document.getElementById('root');
const svg = `<svg version="1.1" id="Layer_1"...`;
const obj = document.createElement('object');

obj.setAttribute('type', 'image/svg+xml');
obj.setAttribute('data', `data:image/svg+xml; base64,${btoa(svg)}`);

app.appendChild(obj);

setTimeout(() => {
  console.log(obj.contentDocument.querySelector('svg'));
}, 1500);

(有关完整示例,请参阅 )

运行此命令时,控制台(Google Chrome)中会显示以下错误:

HTMLObjectElement未捕获DOMException:未能从“”HTMLObjectElement“”中读取“”contentDocument“”属性:阻止具有源“"https://fiddle.jshell.net”“的帧访问跨域帧。”“在setTimeout (https://fiddle.jshell.net/_display:77:19)

考虑到这一点;

  1. 当尝试访问完全动态创建的、没有外部资源的对象的contentDocument时,这为什么被认为是跨域请求?
  2. 有没有办法以这种方式动态生成SVG,而不会触犯浏览器的跨域策略?
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46929730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档