דלגו לתוכן הראשי

איך אפשר להנגיש עם תוסף?

הסבר טכני פשוט על הגישה שלנו: איך JavaScript יכול להפוך אתר לא נגיש לאתר שעומד בתקנות — בלי לשנות שורת קוד אחת באתר המקורי.

שתי גישות להנגשת אתרים

יש שתי דרכים עיקריות להפוך אתר לנגיש. לכל גישה יתרונות וחסרונות.

גישה 1: תיקון ברמת הקוד

מתכנת נכנס לקוד המקור של האתר ומתקן כל ליקוי ידנית: מוסיף תגיות alt לתמונות, מתקן מבנה כותרות, מוסיף labels לטפסים, משפר ניגודיות בצבעים.

תיקון יסודי ומדויק
דורש גישה לקוד המקור
יקר ואיטי — צריך מתכנת בכל שינוי
עדכוני תוכן שוברים את ההנגשה

גישה 2: תוסף JavaScript (Post-Load)

סקריפט שנטען אחרי הדף, סורק את כל האלמנטים ומוסיף את מאפייני הנגישות החסרים באופן דינמי. פועל כשכבה מעל האתר הקיים.

לא דורש גישה לקוד המקור
מתעדכן אוטומטית עם שינויי תוכן
מהיר להתקנה — שורת קוד אחת
ניטור שוטף מובנה

דוגמאות קוד: איך זה נראה בפועל

ארבע דוגמאות שמדגימות בדיוק איך JavaScript מטפל בהנגשה — מתיקון בסיסי ועד תוכן דינמי.

הקדמה

הקדמה קטנה

כדי להבין את פעולת התוסף, חשוב להכיר שתי דרכים עיקריות ליישום נגישות באתר:

  1. הנגשה ברמת הקוד — כתיבת הקוד כבר מראש בצורה נגישה.
  2. הנגשה לאחר טעינת הדף — באמצעות סקריפט שמבצע את ההתאמות לאחר שכל התוכן נטען.

מבחינת המשתמש — במיוחד אדם עם מוגבלות — אין שום הבדל בין שתי השיטות. גם כאשר ההנגשה נבנית בתוך הקוד, עדיין יש מצבים שדורשים שינוי בזמן אמת באמצעות JavaScript. לדוגמה: כפתור שמציג או מסתיר מידע צריך לעדכן את קורא המסך האם המידע גלוי או מוסתר.

הנגשה ברמת הקוד
<button aria-expanded="false"
        aria-controls="infoPanel"
        onclick="togglePanel(this)">
  הצג מידע נוסף
</button>

<div id="infoPanel" hidden>
  <p>מידע חשוב לגולש...</p>
</div>

<script>
function togglePanel(btn) {
  const panel = document.getElementById('infoPanel');
  const isExpanded = btn.getAttribute('aria-expanded') === 'true';
  btn.setAttribute('aria-expanded', !isExpanded);
  panel.hidden = isExpanded;
}
</script>
הסבר: הכפתור כולל מאפייני נגישות (aria-expanded ו-aria-controls) ופונקציית JS שמעדכנת קוראי מסך בזמן אמת.
איך התוסף עובד

אז איך התוסף שלנו עובד בפועל?

התוסף הוא קובץ JavaScript שמופעל רק לאחר שכל תוכן העמוד נטען. הוא משתמש בקובץ הגדרות מותאם אישית שבו אנו מציינים בדיוק אילו התאמות צריכות להתבצע ולאילו אלמנטים.

ההתאמות כוללות תוספות של תגיות ARIA, תיאורים לקוראי מסך, שיפור פוקוס, ניווט מקלדת ועוד — לפי הצורך של כל אתר. כאשר התוסף מתחיל לפעול הוא עובר על ההגדרות ומפעיל את הפונקציות הדרושות לכל אלמנט.

התוסף בפעולה
<script>
window.addEventListener('load', () => {
  const button = document.querySelector('#myButton');
  if (button) {
    button.setAttribute('role', 'button');
    button.setAttribute(
      'aria-label',
      'שלח טופס'
    );
  }
});
</script>
הסבר: לאחר שהדף נטען במלואו, התוסף מוצא את האלמנט הרלוונטי ומוסיף לו מאפייני נגישות מתוך קובץ ההגדרות.
תוכן דינמי

ומה אם תוכן נטען אחרי שהתוסף סיים לרוץ?

