Zbudowałem widżet JavaScript, który musi być umieszczony w dowolnej witrynie strony trzeciej, w dowolnym środowisku. Widżet opiera się na jQuery i jQuery UI. Postępowałem zgodnie z instrukcjami w How to embed Javascript widget that depends on jQuery into an unknown environment, aby dodać jQuery w odpowiedzialny sposób - działa świetnie na osadzanie jQuery. Ale kiedy próbuję dodać interfejs użytkownika jQuery, nie działa. Oto kod:Dlaczego interfejs jQuery nie wyświetla jQuery?
(function(window, document, version, callback) {
var j, d;
var loaded = false;
if (!(j = window.jQuery) || version > j.fn.jquery || callback(j, loaded)) {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js";
script.onload = script.onreadystatechange = function() {
if (!loaded && (!(d = this.readyState) || d == "loaded" || d == "complete")) {
callback((j = window.jQuery).noConflict(1), loaded = true);
j(script).remove();
}
};
document.documentElement.childNodes[0].appendChild(script)
}
})(window, document, "1.3.2", function($, jquery_loaded) {
$.getScript('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.js', function(){
console.log('loaded');
});
});
Gdy uruchomię to pojawia się „załadowany” mesage, a następnie błąd mówiąc, że „$ jest niezdefiniowana” na linii 15 jQuery ui.js. Ale w jaki sposób $ może być niezdefiniowane, gdy używam $ .getScript() do załadowania interfejsu użytkownika jQuery? I dlaczego widzę komunikat "załadowany" zanim otrzymam błąd? Zgodnie z dokumentacją jQuery, getScript nie powinien wykonywać wywołania zwrotnego, dopóki skrypt nie zostanie załadowany i wykonany.
Czy istnieje sposób, w jaki mogę użyć tej struktury do włączenia interfejsu jQuery, czy też muszę użyć programu ładującego skrypt, takiego jak RequireJS, aby załadować wszystko, wymusić zależności, itp.?
bah! To było to. Ładuje się ładnie w FF/Chrome/Safari. – venutip
+1 za bycie prawym :) – alex
+ za bycie Nickiem Craverem. –