-
שלום וברכה
אני מעוניין בלפתח תוסף שיוכלו לצפות בסרטונים וכן לשמוע קבצי שמע בתוך gmail ולכן אשמח לעזרתכם:
אני ניסיתי להזריק כפתור ע"י appendChild
וכתוב לי ב Console:
appendChild is not a function
מישהו יודע למה זה קורה? -
@ivrtikshoret אם תוכל קצת לפרט. מה בדיוק כתבת, רק appendChild? זה ממש לא אמור לעבוד לך.
-
@מוטי-אורן
זה מה שכתבתי:var x, i; x = document.querySelectorAll(".aQw"); for (i = 0; i < x.length; i++) { var btn = document.createElement("BUTTON"); btn.innerHTML = "CLICK ME"; x[i].appendChild(btn); }
ובקובץ המניפיסט כתבתי:
{ "name": "play video in gmail", "version": "1.0.0.0", "manifest_version": 3, "icons": { "128": "icon.png" }, "action": { "default_popup": "popup.html" }, "content_scripts": [ { "js": [ "play video in gmail.js" ], "matches": [ "https://mail.google.com/*" ], "run_at": "document_start" } ] }
-
@ivrtikshoret מעניין למה הוא לא עובד, אצלי בהזרקה דרך הקונסול עובד מצויין. אבל מה שזכור לי שב - content_script בשדה של js אתה צריך לשים את הנתיב של הקובץ סקריפט. לא? (אני מקווה שאני צודק כי לא כל כך התעסקתי עם תוספים)
-
@מוטי-אורן
אה צודק גם אצלי עובד אם אני מריץ את זה דרך הקונסול אולי צריך לכתוב משהו במנפיסט בכדי שזה יעבוד דרך התוסף
מישהו יודע מה צריך להוסיף? -
@ivrtikshoret אתה צריך לתת הרשאות permissions, שאני לא זוכר כל כך מה בדיוק אבל אני ינסה לבדוק את זה עוד רגע.
-
@ivrtikshoret אוקיי. דבר ראשון, אני רואה שכן צריך את הנתיב לקובץ ה-JS.
דבר שני, צריך להוציא את run_at מה-content_script, רק אז זה עובד (האמת שלא ברור לי עדיין למה זה ככה),
דבר שלישי, בסקריפט עצמו, אם נשאר בקוד שכתבת זה לא יספיק כי התפיסה של האלמנטים נעשית כשהמייל נטען, ומה שקורה זה שלוקח כמה שניות עד שבכלל האלמנט עם הקלאס "aQw" קיים בדף, והסקריפט הספיק כבר להיטען לפני.
אז מה שצריך לעשות זה לעשות setTimeout לכמה שניות, אבל אני חושב שזה לא חכם.
לדעתי עדיף להוסיף eventListener או משהו כזה, שברגע שנכנסים להודעה כל שהיא, רק אז הסקריפט ירוץ. לא יודע צריך לחשוב מה אפשר לעשות עם זה. -
@מוטי-אורן
אוקיי דבר ראשון אכן הצלחתי לעשות את זה עם setTimeout
ואכן מחקתי את run_at
אבל למה לא נכון לעבוד עם setTimeout ? -
@ivrtikshoret אמר בהזרקת כפתור ב gmail:
אבל למה לא נכון לעבוד עם setTimeout ?
כך נראה לי מכמה סיבות. סיבה א': אם לצורך העניין הגדרת את ה-setTimeout ל-3 שניות ויבוא מישהו שהאינטרנט שלו איטי ולוקח למייל שלו 10 שניות לעלות, במקרה כזה זה לא יעבוד.
ואם בכל זאת תעשה setTimeout של 15 שניות לצורך העניין למקרה הכי קיצוני (שעדיין אני חושב שיכול להיות יותר מזה), אז משתמש קלאסי יצטרך לחכות עד שהתוסף שלך יעבוד.
סיבה ב': מה קורה עם שמת setTimeout אפילו של 2 דקות, שזה אמור לעבוד בכל מקרה (כמובן שהמשתמש ייצטרך קצת להתייבש מול המסך), ולקח למשתמש 10 דקות עד שהוא נכנס להודעה שיש בה סרטון, שאז ה-setTimeout כבר מזמן לא פעיל.
וכמובן מה יעשה אותו משתמש מסכן אם הוא בכל זאת נכנס מיד להודעה שמכילה סרטון אבל יצא ממנה ונכנס להודעה ב' שגם לה מצורף סרטון.
סיבה ג': setTimeout בכללי לא מומלצת ומשתמשים בה רק לדברים מסויימים, כי מה שידוע לי היא פוגעת בביצועים ויוצרת בעיות זיכרון.
אקיצער, אם אתה רוצה לכתוב תוסף טוב לעניין הזה, תצטרך להאזין לאירוע של הכניסה להודעה, ובכל פעם כזאת להפעיל את הסקריפט הנ"ל. -