إطار جافا سكريبت "رفيع" للبرمجة النصية عبر المتصفحات؟

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

سؤال

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

أريد في الأساس شيئًا يفعله لجافا سكريبت ie7.js يفعل لMSIE أم ماذا html5shiv يفعل لعناصر HTML5.أو الحلول المختلفة لمقابس الويب أو اللوحة القماشية.

أعتقد أن jQuery وأمثاله يمكنهم القيام بالخدعة، لكنني أفضل شيئًا يسمح لي بالكتابة طبيعي, ، جافا سكريبت المتوافقة مع المعايير كما لو لم تكن هناك اختلافات بين المتصفحات.

يحرر:نظرًا لأن كل إجابة أخرى تشير إلى أن jQuery هي JavaScript، ونعم، فإن معظم أطر عمل JavaScript تحاول تحسين التوافق عبر المتصفحات، دعني أوضح ما أعنيه.

لا علاقة للاختلافات بين تطبيقات JavaScript عبر المتصفحات المختلفة باللغة نفسها هذه الأيام.وبصرف النظر عن بعض الأساليب المضمنة المفقودة في المتصفحات القديمة، فإن الأنواع تتصرف بنفس الطريقة أيضًا.ولكن لا تزال هناك اختلافات، خاصة بين الوضع الراهن (Chrome/Firefox/Safari) والإصدارات القديمة من MSIE (أي.MSIE 7).والجدير بالذكر أن DOM يميل إلى أن يكون له خصائص أقل أو أكثر دقة في واجهة برمجة التطبيقات (API) الخاصة به.

لا أريد مجرد إطار عمل يسمح لي بكتابة JavaScript يعمل عبر معظم المتصفحات.تلك هي عشرة سنتات.أريد طبقة رقيقة تسمح لي بكتابة التعليمات البرمجية التي تعمل في المتصفحات الحديثة والمتصفحات القديمة على حد سواء.تذهب كل من jQuery وDojo وما إلى ذلك إلى ما هو أبعد من ذلك وتوفر واجهات برمجة التطبيقات الفريدة الخاصة بها بدلاً من توحيد واجهات برمجة التطبيقات الحالية.

إن قول "استخدام jQuery" يشبه القول بأنه يجب علي استخدامه Rich Ajax Platform (أو أطر عمل أخرى لإنشاء التعليمات البرمجية) إذا كنت أرغب في تجنب اختلافات العرض عبر المتصفحات.لا أريد "بديلاً"، أريد "إصلاح الأخطاء" (ليس حرفيًا).

تحرير 2:فقط لتوصيل هذه النقطة إلى المنزل:أنا لا أبحث عن أي إطار عمل.أنا على دراية تامة بـ jQuery، وقد جربت YUI وأفكر حاليًا في تجربة Dojo.لا أريد ببساطة إطارًا "جيدًا".أريد واحدة تناسب وصفي المحدد للغاية.لا بأس إذا لم يكن هناك شيء مثل ذلك، على الرغم من أنه سيكون من المثير للاهتمام معرفة السبب وراء ذلك (على سبيل المثال:لأسباب فنية، وليس "الجميع مشغول جدًا باستخدام jQuery").

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

المحلول

لقد مر وقت طويل منذ طرح هذا السؤال ، ولكن ربما يكون مفيدًا لشخص ما: في الآونة الأخيرة ، قامت مجموعة من المطورين من فاينانشال تايمز بإعداد نوع من اللقاح العالمي الذي يرقى فقط الأجزاء اللازمة لمتصفحات مختلفة .. http://cdn.polyfill.io/v1/docs/

نصائح أخرى

إذا كنت الحد الأدنى في تفكيرك كما يوحي منشورك ، فقد تحاول تجميع المكتبات الدقيقة الخاصة بك والتي توفر وظائف المتصفح المتقاطع لبعض الاختلافات الأكثر إزعاجًا ، مثل AddeventListener مقابل accatevent ، GetTagsByClassName vs. لا طريقة ، تمرير التباينات ، وأبعاد النوافذ ، وما إلى ذلك. معظم عمليات تباينات JavaScript هي في الواقع تباينات في أساليب DOM على أي حال ، ولا يجب تجميع القائمة ، على الرغم من فترة طويلة ، مرة واحدة. أضف وظائف المتصفح المتقاطع الخاصة بك عند ظهورها في الترميز.

