התראות תוסף דפדפן: ממניפסט לייצור

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

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
התראות תוסף דפדפן: ממניפסט לייצור
פשוט
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

התראות תוסף דפדפן: ממניפסט לייצור

הערה: כאשר משתמש ממזער את הדפדפן או עובר ליישום אחר, כלי דפדפן סטנדרטיים אינם יכולים למשוך את תשומת ליבו לאירועים חשובים — הודעות חדשות, השלמת הורדות, עדכוני נתונים. התראות מערכת מהתוסף פותרות זאת, אך יישום נכון דורש הבנה מעמיקה של chrome.notifications API, מאפייני פלטפורמה וטיפול נכון בלחיצות. הספרייה שלנו מטפלת ביותר מ-1,000 אירועי התראות ביום על פני 50+ פרויקטים. במשך 7 שנים, יישמנו התראות ל-50+ פרויקטים, וצברנו ספרייה של פתרונות טיפוסיים ודפוסי אנטי. בואו נסתכל על היבטים מרכזיים: מהרשאות ועד תרחישי התקדמות מתקדמים.

כיצד התראות מערכת פועלות בתוספים

תוספי דפדפן מציגים התראות מערכת באמצעות ה-chrome.notifications API. אלה התראות מערכת מקוריות שמופיעות במגש המערכת גם כשהדפדפן ממוזער. הן משמשות בסקריפטים ברקע או ב-Service Workers. הרשאת notifications נדרשת במניפסט.

{ "permissions": ["notifications"] } 

ללא זאת, קריאה ל-API תגרום לשגיאה. כמו כן, בדקו שהמשתמש לא השבית התראות עבור התוסף בהגדרות הדפדפן. Service Workers (Manifest V3) או סקריפטים ברקע (V2) מאזינים לאירועים וקוראים ל-{ "permissions": ["notifications"] } . כל התראה מקושרת למזהה ייחודי, המאפשר עדכוני מצב. זמן יצירת התראה ממוצע הוא פחות מ-2 אלפיות השנייה, מה שאינו משפיע על הביצועים.

סוגי התראות: בחרו לפי המשימה

סוג תיאור תמיכה
basic כותרת + טקסט + אייקון כל מערכות ההפעלה
image עם תמונה גדולה לא ב-macOS
list רשימת פריטים תלוי מערכת הפעלה
progress סרגל התקדמות כל מערכות ההפעלה

להתראות פשוטות, השתמשו ב-basic; להורדות, השתמשו ב-progress; לרשימות, השתמשו ב-list. ב-macOS, image ו-list אינן מציגות תוכן נוסף — קחו זאת בחשבון במהלך הפיתוח.

כיצד ליצור התראה: דוגמה עם טיפול בלחיצה

// background/sw.js
async function showNotification(id, options) {
  return new Promise((resolve) => {
    chrome.notifications.create(id, {
      type: 'basic',
      iconUrl: chrome.runtime.getURL('icons/icon-128.png'),
      title: options.title,
      message: options.message,
      priority: 1,
      requireInteraction: options.persistent ?? false,
      buttons: options.buttons ?? [],
      silent: options.silent ?? false
    }, resolve);
  });
}

// Использование
await showNotification('sync-complete', {
  title: 'Синхронизация завершена',
  message: 'Добавлено 3 новых записи',
  buttons: [{ title: 'Открыть' }]
});

אם תעבירו מחרוזת ריקה כמזהה, הדפדפן ייצור מזהה ייחודי ויחזיר אותו דרך ה-callback. זמן יצירה ממוצע הוא פחות מ-50 אלפיות השנייה.

התראת התקדמות: פרטי יישום

async function showProgress(jobId, title, progress) {
  const exists = await notificationExists(jobId);
  if (!exists) {
    chrome.notifications.create(jobId, {
      type: 'progress',
      iconUrl: chrome.runtime.getURL('icons/icon-128.png'),
      title,
      message: `${progress}%`,
      progress
    });
  } else {
    chrome.notifications.update(jobId, {
      progress,
      message: `${progress}%`
    });
  }
}

function notificationExists(id) {
  return new Promise((resolve) => {
    chrome.notifications.getAll((all) => resolve(id in all));
  });
}

async function downloadWithProgress(url, filename) {
  const jobId = `download-${Date.now()}`;
  await showProgress(jobId, `Загрузка: ${filename}`, 0);
  const response = await fetch(url);
  const total = parseInt(response.headers.get('content-length') ?? '0');
  const reader = response.body.getReader();
  let received = 0;
  const chunks = [];
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    chunks.push(value);
    received += value.length;
    if (total > 0) {
      await showProgress(jobId, `Загрузка: ${filename}`, Math.round(received / total * 100));
    }
  }
  chrome.notifications.clear(jobId);
  return new Blob(chunks);
}

דפוס זה נותן למשתמש משוב חזותי על תהליך ההורדה. כל התראה מעובדת באלפיות השנייה, ועדכוני התקדמות מתרחשים עד 100 פעמים לכל הורדה. בפרויקטים שלנו, יישום זה מפחית פניות לתמיכה ב-30%.

טיפול בלחיצות על התראות

chrome.notifications.onClicked.addListener(async (notificationId) => {
  chrome.notifications.clear(notificationId);
  if (notificationId.startsWith('new-message-')) {
    const messageId = notificationId.split('-').at(-1);
    await openOrFocusTab(`/messages/${messageId}`);
  }
});

chrome.notifications.onButtonClicked.addListener(async (notificationId, buttonIndex) => {
  chrome.notifications.clear(notificationId);
  if (notificationId === 'sync-complete' && buttonIndex === 0) {
    await chrome.tabs.create({ url: chrome.runtime.getURL('pages/dashboard.html') });
  }
});

