تصف هذه المقالة الحل لإنشاء علامة Script غير صالحة بشكل ديناميكي في IE8. شاركه للرجوع إليه. التحليل المحدد هو كما يلي:
اليوم ، عندما كنت أعمل في المشروع ، وجدت مشكلة غريبة. لا يمكن أن تؤدي علامة البرنامج النصي التي تم إنشاؤها ديناميكيًا إلى تشغيل حدث ONLOAD ضمن IE8.
الرمز كما يلي:
انسخ الرمز كما يلي: var loadjs = function (src ، fun) {
var script = null ؛
script = document.createElement ("script") ؛
script.type = "text/javaScript" ؛
script.src = src ؛
if (typeof fun === "function") {
script.onload = متعة ؛
}
document.getElementSbyTagName ("Head") [0] .AppendChild (script) ؛
} ؛
loadjs ("js/jquery-1.11.0.min.js" ، function () {
console.log ("من jQuery") ؛
}) ؛
loadjs ("test.js" ، function () {
console.log ("من test.js") ؛
}) ؛
test.js:
console.log (typeof jQuery) ؛
نتائج التشغيل:
انسخ الرمز على النحو التالي: غير محدد // عند تشغيل test.js ، لم يتم تحميل jQuery بعد
>> typeof jQuery // تشغيل من وحدة التحكم ، ولكن وجدت كائن jQuery ، مما يثبت مشكلة ترتيب التحميل
"وظيفة"
علاوة على ذلك ، لا يتم تنفيذ script.onload في الكود أعلاه. تم تحميل الرمز ، فلماذا لا يزال لا يتم تنفيذه؟ بعد التحقق عبر الإنترنت ، وجدت أن العديد من المطورين الأماميين واجهوا هذه المشكلة الصعبة ، لذلك وجدت بعض البدائل ، على النحو التالي:
انسخ الرمز كما يلي: var loadjs = function (src ، fun) {
var script = null ؛
script = document.createElement ("script") ؛
script.type = "text/javaScript" ؛
script.src = src ؛
if (typeof fun === "function") {
script.OnReadyStateChange = function () {
var r = script.readyState ؛
console.log (src + ":" + r) ؛
if (r === 'loaded' || r === 'complete') {
script.OnReadyStateChange = null ؛
هزار()؛
}
} ؛
}
document.getElementSbyTagName ("Head") [0] .AppendChild (script) ؛
} ؛
نتائج التنفيذ:
انسخ الرمز على النحو التالي: غير محدد
JS/JQUERY-1.11.0.MIN.JS: التحميل
test.js: كاملة
من test.js
JS/JQUERY-1.11.0.MIN.JS: تم تحميله
من jQuery
خطوة التنفيذ هي ، تم العثور على وظيفة مشابهة لـ Onload ، ولكن هناك مشكلة. لم يتم تحميله بالترتيب. عند تحميل ملف jQuery ، تم الانتهاء من Test.js ، ويتم تنفيذ السطر الأول أولاً. نظرًا لأنه يتم تنفيذ Test.js قبل jQuery ، يتم إجراء غير محدد. حتى نتمكن من إعادة كتابته مثل هذا والسماح لها بالتحميل خطيًا:
نسخة الكود كما يلي: loadjs ("js/jquery-1.11.0.min.js" ، function () {
console.log ("من jQuery") ؛
loadjs ("test.js" ، function () {
console.log ("من test.js") ؛
}) ؛
}) ؛
نتائج التنفيذ:
انسخ الرمز على النحو التالي: JS/jQuery-1.11.0.min.js: التحميل
JS/JQUERY-1.11.0.MIN.JS: تم تحميله
من jQuery
وظيفة
test.js: كاملة
من test.js
هذه المرة ، يكون أمر التنفيذ بالترتيب الذي حجزناه بالضبط ، لكن الكود أعلاه يبدو محرجًا ويجب أن يكون متداخلًا طبقة ، لذلك اكتشفت طريقة الكتابة هذه مرة أخرى:
انسخ الرمز كما يلي: var loadjs = function (src ، fun) {
var script = null ؛
script = document.createElement ("script") ؛
script.type = "text/javaScript" ؛
script.src = src ؛
if (typeof fun === "function") {
script.OnReadyStateChange = function () {
var r = script.readyState ؛
console.log (src + ":" + r) ؛
if (r === 'loaded' || r === 'complete') {
script.OnReadyStateChange = null ؛
هزار()؛
}
} ؛
}
document.write (script.outerhtml) ؛
//document.getElementSbyTagname("head") budap0/20endchild(script) ؛
} ؛
loadjs ("js/jquery-1.11.0.min.js" ، function () {
console.log ("من jQuery") ؛
}) ؛
loadjs ("test.js" ، function () {
console.log ("من test.js") ؛
}) ؛
يختلف ترتيب نتائج التنفيذ أيضًا:
انسخ الرمز على النحو التالي: الوظيفة
JS/JQUERY-1.11.0.MIN.JS: تم تحميله
من jQuery
test.js: تحميل
من test.js
إذا قمت بتغيير ترتيب التحميل
نسخة الكود كما يلي: loadjs ("test.js" ، function () {
console.log ("من test.js") ؛
}) ؛
loadjs ("js/jquery-1.11.0.min.js" ، function () {
console.log ("من jQuery") ؛
}) ؛
نتائج التنفيذ مختلفة ، تم تحميلها بالمثل بالتسلسل:
انسخ الرمز على النحو التالي: غير محدد
test.js: تحميل
من test.js
JS/JQUERY-1.11.0.MIN.JS: تم تحميله
من jQuery
آمل أن تكون هذه المقالة مفيدة لبرمجة JavaScript للجميع.