$ .getScript () и $ (window) .load () в Safari 5 не всегда работают - PullRequest
1 голос
/ 18 мая 2011

У меня проблема, похожая на этого парня , за исключением того, что моя проблема связана со сценариями, а не изображениями.

Я использую комбинацию $.getScript() и $(window).load()динамически загружать JavaScript и использовать функции, которые загружаются после завершения загрузки скрипта.

В Chrome он работает хорошо, но Safari, похоже, всегда запускает событие onload слишком рано.Мне было интересно, есть ли какой-нибудь способ заставить Safari ждать загрузки всех скриптов аналогично блоку document.body.offsetWidth.Из того, что я понял (и из результатов, которые я увидел при тестировании), document.body.offsetWidth блокируется до тех пор, пока не будут загружены стили и изображения, но, очевидно, не скрипты.

Редактировать: Возможно, стоит упомянуть, что это иногда работает в Safari, но я не вижу шаблона.Иногда событие вызывается до того, как скрипт полностью загружен и выполнен, и обработчик, передавший $(window).load(), завершается ошибкой, потому что функции отсутствуют.

Ответы [ 3 ]

1 голос
/ 19 мая 2011

Исходя из сделанных вами комментариев, в частности, связанных с ними зависимостей, я бы использовал библиотеку типа RequireJS .Это даст вам то, что вам нужно для импорта сценариев и их зависимостей, а также ловушки для вызова функций и кода при обнаружении зависимостей.

0 голосов
/ 18 мая 2011

В этом примере я сообщаю загруженным сценариям, что мне нужно что-то сделать, чтобы сообщить о загруженной функции. После загрузки всего, что мне нужно, я запускаю любой код, который мне нужен.

// Simplified callback to check for all scrips loaded.
var numDynScriptsReady = 0,
    numDynScriptsNeeded = 4;

function dynScriptsReady()
{
    numDynScriptsReady++;

    if( numDynScriptsLoaded == numDynScriptsNeeded )
    {
        // Run functions you need after loaded....
    }
}

// Example script get
$.getScript( "http://example.com/script.js", dynScriptsReady );
// etc....
0 голосов
/ 18 мая 2011

Вы уже пробовали старый добрый документ?

$(document).ready(function() { 
  //code here 
})

У меня никогда не было проблем при его использовании.В худшем случае вы можете удалить тег сценария после всех других тегов сценария, которые содержат требуемый код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...