SVG正在等待文档在javascript中准备就绪
SVG waiting for document to be ready in javascript
我有一个svg,需要在客户端上工作。一切都很好,但有时svgDoc变量的文档还没有准备好。
这个文件是3MB——我们需要处理它,但它是从一个次级供应商(从CAD系统导出)提供的,所以我不能依赖它来获得更多方便。
我知道如何等待svg本身的加载。
我得到这个错误:Uncaught TypeError:无法调用null 的方法"getElementsByTagName"
我有这个代码:
Html:
<object id="svg2" width="2000" type="image/svg+xml" data="test.svg" onload="afterSvgLoaded()"></object>
javascript:
var svgDoc;
function afterSvgLoaded(){
var svg = document.getElementById("svg2");
svgDoc = svg.contentDocument;
//Does not work
console.log(svgDoc.getElementById('Lejemaalsnummer').getElementsByTagName('circle'));
//Does work - but I do not want to depend on timeouts
setTimeout("console.log(svgDoc.getElementById('Lejemaalsnummer').getElementsByTagName('circle'))",1000);
}
如何测试svgDoc的就绪性?
当SVG加载时,可以挂接一个onload事件
<object id="svg2" onload="afterSvgLoaded()" width="2000" type="image/svg+xml" data="localFile.svg"></object>
您也可以使用<div>
而不是<object>
,用xmlHttpRequest()
加载SVG,并在调用onload
回调时执行需要执行的操作。也许是这样的:
var xhr = new XMLHttpRequest();
xhr.open("GET", "test.svg", true);
// Just for safety; not needed if the SVG is served with the correct MIME type:
xmlHttpRequest.overrideMimeType("image/svg+ xml");
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
var svgDoc = xhr.responseXML;
console.log(svgDoc.getElementById('Lejemaalsnummer').getElementsByTagName('circle'));
} else {
console.error(xhr.statusText);
}
}
};
xhr.onerror = function (e) {
console.error(xhr.statusText);
};
xhr.send(null);
(这基本上是一个修改过的MDN样本。)
相关文章:
- 当组件准备就绪时,如何在Polymer中动态注册新属性
- IIFE jquery已准备就绪
- 准备就绪时的随机背景
- Javascript/Css导航未显示在jquery文档上,仅在ie中准备就绪
- 在页面上加载高级jQuery版本准备就绪
- 修改 DOM 后如何确保 DOM 再次准备就绪
- 可以't将属性src设置为null,即使DOM已准备就绪
- 当文档准备就绪时,将数据从一个文本框复制到另一个
- 为javascript准备正则表达式
- 电话间隙设备准备就绪,5秒钟后未启动
- AngularJS文档准备就绪,无法正常工作
- SVG正在等待文档在javascript中准备就绪
- 在文档准备就绪之前,Javascript onload 事件和其他事件
- 在 jQuery .load() 内容完全准备就绪后执行 javascript 函数
- 通过jquery/Javascript大量添加新元素后,DOM是否立即准备就绪
- 如何使用JavaScript检查DOM是否准备就绪
- 等待executeQueryAsync准备就绪的JavaScript函数
- 在文档准备就绪之前执行内联/块Javascript
- AjaxControlToolkit TabContainer准备就绪时的Javascript
- 如何在页面准备就绪之前通过javascript加载外部字体