Snap.load() 回调函数在 Safari 中触发得太迟
Snap.load() callback function triggered too late in Safari
问题
在我的代码中 MySymbolsObject.js - 内联报告的代码仅用于示例目的 - 设置 window.onload
事件以便 Snap.load()
svg文件并将 svg 片段节点保存在 Symbols.resources
最后一个内联 <script>
设置第二个 window.onload
事件包含使用保存在 Symbols.resources
中的 svg 节点的代码
在 Firefox 中,它可以完美地在控制台中打印节点,在 Safari 中,Symbols.resources
在控制台中打印为原始 0 值。
我检查过
在 Safari 控制台中,页面完全加载后 Symbols.resources
包含节点。
这两个 onload events
的预期执行顺序在两个浏览器中都得到遵守。
我的猜测是 Snap.load()
异步运行,因此它在不同的浏览器中具有不可预测的行为。
如何在Safari中解决?
<html>
<head>
<script type="text/javascript" src="snap.svg-min.js"></script>
<script type="text/javascript" src="MySymbolsObject.js">
setEvent( window, 'load', function(){
Snap.load( 'pathToFile.svg', function( svgFrag ){
Symbols.resources = svgFrag;
});
});
Symbols = {
resources : 0,
...
}
</script>
<script type="text/javascript">
onload = function (){
console.log( Symbols.resources )
}
</script>
</head>
<body> ... </body>
</html>
我找到了一种方法来推迟 window.onload
代码的执行,直到 Symbols.resources
准备就绪。
实际代码移至function main()
,window.onload
只是反复检查Symbols.resources
是否准备就绪,最后调用main()
。
onload = function (){
if( Symbols.resources ) main();
else setTimeout( window.onload, 10000 );
}
function main(){
console.log( Symbols.resources );
}
问题
在我的代码中 MySymbolsObject.js - 内联报告的代码仅用于示例目的 - 设置 window.onload
事件以便 Snap.load()
svg文件并将 svg 片段节点保存在 Symbols.resources
最后一个内联 <script>
设置第二个 window.onload
事件包含使用保存在 Symbols.resources
在 Firefox 中,它可以完美地在控制台中打印节点,在 Safari 中,Symbols.resources
在控制台中打印为原始 0 值。
我检查过
在 Safari 控制台中,页面完全加载后
Symbols.resources
包含节点。这两个
onload events
的预期执行顺序在两个浏览器中都得到遵守。
我的猜测是 Snap.load()
异步运行,因此它在不同的浏览器中具有不可预测的行为。
如何在Safari中解决?
<html>
<head>
<script type="text/javascript" src="snap.svg-min.js"></script>
<script type="text/javascript" src="MySymbolsObject.js">
setEvent( window, 'load', function(){
Snap.load( 'pathToFile.svg', function( svgFrag ){
Symbols.resources = svgFrag;
});
});
Symbols = {
resources : 0,
...
}
</script>
<script type="text/javascript">
onload = function (){
console.log( Symbols.resources )
}
</script>
</head>
<body> ... </body>
</html>
我找到了一种方法来推迟 window.onload
代码的执行,直到 Symbols.resources
准备就绪。
实际代码移至function main()
,window.onload
只是反复检查Symbols.resources
是否准备就绪,最后调用main()
。
onload = function (){
if( Symbols.resources ) main();
else setTimeout( window.onload, 10000 );
}
function main(){
console.log( Symbols.resources );
}