כאן נכנסים לתמונה תכנים דינמיים — תוכן שמוזרם לעמוד רק לאחר טעינתו (למשל דרך AJAX או API).

הליבה של התוסף שלנו מנצלת את היכולות של JS ומבצעת "מעקב בזמן אמת" — מזהה מתי נוסף תוכן חדש לעמוד, ואז מבצעת עליו התאמות נגישות בדיוק כמו על תוכן רגיל.

MutationObserver
const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    mutation.addedNodes.forEach((node) => {
      if (node.nodeType === 1 &&
          node.matches('.dynamic-content')) {
        node.setAttribute('tabindex', '0');
        node.setAttribute('aria-live', 'polite');
      }
    });
  });
});

observer.observe(document.body, {
  childList: true,
  subtree: true
});
הסבר: ברגע שתוכן חדש מתווסף לדף (למשל דרך AJAX), התוסף מזהה אותו ומבצע עליו את התאמות הנגישות הרלוונטיות.
מגבלות

האם יש מגבלות?

כן, מגבלה אחת חשובה: כאשר מנגישים ישירות בקוד האתר — התוכן כבר מגיע מונגש מהשרת עצמו.

אבל כשמנגישים באמצעות JS — צריך להמתין שהתוכן ייטען מהשרת, שהדפדפן יסיים לעבד אותו, ורק אז ניתן לעבור עליו ולבצע את ההתאמות. זה לא מונע את הנגישות, אבל מוסיף שלב ביניים של זמן עיבוד שצריך לקחת בחשבון.

שרת מול JS
<!-- תוכן שמגיע מונגש מהשרת -->
<img src="product.jpg"
     alt="תמונה של מוצר חדש" />

<!-- תוכן שמוזרם לדף בצורה דינמית -->
<script>
setTimeout(() => {
  const img = document.createElement('img');
  img.src = 'product.jpg';
  document.body.appendChild(img);

  // מוסיפים את הטקסט האלטרנטיבי רק לאחר טעינה
  setTimeout(() => {
    img.alt = 'תמונה של מוצר חדש';
  }, 100);
}, 1000);
</script>
הסבר: כשאלמנט נטען באיחור — התוסף צריך להמתין לסיום טעינתו כדי להנגיש אותו. לכן יש השהיה בין הופעתו לעיבוד ההתאמות.

איך התוסף עובד בפועל

איך זה עובד מאחורי הקלעים

התוסף של UA נטען אחרי שהדפדפן סיים לרנדר את העמוד (DOMContentLoaded). ברגע שהוא פעיל, הוא סורק את ה-DOM — עץ האלמנטים של העמוד — ומבצע סדרה של תיקונים:

  • מוסיף תגיות ARIA (role, aria-label, aria-describedby) לאלמנטים שחסרים בהם
  • יוצר מבנה סמנטי תקין — כותרות, רשימות, אזורים (landmarks)
  • מטפל בניווט מקלדת — סדר Tab, פוקוס נראה, קיצורי מקלדת
  • מציג תפריט נגישות עם כלים מותאמים אישית לגולש

בלי פגיעה בביצועים

התוסף נטען באופן אסינכרוני ושוקל פחות מ-50KB (gzipped). הוא לא חוסם את הרנדור הראשוני של הדף ולא פוגע ב-Core Web Vitals. הסקריפט רץ רק אחרי שהעמוד מוכן — כך שהגולש לא מרגיש שום עיכוב.

מתעדכן עם האתר

בניגוד לתיקון ברמת הקוד, התוסף סורק את העמוד מחדש בכל טעינה. אם הוספתם תוכן חדש, שיניתם תמונה או עדכנתם טופס — התוסף מזהה את השינוי ומנגיש אותו אוטומטית.

הגישה שלנו: שילוב חכם

ב-UA אנחנו לא מסתמכים רק על אוטומציה. התוסף שלנו נכתב ומתוחזק ידנית עבור כל אתר — קוד מותאם אישית שמכיר את המבנה הספציפי של האתר שלכם, בשילוב עם מנוע אוטומטי שמטפל בתוכן דינמי.

רוצים לראות את הטכנולוגיה בפעולה?

בדקו את האתר שלכם בחינם וקבלו דוח מפורט על מצב הנגישות.

מוכנים להנגיש את האתר שלכם?

השאירו פרטים ונחזור אליכם עם הצעה מותאמת — בלי התחייבות