كيف يمكنني إضافة خارجي ملف js مع المعلمة

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

  •  22-08-2019
  •  | 
  •  

سؤال

أريد أن أعطي الحد الأدنى js التعليمات البرمجية إلى مواقع عشوائية بحيث يمكن إضافة القطعة.

رمز يحتاج إلى تشغيل بعد الصفحة الرئيسية الأحمال وتشمل المعلمة مع اسم المجال.( أنا لا أريد أن هاردكودي ذلك)

خيار واحد هو أن تضيف هذا الكود قبل </body> (لذلك سيتم تشغيل بعد تحميل الصفحة):

<script type="text/javascript" id="widget_script">  
    document.getElementById('widget_script').src=location.protocol.toLowerCase()+"//mywebsite.com/?u="+encodeURIComponent(window.location.host);        
</script>

هذا يعمل في IE ولكن ليس في فايرفوكس.أرى مع الحرائق التي الخاصية src يتم إنشاؤه بشكل صحيح ولكن السيناريو من موقعي لم يتم تحميل.

سؤالي هو :ما هي أفضل طريقة للقيام بذلك ؟ (يفضل أن يكون عن طريق وضع الحد الأدنى من خطوط على الجزء رأس.)

لتوضيح السؤال:إذا وضعت السيناريو على رأس الجزء, كيف تجعل من تشغيل بعد تحميل الصفحة الرئيسية يتم تحميلها ؟ إذا كنت تستخدم onload الحدث في مخطوطتي أنا قد يغيب لأنه قد الحمل بعد الحدث onload أطلق.

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

المحلول

ربما كنت تريد أن يكون تنفيذ غير النصي حظر تقنية.أساسا بدلا من تعديل src السيناريو أنت ذاهب لخلق وإلحاق جديد النصي عنصر.

جيدة حتى كتابة هنا وهناك معيار الطرق للقيام بذلك في يوي و مسج.انها واضحة تماما مع واحد فقط مسكتك الذي يفهم جيدا (كما هو موثق في هذا الرابط).

يا هذا:

خيار واحد هو أن تضيف هذا الكود فقط قبل </body> (لذلك سيتم تشغيل بعد تحميل الصفحة):

ليس صحيحا من الناحية الفنية:أنت فقط مما يجعل سيناريو آخر شيء في تحميل النظام.

نصائح أخرى

ويمكنك محاولة لتشمل بشكل ثابت النصي باستخدام document.write (هو أسلوب القديمة وليس من المستحسن استخدام لأنها يمكن أن يسبب مشاكل مع المزيد من المكتبات الحديثة):

var url = location.protocol.toLowerCase() + 
    "//mywebsite.com/?u="+encodeURIComponent(window.location.host);
document.write('<script src="', url, '" type="text/javascript"><\/script>');

وأو مع عنصر DOM إنشاؤه بشكل حيوي:

var dynamicInclude = document.createElement("script");
dynamicInclude.src = url;
dynamicInclude.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(dynamicInclude); 

وفي وقت لاحق تحرير:

لضمان تشغيل البرنامج النصي بعد هذا يمكن أن تستخدم ONLOAD:

var oldWindowOnload = window.onload; 
window.onload = function() {
    oldWindowOnload(); 
    var url = location.protocol.toLowerCase() + 
        "//mywebsite.com/?u="+encodeURIComponent(window.location.host);
    var dynamicInclude = document.createElement("script");
    dynamicInclude.src = url;
    dynamicInclude.type = "text/javascript";
    document.getElementsByTagName("head")[0].appendChild(dynamicInclude); 
}

وأنا لا أعتقد أنه يمكن أن تكون أقصر من ذلك، وبصرف النظر عن أسماء المتغيرات أقصر:)

لماذا لا تستخدم getScript طريقة مسج للقيام التحميل؟ إذا كنت لا تريد أن تعتمد على مسج، يمكنك تتبع خلال مصدر لتعلم كيفية معالجته.

والاطلاع على مكتبة المستخدمة على نطاق واسع ودائما ما تظهر لك حلول للمشاكل التي لا يعرف هل كان لديك. على سبيل المثال، يمكنك أن ترى كيف تدير مسج لتوليد رد عندما يتم تحميل البرنامج النصي، وكيف يتجنب حدوث تسرب للذاكرة المزعوم في IE.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top