neopersia
Member
سلام
من میخوام بتونم اسکرپتهای js و css خارجی رو بعد از لود شدن صفحه به صورت اختیاری لود کنم. برای همشون یک آبجکت ایجاد کردم که توی لود کردن فایلها مشکلی نداره. فقط میخوام یک پارامتر callback هم داشته باشه که بعد از لود شدن فایل اجرا بشه. در مورد فایلهای js مشکلی نیست و توی همه مرورگرها اجرا میشه اما onload برای تگ <link> فقط توی IE اجرا میشه که جای تعجب داره (از IE بعیده مگر اینکه این رویداد برای link غیر استاندارد باشه )
در کل میخوام وقتی که این دستور فراخوانده میشه تابع کال بک رو اجرا کنه:
اینم کد کامل آبجکت و متعلقاتش هست. اگر بتونید کمک کنید ممنون میشم
من میخوام بتونم اسکرپتهای js و css خارجی رو بعد از لود شدن صفحه به صورت اختیاری لود کنم. برای همشون یک آبجکت ایجاد کردم که توی لود کردن فایلها مشکلی نداره. فقط میخوام یک پارامتر callback هم داشته باشه که بعد از لود شدن فایل اجرا بشه. در مورد فایلهای js مشکلی نیست و توی همه مرورگرها اجرا میشه اما onload برای تگ <link> فقط توی IE اجرا میشه که جای تعجب داره (از IE بعیده مگر اینکه این رویداد برای link غیر استاندارد باشه )
در کل میخوام وقتی که این دستور فراخوانده میشه تابع کال بک رو اجرا کنه:
کد:
dynamicLoad.css('/new_style.css', function() {
alert('callBack')
});
اینم کد کامل آبجکت و متعلقاتش هست. اگر بتونید کمک کنید ممنون میشم
کد:
/**
* @param mixed $needle
* @param array $haystack
* @param bool $strict
* @return bool
*/
var in_array = function($needle, $haystack, $strict) {
for(x in $haystack) {
if((!$strict && $haystack[x] == $needle) || ($strict && $haystack[x] == $needle && typeof($haystack[x]) == typeof($needle))) {
return true;
}
}
return false;
};
/**
* Load external files (scripts and styles) after loading the page
*/
var dynamicLoad = {
_loadedFiles: [],
/**
* Loads external js file
* @param string $src: path to the file
* @param function callBack: optional callback function
*/
js: function($src, callBack) {
var callCallBack = function() {
if(callBack) {
setTimeout(callBack, 1000);
}
}
if(!in_array($src, this._loadedFiles)) {
var fired = false;
var o = document.createElement('script');
o.type = 'text/javascript';
o.src = $src;
o.onload = function() {
if(!fired) {
fired = true;
callCallBack();
}
};
o.onreadystatechange = function() {
if(this.readyState == 'complete' && !fired) {
fired = true;
callCallBack();
}
};
document.getElementsByTagName('head')[0].appendChild(o);
this._loadedFiles[this._loadedFiles.length] = $src;
} else {
callCallBack();
}
},
/**
* Loads external css file
* @param string $href: path to the file
* @param function callBack: optional callback function
*/
css: function($href, callBack) {
var callCallBack = function() {
if(callBack) {
setTimeout(callBack, 1000)
}
}
if(!in_array($href, this._loadedFiles)) {
var fired = false;
var o = document.createElement('link');
o.rel = 'stylesheet';
o.type = 'text/css';
o.href = $href;
o.onload = function() {
if(!fired) {
fired = true;
callCallBack();
}
};
o.onreadystatechange = function() {
if(this.readyState == 'complete' && !fired) {
fired = true;
callCallBack();
}
};
document.getElementsByTagName('head')[0].appendChild(o);
this._loadedFiles[this._loadedFiles.length] = $href;
} else {
callCallBack();
}
}
};