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

لنقم بإنشاء رابط React بسيط لاكتشاف المتصفحات وإمكانياتها

تم النشر بتاريخ 2024-11-08
تصفح:332

Let

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

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

سنستخدم الطريقة الثابتة CSS.supports(). تقوم بإرجاع قيمة منطقية تشير إلى ما إذا كان المتصفح يدعم ميزة CSS معينة أم لا. هذا هو تمثيل جافا سكريبت لـ @supports at-rule. وهو يعمل بشكل مشابه لاستعلامات الوسائط، ولكن مع إمكانات CSS كموضوع.

ربط لاكتشاف الميزات المدعومة

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

import type {FC} from 'react';

const Component: FC = () => {
    // ? Don't do this!
    const hasFeature = CSS.supports('your-css-declaration');
    // ...
}

سوف نستخدم هذا الخطاف البسيط بدلاً من ذلك. يتلقى الخطاف سلسلة تحتوي على حالة الدعم، وهي قاعدة CSS سنقوم بالتحقق من صحتها، على سبيل المثال. العرض: فليكس.

import {useState, useEffect} from 'react';

export const useSupports = (supportCondition: string) => {
    // Create a state to store declaration check result
    const [checkResult, setCheckResult] = useState();

    useEffect(() => {
        // Run check as a side effect, on user side only
        setCheckResult(CSS.supports(supportCondition));
    }, [supportCondition]);


    return checkResult;
};

يمكننا الآن التحقق من دعم ميزات CSS المختلفة من داخل مكون React. إليك مرجع MDN @supports

import type {FC} from 'react';

const Component: FC = () => {

    // Check for native `transform-style: preserve` support
    const hasNativeTransformSupport = useSupports('
        (transform-style: preserve)
    ');

    // Check for vendor prefixed `transform-style: preserve` support
    const hasNativeTransformSupport = useSupports('
        (-moz-transform-style: preserve) or (-webkit-transform-style: preserve)
    ');
    // ...
}

اكتشاف متصفح المستخدم باستخدام شروط دعم CSS

من أجل اكتشاف متصفح المستخدم، يتعين علينا القيام ببعض القرصنة.

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

هذه هي الصفحة المرجعية التي تحتوي على اختراقات المتصفح المختلفة. بعد تجربة شاملة على جهازي، اخترت ما يلي:

const hacksMapping = {
    // anything -moz will work, I assume
    firefox: '-moz-appearance:none',
    safari: '-webkit-hyphens:none',
    // tough one because Webkit and Blink are relatives
    chrome: '
        not (-webkit-hyphens:none)) and (not (-moz-appearance:none)) and (list-style-type:"*"'
}

وهذا هو الشكل النهائي للخطاف:

export const useDetectBrowser = () => {
    const isFirefox = useSupports(hacksMapping.firefox);
    const isChrome = useSupports(hacksMapping.chrome);
    const isSafari = useSupports(hacksMapping.safari);

    return [
        {browser: 'firefox', condition: isFirefox},
        {browser: 'chromium based', condition: isChrome},
        {browser: 'safari', condition: isSafari},
    ].find(({condition}) => condition)?.browser as 
        'firefox' | 'chromium based' | 'safari' | undefined;
};

العرض التوضيحي الكامل

إليك عرض توضيحي عملي كامل للخطاف.

الأفكار النهائية

لا أستطيع أن أقول إن هذا نهج مستقر ومقاوم للرصاص. يتم تحديث المتصفحات، ويتم التخلي عن خصائص البائع أو استبدالها بالمعيار في كثير من الأحيان. في الوقت نفسه، يمكنني أن أقول هذا عن استنشاق وكيل المستخدم. كلتا الطريقتين لهما مشاكل مماثلة. لكن CSS.contains()‎ أسهل في الصيانة، كما أنها أكثر تفصيلاً. وهو يرحب بالمطورين لاستخدام نهج التدهور الرشيق أو التحسين التدريجي وتطبيق التصحيحات الخاصة بهم بشكل دقيق.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/morewings/lets-create-a-simple-react-hook-to-detect-browsers-and-their-capabilities-4lnf?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3