اذهب إلى المحتوى

Sam Ahw

الأعضاء
  • المساهمات

    1388
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    16

إجابات الأسئلة

  1. إجابة Sam Ahw سؤال في مشكلة في الوصول إلى الدورات كانت الإجابة المقبولة   
    يمكنك التواصل مع الدعم الفني بأي وقت (من هنا) والضغط على زر تحدّث معنا لطرح أي سؤال أو مشاكل تواجهها وسيعملون على مساعدتك بأفضل شكل ممكن.
    بالتوفيق،
  2. إجابة Sam Ahw سؤال في الاشعارات في الاندرويد ستوديو كانت الإجابة المقبولة   
    يظهر لديك الخط لأن باني الصف NotificationCompact الذي يقبل متغيّر واحد تم الاستغناء عنه بدءً من نسخ API level 26.1.0.  واستبداله في النسخ الحديثة بباني آخر يستقبل متغيرين (بإضافة  Notification_Channel_ID وهو من نمط سلسلة نصية String) ليصبح بالشكل التالي:
    NotificationCompat.Builder(Context context, String channelId) مثال: String NOTIFICATION_CHANNEL_ID = "my_channel_id_01"; NotificationCompat.Builder(adding.this, NOTIFICATION_CHANNEL_ID) ولحل هذه المشكلة في حال أردت الإبقاء على النسخة القديمة يمكنك إما تعديل نسخة API المستخدمة في مشروعك أو تجربة الشيفرة التالية (ولكنها حلول مؤقتة فقط وليست أمثلية):
    Notification.Builder notification=new Notification.Builder(this) .setContentTitle("New notification") .setContentText("You've received new messages.") يمكنك الاطلاع على المزيد من التفاصيل والأمثلة من التوثيق الرسمي بالبحث عن NotificationCompat.Builder على الانترنت
  3. إجابة Sam Ahw سؤال في ذهاب التركيز (focus) لحقول الادخال(inputs) بعد طباعة اول حرف في مكتبة رياكت كانت الإجابة المقبولة   
    يجب عليك إرفاق جزء من الشيفرة البرمجية التي تظهر فيها المشكلة لنستطيع مساعدتك بشكل أفضل، ولكن بشكل عام في حال كنت تقوم بإظهار النموذج form داخل دالة render، في كل مرة سيتم كتابة محرف ما داخل حقول الإدخال سيتم إعادة بناء المكون ولذلك يفقد التركيز داخل حقل الإدخال، لذلك حاول وضع محتوى الدالة render بشكل مباشر:
    <main> <div> <MyForm /> </div> </main> تصبح كالتالي <main> <div> <form onSubmit={onSubmit}> <InputText name="title" label="Username" placeholder="Enter a username" onChange={onChange} value={valueTitle} /> <InputSubmit name="Save" /> </form> </div> </main> أو حاول استدعاء المكونات بالشكل {compName()} بدلاً من <compName /> كالتالي:
    const ex = (pr) => { return ( <input type='text' onChange={onChange} value={value} /> ); }; const main = () => ( <ex pr={true} /> ); من الأسباب الأخرى لهذه المشكلة أيضاً في حال كنت تستخدم الخاصية key في حقول الإدخال، يجب عليك التحقق منها ومن آلية عملها فسيتم إعادة إنشاء العناصر لكل قيمة مختلفة من الخاصية key وبالتالي أيضاً سيفقد التركيز ضمن حقول الإدخال.
  4. إجابة Sam Ahw سؤال في هل يمكن ان اضيف نظام دردشة جاهز واعدل عليه في مشروع لارافيل موجود مسبقا كانت الإجابة المقبولة   
    بالطبع يمكنك ذلك، تتيح لارافل العديد من الحلول للتعامل مع البث الحي للبيانات بالاعتماد على تقنيات Websockets.
    يمكنك البدء بالتعرّف على هذه التقنية وقراءة قسم Broadcasting في توثيق لارافل لفهم الحلول الموجودة ومزايا كل منها. وإذا أردت البحث أكثر ستجد العديد من المصادر حول Laravel Websockets بأشكال مختلفة دروس، مقالات، فيديوهات،..إلخ.  أما بالنسبة للتأثير على مشروعك الحالي، يمكنك البدء بإضافة هذه الخاصية بشكل منفصل ضمن المشروع بحيث لا تتداخل الشيفرات البرمجية مع الصفوف والكائنات الموجودة حالياً وبعد اختبار النظام ككل يمكنك البدء بدمجه حسب الوظائف المطلوبة لديك.
    كما يمكنك الاستفادة من بعض التقنيات الموجودة بشكل منفصل مثل Pusher والتي يمكنك إضافتها لمشروعك الحالي بسهولة دون أن تؤثر على بنية المشروع.
  5. إجابة Sam Ahw سؤال في اضافة شرط لاستعلام mysql كانت الإجابة المقبولة   
    أعتقد من الشيفرة البرمجية لديك أن المتغيّر $order['id'] هو من الشيفرة وليس ضمن الاستعلام، لذلك يمكنك تبسيط الأمر بإجراء هذا الاختبار على مستوى التطبيق بما أن قيمة المتغيّر موجودة مسبقاً لديك وبالتالي تنفيذ أحد الاستعلامين بشكل منفصل حسب قيمة المتغيّر.
    أو يمكنك إجراء نفس الشروط IF  ضمن استعلام Mysql التي ستجريها ضمن الشيفرة البرمجية ولكن ذلك سيزيد من تعقيد الاستعلام وخاصةً أنه في حالتك يتم التجميع بين عدد من الجداول.
    حيث يمكن استخدام الشروط IF ضمن الاستعلامات بالشكل التالي:
    IF(fd.condition = 1, 'Y', 'N') (في حال تحقق الشرط = 1 سيتم أخذ القيمة "Y" وإلا سيتم أخذ القيمة "N").
    مثال على مشروعك:
    IF(patron_colors.order_id > 0 , patron_colors.color_name = order_buttons.color_select OR patron_colors.color_name = order_buttons.color_select AND patron_colors.order_id=' .$order['id'] , patron_colors.color_name = order_buttons.color_select OR patron_colors.color_name = order_buttons.color_select) كما يمكن أن تأخذ الشروط أشكال أخرى حسب مكان ورودها ضمن الاستعلام ويمكنك إجراء بحث إضافي على الانترنت للتوسع بطرق استخدامها والاطلاع على بعض الأمثلة الأخرى.
  6. إجابة Sam Ahw سؤال في كيفية حذف الصور من مجلد السيرفر من خلال flutter كانت الإجابة المقبولة   
    ضمن الجزء الخاص بشيفرة PHP لديك أنت تقوم بإزالة السجل من قاعدة البيانات فقط، وفي حال كنت تخزّن مسار الصورة ضمن سجل قاعدة البيانات يمكنك استخدام الدالة unlink لحذف الصورة من المجلّد حسب القيمة الموجودة في قاعدة البيانات (مسار أو اسم الملف).
    مثال:
    $filePath = 'path/to/file.jpg' // جلب القيمة من قاعدة البيانات if (file_exists($filePath)){ unlink($filePath); }  
  7. إجابة Sam Ahw سؤال في تعلم firebase كانت الإجابة المقبولة   
    تقدّم Firebase العديد من الخدمات والحلول البرمجية التي يعتمد عليها عدد كبير من مواقع الانترنت وتطبيقات الهاتف الجوال. بتعلّملك لتقنيات Firebase وطرق استخدامها وتطبيقها قد يوفّر عليك الوقت والجهد كمبرمج حيث تسهّل العديد من المهمات على المبرمج وتتيح إمكانية ربط سهلة ومرنة مع مختلف أنماط المشاريع.
    من الممكن الاستغناء عن بعض تقنياتها والقيام بها بنفسك مثل خدمات التوثيق وقاعدة البيانات وغيرها في حال وجدت نفسك قادر على إنشاء هذه الخصائص بنفسك دون الحاجة لخدمات Firebase، ولكن ذلك قد يزيد وقت تنفيذ المشروع ويزيد من حجم العمل المطلوب حيث سيتوجب عليك بناء هذه الخصائص بنفسك من الصفر والعمل على صيانتها واختبارها بشكل كامل في الواجهة الخلفية Backend.
  8. إجابة Sam Ahw سؤال في ليش مخفي في الاندرويد ستوديو كانت الإجابة المقبولة   
    هل يمكنك مشاركة رسالة الخطأ التي تظهر لك في حال كان يوجد مشكلة في التطبيق؟
    الألوان لا تساعد في تحديد الخطأ وذلك لأنها قد تختلف من بيئة تطوير لأخرى ومن مشروع لآخر.
    في حال كانت تظهر لك الرسالة التالية:
    Cannot resolve symbol ‘AppCompatActivity’ يمكنك التوجه إلى ملف build.gradle الموجود على مستوى التطبيق (مجلّد app) وتعديل السطر التالي:
    ‘com.android.support:appcompat-v7:XX.X.X’ إلى ‘com.android.support:appcompat-v7:XX.X.+’ (حسب النسخة المستخدمة في مشروعك، بإضافة العلامة +).
    وبعدها يمكنك التوجه إلى القائمة File  في برنامج Android Studio واختيار Sync Project with Gradle Files لمزامنة التغييرات في مشروعك بعد الحفظ.
  9. إجابة Sam Ahw سؤال في Exception in thread "main" java.net.UnknownHostException: services.gradle.org كانت الإجابة المقبولة   
    إن الخطأ UnknownHostException لا يعطي الكثير من التفاصيل حول المشكلة التي تواجهها فهو خطأ عام ويوجد عدة أسباب لحدوثه، ولكن بشكل عام يظهر هذا الخطأ بكثرة عند عدم توفر اتصال جيّد بالانترنت، ومن الحلول التي يمكنك تجربتها:
    - حاول التأكد من اتصال جيّد بالانترنت أو حاول تغيير الشبكة.
    - ابحث عن الملف gradle.properties الموجود ضمن مجلّد المشروع وقم بتغيير القيمة distributionUrl=https\ إلى distributionUrl=http\
    - ابحث عن الملفات (gradlew و gradlew.bat) ثم قم بتغيير القيمة DEFAULT_JVM_OPTS الموجودة ضمن الملف كالتالي:
    DEFAULT_JVM_OPTS="-Dhttp.proxyHost=XXXX -Dhttp.proxyPort=XXXX -Dhttp.proxyUser=XXXX -Dhttp.proxyPassword=XXXX -Dhttps.proxyHost=XXXX -Dhttps.proxyPort=XXXX -Dhttps.proxyUser=XXXX-Dhttps.proxyPassword=XXXX" وبعد ذلك قم بتنفيذ الأمر التالي:
    gradlew clean build في حال استمرت المشكلة مع مشاريع أخرى، حاول حذف برنامج محرر الشيفرات البرمجية android studio في حال كنت تستخدمه وأعد تثبيته من جديد على حاسوبك.
  10. إجابة Sam Ahw سؤال في العمر و الشركات كانت الإجابة المقبولة   
    لايوجد قاعدة واحدة تطبق على جميع الشركات، يعود ذلك لقوانين العمل في البلد الذي تتواجد فيه الشركة أو قوانين الشركة نفسها، بعض الشركات قد تمنع العمل لمن هم دون السن القانونية، والبعض الآخر قد يسمح بذلك.
  11. إجابة Sam Ahw سؤال في Gradle task assembleRelease failed with exit code 1 كانت الإجابة المقبولة   
    كما تخبرك رسالة الخطأ يوجد مشكلة في ملفات برنامج Android Studio أو يتعذّر الوصول لها لإتمام عملية البناء المطلوبة. وتظهر هذه الرسالة لعدّة أسباب ومنها مضاد الفيروسات الموجود على جهازك، أو أن ملفات المشروع موجودة ضمن قرص مختلف عن القرص C وبالتالي لايتم الوصول لملفات تحضير البيئة التابعة لبرنامج Android Studio، أو الملفات محمية الوصول من قبل المستخدم الحالي.
    تأكد من وجود الملفات ضمن المسار الظاهر في رسالة الخطأ:
    C:\Program Files\android\Android Studio\jre\bin\java وأن برنامج Android Studio قادر على الوصول وقراءة وتعديل هذه الملفات من خلال إعادة تشغيل البرنامج كمسؤول (run as administrator) في حال كان نظام تشغيلك ويندوز.
    في حال استمرت المشكلة حاول إعادة تشغيل حاسوبك أو إعادة تحميل برنامج Android Studio للتأكد من عدم وجود أخطاء أثناء التثبيت.
  12. إجابة Sam Ahw سؤال في vagrant ssh لايعمل لدي كانت الإجابة المقبولة   
    تأكد من عدم وجود أكثر من آلة مفتوحة بنفس الوقت، من خلال تنفيذ الأمر:
    vagrant global-status والذي سيطلعك على تفاصيل العمليات الجارية لديك. وحاول إغلاق أي عمليات أخرى غير التي تستخدمها حالياً في ssh.
    في حال استمرت المشكلة حاول تثبيت مكتبة Ruby. وإعادة تثبيت مكاتب virtualbox-dkms التالية:
    sudo apt-get remove virtualbox-dkms sudo apt-get install virtualbox-dkms sudo modprobe vboxdrv sudo modprobe vboxnetflt وأيضاً من الحلول الأخرى المتاحة هي التوجه إلى مجلّد vagrant وحذفه نهائياً من خلال الأمر التالي:
    vagrant box remove ubuntu/trusty64 مع استبدال الاسم الأخير حسب الاسم الموجود لديك، ولمعرفة الاسم يمكنك تنفيذ الأمر التالي:
    vagrant box list  
  13. إجابة Sam Ahw سؤال في استعمال الفايربيز مع خدمة google sign in في flutter web كانت الإجابة المقبولة   
    بالطبع يمكنك استخدام خدمة تسجيل الدخول من Google دون استخدام Firebase لأن كل منهما منفصل عن الآخر وخدمة تسجيل الدخول من Google يتم استخدامها في لغات برمجة وأطر عمل مختلفة بشكل مستقل بدءً من مواقع الويب وحتى تطبيقات الهاتف الجوال. ولكن Firebase تتيح لك جميع الأدوات اللازمة لتسهل عليك العمل كما يمكنك ربط خاصية تسجيل الدخول مع قاعدة بيانات مباشرةً ضمن Firebase وبالتالي حفظ بيانات المستخدمين ومعلومات تسجيل الدخول الخاصة بهم لاستخدامها ومكاملتها في وظائف التطبيق لديك.
    متى يفضّل استخدام Firebase؟
    في حال كان لديك خادم ويب متكامل وقاعدة بيانات منفصلة للتطبيق مسبقاً يمكنك الاستغناء عن Firebase وبرمجة تسجيل الدخول بشكل يدوي وحفظ البيانات في قاعدة البيانات الخاصة بخادم الويب لديك.
    أما في حال كان تطبيقك يعتمد على بعض خصائص Firebase أو Firestore وقاعدة البيانات وطرق تسجيل الدخول الأخرى، من الأسهل لك استخدام خصائص تسجيل الدخول المقدّمة من Firebase لأنها ستختصر عليك الوقت والجهد بدلاً من برمجة طرق تسجيل الدخول بشكل يدوي ومنفصل.
  14. إجابة Sam Ahw سؤال في طريقة دمج الملفات النصية في ملف واحد كانت الإجابة المقبولة   
    في نظام ويندوز يمكنك تجميع الملفات النصية في مجلّد واحد وفتح نافذة موجه الأوامر CMD ضمن هذا المجلّد وتنفيذ الأمر التالي:
    copy *.txt newfile.txt حيث newfile هو اسم الملف الذي سينتج عن دمج كافة الملفات ذات اللاحقة txt الموجودة ضمن المجلّد
    ملاحظة: في حال أردت الفصل بين محتويات الملفات يجب عليك التأكد من ترك سطر فارغ في آخر كل ملف، لأن تنفيذ الأمر السابق سيقوم بجمع محتوى الملفات كما هو دون الفصل بين محتويات هذه الملفات.
  15. إجابة Sam Ahw سؤال في معالجة مشكل يظهر عند إستعمال vs code كانت الإجابة المقبولة   
    لا يشير اللون الأحمر هنا إلى خطأ ضمن مشروعك.
    يظهر اسم الملف باللون الأحمر وبجانبه الحرف D أي Deleted (محذوف). وهذه الأحرف التي تظهر بجانب اسماء الملفات هي من قبل GIT لمساعدتك على متابعة حالة الملفات في مستودع مشروعك ضمن GIT ورموزها كالتالي:
    A: Added - عند إضافة ملف جديد M: Modified - ملف موجود مسبقاً ضمن المستودع وتم التعديل عليه (تم حفظه ضمن GIT قبل مرحلة Commit) D: Deleted - ملف تم حذفه ولم يعد موجود ضمن المستودع. U: Untracked: الملف جديد أو تم التعديل عليه وهو خارج نطاق المستودع (لم يتم إضافته إلى المستودع بعد). C: Conflict: نسخة الملف متضاربة مع نسخة سابقة موجودة في مستودع المشروع R: Renamed: تم تغيير اسم الملف عن الاسم المحفوظ في مستودع المشروع S: Submodule - وجود الملف ضمن مستودع جزئي آخر. هذه الإشارات والألوان تسهل على المبرمج متابعة حالة الملفات بدلاً من تنفيذ الأمر التالي ضمن موجّه الأوامر:
    git status وعند قيامك بحفظ التغيرات ضمن مستودع مشروعك ستختفي من محرر الشيفرات البرمجية. ولكن في حال أردت تعطيلها يمكنك ذلك من خلال النافذة File ثم Preferences ثم Settings وبعد ذلك قم بالبحث عن العبارة التالية: "git.decorations.enabled" وقم بتغييرها إلى false.
     
  16. إجابة Sam Ahw سؤال في التحكم بالمسافات في LinearLayout ضمن اندرويد استوديو كانت الإجابة المقبولة   
    يمكنك تحقيق ذلك من خلال إضافة مكونات Views فارغة للفصل بين العناصر مع تحديد الخاصية weights حسب المسافة المطلوبة:
    ضمن hotizontal linear layout: <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <!-- زر أو أيقونة على جهة اليسار --> <Button ... ... /> <!-- فاصل أو مسافة --> <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <!-- زر أو عنصر جديد في الوسط --> <Button ... ... /> <!-- فاصل أو مسافة --> <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <!-- زر أو عنصر على جهة اليمين --> <Button ... ... /> </LinearLayout> ولكن يوجد حل أسهل وأسرع من خلال استخدام relativeLayout في حال كان لديك عدد أقل من العناصر وستمكنك من التحكم بموضع هذه العناصر بالنسبة للحاوية بدلاً من ترك مسافات فارغة.
    حاول البحث والإطلاع على relativeLayout على الانترنت، كما يمكنك لصق أجزاء الشيفرات والكود البرمجي مباشرةً عند طرح سؤالك لتسهل مساعدتك والإجابة على أسئلتك في المستقبل.
  17. إجابة Sam Ahw سؤال في ترتيب دروس الدورات كانت الإجابة المقبولة   
    هل يمكنك توضيح ما المقصود بترتيب الدورة؟
    جميع المسارات ضمن الدورات مرتبة وينصح بالبدء بالمسارات بالترتيب، ولكن يمكنك اختيار أي مسار تفضّله في حال كان لديك خبرة مسبقة بمجال معيّن.
  18. إجابة Sam Ahw سؤال في ظهور خطأ invalid date string: Unparseable date في أندرويد ستوديو كانت الإجابة المقبولة   
    يمكنك الاستفادة من الحلول المطروحة على نفس السؤال:
     
  19. إجابة Sam Ahw سؤال في موقع الاكاديميه لا يفتح عندي في التلفون galaxy s21 كانت الإجابة المقبولة   
    حاول تحديث أو استبدال المتصفح على جهازك باستخدام متصفح Chrome إن لم تكن تستخدمه، وفي حال استمرت المشكلة يمكنك التواصل مع فريق الدعم من هنا
  20. إجابة Sam Ahw سؤال في مشكلة توافق الإصدارات في أندرويد ستوديو كانت الإجابة المقبولة   
    المشكلة ليست بإصدار برنامج android studio بل بتوافقية المكتبات والاعتماديات المستخدمة في المشروع مع إصدار SDK المعرّف ضمن مشروعك، يمكنك إجراء التعديلات التالية على الملف build.gradle الموجود ضمن المسار android/app/build.gradle:
    android { compileSdkVersion 31 // تعديل الإصدار هنا إلى 31 sourceSets { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { applicationId "com.example.blah_blah" minSdkVersion 16 targetSdkVersion 31 //تعديل الإصدار إلى 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } وأيضاً في ملف app/build.gradle:
    buildscript { ext.kotlin_version = '1.6.10' //تعديل الإصدار repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } في حال ظهرت المزيد من المشاكل في المستقبل أرجو منك كتابة المزيد من التفاصيل حول مشروعك وضمن أي إطار مبني Flutter, Kotlin, Android. يمكنك اتباع الإرشادات التالية لطرح الأسئلة: كيف تحصل على إجابة لسؤالك؟
  21. إجابة Sam Ahw سؤال في برمجة تطبيق مصغر كانت الإجابة المقبولة   
    لست متأكد من المقصود بتطبيق مصغّر ولكن برمجة وتصميم أي تطبيق سيكون بشكل مشابه للتطبيق الأساسي، فعدد المستخدمين ليس مهماً أثناء مرحلة التصميم بما أنه سيحوي على كافة خصائص التطبيق الأصلي. يتم النظر لعدد المستخدمين لاحقاً عند نشر المشروع للتعامل مع توزيع الحمل وتوزيع قاعدة البيانات والأمور المتعلقة بها وليس عند تصميم الواجهات أو المرحلة الأولية للتطوير.
    يمكنك البحث عن بعض المشاريع مفتوحة المصدر والتي قام بعض المطورين ببنائها والتي تكون مشابهة للتطبيق الأصلي بدرجة كبيرة من خلال البحث على العبارة clone مثلاً facebook clone أو instagram clone وستجد العديد من الشيفرات البرمجية على موقع github بلغات وتقنيات برمجية مختلفة يمكنك أخذ الأجزاء المطلوبة منها.
  22. إجابة Sam Ahw سؤال في مساعده في تثبيت سكربت Laravel كانت الإجابة المقبولة   
    عملية النشر على الاستضافة طويلة نوعاً ما وقد تواجه بعض المشاكل أو الإعدادات التي يجب التأكد منها لذلك من الصعب شرح كافة الطرق ضمن التعليقات.
    غالباً ما تحتوي هذه القوالب على دليل للتثبيت أو التعديل عليها، حاول البدء بالعملية بنفسك وفي حال واجهت أخطاء أو مشاكل يمكنك طرحها كأسئلة لنستطيع مساعدتك بشكل أفضل. وإذا لم يكن لديك أي خبرة برمجية يمكنك طرح مشروعك على إحدى منصات العمل الحر كمنصة مستقل وهناك ستجد العديد من المبرمجين القادرين على مساعدتك.
  23. إجابة Sam Ahw سؤال في كيفية تطبيق دالة sleep في جافاسكريبت JavaScript؟ كانت الإجابة المقبولة   
    من خلال ماتقدّمه الجافاسكريبت من تقنيات async await أو Promise يمكن تنفيذ ذلك بأمر بسيط:
    على هئية تابع لاستخدامه بمناطق مختلفة ضمن الشيفرة البرمجية:
    function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } أو const sleep = ms => new Promise(r => setTimeout(r, ms)); أو بسطر واحد فقط يمكن اختصاره كالتالي:
    await new Promise(r => setTimeout(r, 2000));  
  24. إجابة Sam Ahw سؤال في كيفية التحقق مما إذا كان العنصر ظاهر في الصفحة عبر جافاسكريبت JavaScript؟ كانت الإجابة المقبولة   
    يكفي الإشارة إلى العنصر:
    const box = document.getElementById('box'); حيث سيحمل القيمة null في حال كان غير موجوداً في عقد الشجرة DOM.
    يمكنك أيضاً الاستفادة من التابع contains في جافاسكريبت كالتالي:
    document.body.contains(box); أما إذا كان العنصر موجوداً لديك وتقصد التحقق من الصف hidden فقط في CSS يمكنك تحقيق ذلك كالتالي:
    var box = document.getElementById("box"); if (window.getComputedStyle(box).display === "none") { .... } وفي حال كنت تستخدم الخاصية visibility بدلاً من display يمكنك استخدام التالي:
    window.getComputedStyle(x).visibility === "hidden"  
  25. إجابة Sam Ahw سؤال في كيفية معرفة نوع الجهاز ونظام التشغيل عبر JavaScript؟ كانت الإجابة المقبولة   
    يمكنك الوصول إلى هذه المعلومات من خلال المتصفح عن طريق استخدام navigator، فإذا حاولت طباعته ستجد المعلومات التالية:
    console.log(navigator); # platform = Win32 # appCodeName = Mozilla # appName = Netscape # appVersion = 5.0 (Windows; en-US) # language = en-US # mimeTypes = [object MimeTypeArray] # oscpu = Windows NT 5.1 # vendor = Firefox # vendorSub = 1.0.7 # securityPolicy = # userAgent = Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 .... وبعدها يمكنك تحديد نوع المتصفح ونظام التشغيل من الخاصيات platform، vendor, appCodeName.
    أما إذا كنت تقصد تحديد نوع الجهاز المستعمل لمستخدم ما ضمن خادم ويب، فيوجد العديد من المكتبات المساعدة حسب ما لغة البرمجة أو إطار العمل الذي تستخدمه سواء كان PHP أو Javascript Node.JS
×
×
  • أضف...