2015-08-07 6 views
1

Я динамически отправляю фрагмент html в браузеры. Этот фрагмент кода содержит SVG и кусок Javascript:Запуск динамически загруженного jQuery после завершения загрузки динамически загруженного

<div class="traffic-map-wrap"> 
    <embed id="traffic-map" type="image/svg+xml" class="traffic-map" src="{traffic-map-svg}" /> 
</div> 

<script> 
    $(function() { 
    svgPanZoom('#traffic-map', { 
     zoomEnabled: true, 
     controlIconsEnabled: false, 
     minZoom: 0.1, 
     maxZoom: 10000 
    }); 
    }); 
</script> 

Функция в сниппет работает нормально, но svgPanZoom терпит неудачу, потому что в настоящее время работают до SVG полностью загружен (TypeError: e.getSVGDocument(...) is null). С другой стороны, если я ввести alert() и дать ему пару секунд, прежде чем нажимать кнопку, все работает отлично:

<script> 
    $(function() { 
    alert(); 
    svgPanZoom('#traffic-map', { 
     zoomEnabled: true, 
     controlIconsEnabled: false, 
     minZoom: 0.1, 
     maxZoom: 10000 
    }); 
    }); 
</script> 

Очевидно, что это не славное решение так , как я могу запустить динамически загруженный скрипт после того, как все был загружен? Какой-то эквивалент $(window).load(function(){...});?

ответ

2

Попытка проверки рекурсивно, если был загружен SVG ...

$(function() { 
    svgPanZoom_launcher(); 
}); 

function svgPanZoom_launcher() { 
    var svg = document.getElementById("traffic-map").getSVGDocument(); 
    if (svg == null) { 
     setTimeout("svgPanZoom_launcher()", 400); 
    } else { 
     svgPanZoom('#traffic-map', { 
      zoomEnabled: true, 
      controlIconsEnabled: false, 
      minZoom: 0.1, 
      maxZoom: 10000 
     }); 
    } 
} 
+0

Если не 'checkReady()' 'быть svgPanZoom_launcher()'? Однако это работает как шарм. Благодаря! – Juicy

+0

Извините, мой плохой! :) np! – Fest7

+0

Или вы могли бы прослушивать событие встраивания загрузки. Как в этом примере http://ariutta.github.io/svg-pan-zoom/demo/dynamic-load.html – bumbu