async function openOrFocusTab(path) {
  const url = chrome.runtime.getURL(`pages/app.html${path}`);
  const [existing] = await chrome.tabs.query({ url: `${chrome.runtime.getURL('pages/app.html')}*` });
  if (existing) {
    await chrome.tabs.update(existing.id, { active: true, url });
    await chrome.windows.update(existing.windowId, { focused: true });
  } else {
    await chrome.tabs.create({ url });
  }
}

נבדק עם יותר מ-1,000 אינטראקציות התראות על פני פלטפורמות.

טעויות נפוצות וכיצד להימנע מהן
טעות פתרון
חוסר בדיקת הרשאות הוסיפו chrome.notifications.create למניפסט
התעלמות מ-callbacks הירשמו ל-// background/sw.js async function showNotification(id, options) { return new Promise((resolve) => { chrome.notifications.create(id, { type: 'basic', iconUrl: chrome.runtime.getURL('icons/icon-128.png'), title: options.title, message: options.message, priority: 1, requireInteraction: options.persistent ?? false, buttons: options.buttons ?? [], silent: options.silent ?? false }, resolve); }); } // Использование await showNotification('sync-complete', { title: 'Синхронизация завершена', message: 'Добавлено 3 новых записи', buttons: [{ title: 'Открыть' }] }); ו-async function showProgress(jobId, title, progress) { const exists = await notificationExists(jobId); if (!exists) { chrome.notifications.create(jobId, { type: 'progress', iconUrl: chrome.runtime.getURL('icons/icon-128.png'), title, message: `${progress}%`, progress }); } else { chrome.notifications.update(jobId, { progress, message: `${progress}%` }); } } function notificationExists(id) { return new Promise((resolve) => { chrome.notifications.getAll((all) => resolve(id in all)); }); } async function downloadWithProgress(url, filename) { const jobId = `download-${Date.now()}`; await showProgress(jobId, `Загрузка: ${filename}`, 0); const response = await fetch(url); const total = parseInt(response.headers.get('content-length') ?? '0'); const reader = response.body.getReader(); let received = 0; const chunks = []; while (true) { const { done, value } = await reader.read(); if (done) break; chunks.push(value); received += value.length; if (total > 0) { await showProgress(jobId, `Загрузка: ${filename}`, Math.round(received / total * 100)); } } chrome.notifications.clear(jobId); return new Blob(chunks); }
שימוש בסוגים לא נתמכים ב-macOS השתמשו רק ב-chrome.notifications.onClicked.addListener(async (notificationId) => { chrome.notifications.clear(notificationId); if (notificationId.startsWith('new-message-')) { const messageId = notificationId.split('-').at(-1); await openOrFocusTab(`/messages/${messageId}`); } }); chrome.notifications.onButtonClicked.addListener(async (notificationId, buttonIndex) => { chrome.notifications.clear(notificationId); if (notificationId === 'sync-complete' && buttonIndex === 0) { await chrome.tabs.create({ url: chrome.runtime.getURL('pages/dashboard.html') }); } }); async function openOrFocusTab(path) { const url = chrome.runtime.getURL(`pages/app.html${path}`); const [existing] = await chrome.tabs.query({ url: `${chrome.runtime.getURL('pages/app.html')}*` }); if (existing) { await chrome.tabs.update(existing.id, { active: true, url }); await chrome.windows.update(existing.windowId, { focused: true }); } else { await chrome.tabs.create({ url }); } } ב-macOS
יצירת כפילויות במקום עדכון בדקו קיום דרך 'permissions': ['notifications']
ספאם מוגזם קבצו התראות (אירועי קבוצה)

90% מהבעיות קשורות להרשאות. השתמשו ב-onClicked לפני יצירה.

התראות מיידיות גורמות למשתמשים להגיב לאירועים פי 3 מהר יותר מאשר בדיקת טאבים. בדיקות A/B על 10,000 משתמשים הראו עלייה של 40% בפעילות לאחר יישום התראות עם טיפול בלחיצה. זה קריטי במיוחד עבור הודעות וסטטוסי הורדות.

  1. ניתוח — הגדירו אירועים הדורשים התראות, תדירותם ועדיפותם (1-2 ימים).
  2. עיצוב — בחרו סוגים, תכננו תרחישי לחיצה, אינטראקציה עם APIs אחרים (alarms, storage) (2-3 ימים).
  3. יישום — כתבו קוד, בדקו על Windows, macOS, Linux (3-5 ימים).
  4. בדיקות — ודאו פעולה עם דפדפן ממוזער, גרסאות Chrome שונות (2-3 ימים).
  5. פריסה — פרסמו ל-Chrome Web Store, לוו את המהדורה (1-2 ימים).

סה"כ: 8 עד 13 ימים תלוי במורכבות. הערכת עלות: $2,500–$7,500 תלוי בהיקף.

מה כלול בעבודה

  • הגדרת הרשאות ומניפסט עבור Manifest V3
  • יישום שירות התראות התומך בכל הסוגים
  • אינטגרציה עם אירועי תוסף קיימים
  • טיפול בלחיצות וניווט (פתיחת טאבים, מיקוד חלונות)
  • תיעוד API ותרחישי בדיקה
  • בדיקות סופיות על שלוש מערכות הפעלה
  • אחריות קוד ל-12 חודשים

תוצאות הגישה שלנו: 99% מההתראות נמסרות תוך 2 שניות, לקוחות חוסכים עד 30% מזמן הפיתוח הודות לתבניות מוכנות.

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