Итак, оказывается, что реализация по умолчанию функции $.getScript()
работает по-разному в зависимости от того, находится ли файл сценария, на который ссылается, в том же домене или нет. Внешние ссылки, такие как:
$.getScript("http://www.someothersite.com/script.js")
заставит JQuery создать внешнюю ссылку сценарий, который может быть отлажена без проблем.
<script type="text/javascript" src="http://www.someothersite.com/script.js"></script>
Однако, если вы ссылаетесь на локальный файл сценария, например, как любое из следующих действий:
$.getScript("http://www.mysite.com/script.js")
$.getScript("script.js")
$.getScript("/Scripts/script.js");
затем JQuery будет загружать содержимое сценария асинхронно и добавьте его в качестве содержимого инлайн:
<script type="text/javascript">{your script here}</script>
Этот последний подход не работает с любым отладчиком, который я тестировал (Visual Studio.net, Firebug, IE8 Debugger).
Обходным путем является переопределение функции $.getScript()
, так что она всегда создает внешнюю ссылку, а не встроенный контент. Вот сценарий для этого. Я испытал это в Firefox, Opera, Safari и IE 8.
<script type="text/javascript">
// Replace the normal jQuery getScript function with one that supports
// debugging and which references the script files as external resources
// rather than inline.
jQuery.extend({
getScript: function(url, callback) {
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = url;
// Handle Script loading
{
var done = false;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function(){
if (!done && (!this.readyState ||
this.readyState == "loaded" || this.readyState == "complete")) {
done = true;
if (callback)
callback();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
}
};
}
head.appendChild(script);
// We handle everything using the script element injection
return undefined;
},
});
</script>
Для тех, кто приезжают сюда из Google, принятый ответ на этот вопрос помог мне отладки динамически загружаемых скриптов в Chrome: https://stackoverflow.com/questions/9092125/how-to-debug-dynamically-loaded- javascriptwith-jquery-in-the-browsers-debugge –