正如此问题的搜索标签所述;这是普通的(valilla)JavaScript(不是jQuery);这是问题的细分:
<div>
作为innerHTML
onload
属性,其中包含一些JavaScript setInterval(...)
- (根本不起作用) 奇怪的问题:
onload
属性中的任何其他代码都可以正常工作,setInterval
&amp; setTimeout
完全被忽略了
在运行时(启动)期间,SVG代码从现有的embed
元素.getSVGDocument()
中获取(在加载后)并准备为纯HTML,只能用作模板从相同的源代码创建许多其他人。我没有使用cloneNode(true)
- 因为:间隔用于动画(连续慢和平滑旋转) - 这可能会对客户端资源产生重大影响,因此,我认为最好抓住代码并将其保存为模板 - 然后从DOM中删除原始文件。
考虑到以上所有因素,一切正常:
console.log
使用的(内联)SVG代码时,所有内容看起来都很完美window.onerror == null
)onload
属性中的JavaScript(文本)适用于以下内容:console.log(this)
- (在日志中生成SVG元素) - 但是,如上所述:setInterval()
&安培; setTimeout()
只是被忽略 - 没有任何错误,也没有任何警告。以下代码是一个非常简短的例子,(遗憾的是)它的工作原理;但是,在我的生产应用程序中它没有。
var html = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" onload="setInterval(function(){ console.log(\'testing\'); },500);">';
var temp = document.createElement('div'); temp.innerHTML = html;
var node = temp.getElementsByTagName('svg')[0];
document.body.appendChild(node);
如果你在新的js文件中测试上面的代码,它可以工作;然而,对于我的生活,我无法找到它在我的应用程序中打破的原因;如上所述,它真的非常简单。
有没有人知道是否有一些“陷阱”我不知道这件事?也许名字间距?
如果需要源代码,我可以在JSFiddle或CodePen -if上加载它,但是,它是很多代码和许多文件,可能不需要发布。
我确定它只是一些小事;比如,计时器如何根据范围进行注册,以及它如何在.bind()
中受到影响?
我真的被这个困住了,我有点需要它为工作面试留下好印象;所以如果你知道任何有用的东西,我会非常感谢你的意见。
谢谢。
答案 0 :(得分:0)
以下内容可能有助于相关场景:
定位异步源时,请确保contentDocument
或getSVGDocument()
包含您需要访问的资源。 window.onload
或DOMContentLoaded
事件与当前DOM相关,因此它可能有助于为跨浏览器解决方案构建自己的listener-&gt;触发器,因为您需要的内容可能尚未准备就绪以同步的方式。
插入非异步加载的动态内容时,不会触发onload
属性/事件,但在某些情况下可能会触发,因此,自定义:
listen-&gt;触发器将解决这个问题。
问题与上面的第二点直接相关,答案很简单:
<svg onload="this.ready = true; setTinterval(...)"
onload
事件是否被触发如下:if (!svgNode.ready){ svgNode.onload(); }
如果您的代码出现错误,但未显示错误,请确保window.onerror
null - 或者如果它有功能,请确保它不是返回true
- 否则可能会导致错误,并且您很难找出错误。
请随时改进此答案或发表评论,我会相应改进;但是,更好的答案将不胜感激。