أقل من ذلك ، استخدم jQuery.

تحاول جميع مكتبات JavaScript "تسوية حقل اللعب" من خلال السماح لك بكتابة رمز JavaScript المتوافق مع المتصفح.

بعض من الأكثر شعبية:

النموذج المبدئي

موتول

ScriptAcousous

jQuery (المفضل لدي)

لا توجد فرصة لتحقيق ما تريده بالضبط. لا يعرض IE النماذج الأولية لعقد DOM ، لذلك ليس لديك طريقة لتمديدها دون القيام بذلك لكل عقدة فردية. وأيضًا ، عادةً ما يكون (ربما دائمًا؟) لا يمكن كتابة خصائص القراءة الحالية فقط للكائنات المضيفة مثل عقد DOM في IE ، لذلك لن تتمكن من إصلاح خصائص DOM التي يتم تنفيذها بشكل خاطئ على عقد DOM نفسها. حتى إذا قمت فقط بإصلاح طرق DOM ، فستظل بحاجة إلى الاتصال بوظيفة للقيام بذلك في كل مرة تحصل فيها على مرجع عقدة جديد:

var el = someNode.nextSibling;
fixUp(el); // Adds missing methods to the element and fixes broken ones
var matchingEls = el.getElementsByClassName("someclass");

للحصول على شرح جيد ومفصل حقًا لسبب ما تريده أمر مستحيل ، أوصي بقراءة هذا: http://perfectionkills.com/whats-wrong-with-extending-the-dom/

لا أعتقد أن هناك إطارًا بسيطًا "لجعل المتصفحات تتصرف بشكل صحيح" - فكلها تذهب إلى درجات كبيرة إلى ما هو أبعد من ذلك.

ومع ذلك، ليس هناك قيمة في إعادة اختراع العجلة، لذا قد يكون من الحكمة استثمار الوقت في شيء مثل jQuery (ربما باستخدام تصميم بسيط مخصص)، وما إلى ذلك.مع التأكد من وجود إجراءات احتياطية معقولة للمستخدمين الذين تم تعطيل JavaScript لديهم.

عند كتابة "JavaScript" القياسي ، أميل إلى تحديد وظائفي الخاصة التي توفر تطبيقات متصفحة للميزات الشائعة الاستخدام. addEvent و removeEvent (هناك العديد من التطبيقات) هي أمثلة شائعة لهذه التقنية. لقد بحثت وكتبت العديد من الوظائف التي تمكنني من استدعاء وظيفة واحدة لمشكلة محددة ، بدلاً من اكتشاف الميزة وتنفيذ الكود الصحيح في كل منعطف.

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

لذلك ، فإن "الحل" هو حل إلى حد كبير DIY. قم بإنشاء ملف يسمى "antilities.js" وابدأ في إضافة وظائف كما تحتاجها. addEvent, removeEvent, ومستعرض متقاطع XMLHttpRequest هي مكان جيد للبدء. هنا ، سأبدأ بك:

function createXHR()
{
    var xhr;
    if (window.ActiveXObject)
    {
        try
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            alert(e.message);
            xhr = null;
        }
    }
    else
    {
        xhr = new XMLHttpRequest();
    }

    return xhr;
}

ستعود هذه الوظيفة إلى كائن XMLHTTPrequest للاستخدام كما ترى مناسبًا. يتمتع.

تعديل: لاحظ أن هذا النهج يمكن أن يزدهر نظريًا مساحة الاسم الخاصة بك قليلاً. قد تكون أفضل حالًا في إنشاء ملف utilities كائن ، والاتصال utilities.createXHR.

إذا فهمت لك بشكل صحيح ، http://flowjs.com/ يجب أن تكون قريبة جدًا مما تبحث عنه. الهدف الرئيسي: "FlowJS ينفذ واجهة برمجة تطبيقات DOM Level 3 عبر جميع المتصفحات الحديثة"

لديك ذلك مع jQuery. يمنحك استخدام jQuery القدرة على الاستعلام عن DOM مع الاتساق الذي ينقص عبر تطبيقات Browswer المختلفة. أود أن أقول أن Ajax يدعو يتعامل مع أكبر مجموعة من القضايا التي يتعامل معها الأشخاص في JavaScript هذه الأيام.

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