jQuery $ .getscript - وظائف ومتغيرات قديمة في البرنامج النصي المنفذ

StackOverflow https://stackoverflow.com/questions/3052188

  •  27-09-2019
  •  | 
  •  

سؤال

أقوم بتنفيذ JavaScript مع jQuery $ .getScript. في البرنامج النصي الذي تم تنفيذه ، لم أتمكن من الوصول إلى وظائف ومتغيرات ملف المصدر الخاص بي.

هل هناك حل؟

هل كانت مفيدة؟

المحلول

البرنامج النصي الذي تم تنفيذه بواسطة $ .getScript () يفعل يمكنك الوصول إلى السياق العالمي. يمكنك استخدام أي متغير عالمي (أو وظيفة لهذه المسألة) من داخل البرنامج النصي الخارجي.

نصائح أخرى

Nick Craver ، أنا فقط أقضي 3 ساعات (!) في هاجس لماذا لن ينجح شيء ، وقد أعطتني البصيرة التي أحتاجها لجعلها تعمل.

xoxoxoxoxoxo

من المثير للاهتمام أن نلاحظ:

يمكنك إعلان متغير مثل jQuery var مثل هذا:

$variableName = something;

وبهذه الطريقة ، يمكن لـ JQuery الوصول إليها من أي مكان في النطاق.

$(function(){ 
    $alertString = 'Hello World'; 

    $.getScript('test.js', function(){ 
        // do nothing 
    });    
} 

test.js: 

alert( $alertString ); 

لقد وجدت الإجابة هنا مفيدة لفهم الموضوع ، لكنني ما زلت لا أستطيع أن أجعله يعمل في سياقتي حتى حدث ذلك هذه المقالة على TechMonks:

عندما أقوم بنسخ/لصق مثالهم النهائي في رأس ملف .js الرئيسي الخاص بي ، كل شيء نجح. بالنسبة لي على الأقل ، تم كسر وظيفة $ .getScript () ، وهذا هو الإصلاح:

jQuery.extend({
 getScript: function (url, callback) {
     var head = document.getElementsByTagName("head")[0] || document.documentElement;
     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;
                 //success();
                 //complete();
                 if (callback) callback();

                 // Handle memory leak in IE
                 script.onload = script.onreadystatechange = null;
                 if (head && script.parentNode) {
                     head.removeChild(script);
                 }
             }
         };
     }

     head.insertBefore(script, head.firstChild);
     return undefined;
 }
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top