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 值。

我检查过

我的猜测是 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 );
}