שיחת מדיה ויקי:Mobile.js

תגובה אחרונה: לפני 8 חודשים מאת Guycn2 בנושא טעינת סקריפטים אישיים בנייד

תודה ובקשה. עריכה

ערן, תודה על הפיתוח - אין ספק שנחוץ.

אם אתה מתכוון לתחזק את זה בעצמך indefinitely, אחלה. אם לא, ואחרים יצטרכו לתחזק, כדאי לדעתי להעביר את הקוד עצמו לגאדג'ט נסתר, ומכאן פשוט לטעון אותו. אהמר שבעתיד (או כבר עכשיו?) אפשר יהיה לסמן גאדג'ט כ-mobile. הסיבה היא שנראה כאילו השתדלת לעשות מינימיזציה, וזה לא נוח למתחזק - עדיף לכתוב מסודר ויפה ולהעביר את המינימיזציה ל-RL. אם להעביר לגאדג'ט זה יותר מדי, תוכל לפחות לעמד את האלמנטים באופן קריא? JS כבר מזמן תומך במחרוזות מעומדות יפה על פני מספר שורות בעזרת בקטיק (`), ולא יכול להיות שיש דפדפן בנייד שלא מסתדר עם זה. אישית, מנהגי הוא לבנות את האלמנטים בעזרת jquery:

var something = $('<form>', { name: "commentbox" 'class': "commentbox", action:"/w/index.php", method:"get" } )
    .append($('<input>', {/* properties */} ) 
        // etc. etc. etc.
    .appendTo('#page-secondary-actions');

קיפודנחש (שיחה | תרומות | מונה) לא חתם ב־23:25, 17 בנובמבר 2018 (IST) 00:00, 10 בינואר 2000 (IST)תגובה

טעינת סקריפטים אישיים בנייד עריכה

שלום קיפודנחש, ערן ושאר עוקבי הדף,

לפני כשלוש שנים נעשתה עריכה בדף זה שלמעשה ניטרלה את האפשרות לטעון בנייד סקריפטים מוק:ס באמצעות importUserScript() או importScript(). משמעות הדבר היא שכדי שסקריפט יפעל במכשירים ניידים, צריך לטעון אותו בצורה המסורבלת של mw.loader.load() עם כתובת ה־URL הארוכה.

לדוגמה, עורך שרוצה להתקין את סקריפט 107 ולהשתמש בו גם בממשק הנייד, _לא_ יכול להסתפק בשורה הפשוטה importUserScript(107);, אלא נדרש להכניס את כל השורה הבאה לדף ה־common.js שלו:

mw.loader.load('/w/index.php?title=מדיה_ויקי:סקריפטים/107.js&action=raw&ctype=text/javascript');

זה מסורבל ולא נוח, בעיקר כי זה דורש להסביר למשתמשים שכדי להתקין את הסקריפט גם בנייד, ולא רק במחשב, הם צריכים להכניס את כל השורה הזאת לדף ה־common.js שלהם, במקום הצורה הנוחה והמקובלת של importUserScript() או importScript().

ואחרי הצגת הבעיה, נעבור לעצם העניין: האם העריכה הזאת שנעשתה באוגוסט 2020 עדיין נדרשת? הבנתם מה הסיבה שהיא בכלל נוספה מלכתחילה? האם אפשר למחוק אותה בבטחה, ובכך להחזיר לחיים את הפונקציות importUserScript() ו־importScript() בממשק הנייד?

זה נכון שרוב הסקריפטים בוק:ס לא מותאמים כרגע לממשק הנייד, אבל אם הם ייטענו בנייד ופשוט לא יעשו כלום – מה יהיה הנזק בכך? הנזק האפשרי היחיד שעולה על דעתי הוא שסקריפטים מסוימים יזרקו שגיאות (exceptions) בממשק הנייד (למשל: עקב ניסיון לעשות מניפולציות על אלמנט שלא קיים ב־DOM), אך אוכל לשער די בבטחה שאין הרבה סקריפטים שיגרמו לכך, וזה לא מצדיק את השבתת _כל_ הסקריפטים בממשק הנייד. אפשר להחיות את הפונקציות importUserScript() ו־importScript() בממשק הנייד, ובנוסף לנקוט באחד משני אמצעי זהירות כדי לצמצם את הסיכויים ל־exceptions:

  1. בהנחה שאין הרבה סקריפטים שיזרקו שגיאות (להבדיל מסקריפטים שפשוט לא יעשו כלום בנייד, בלי שגיאות, שאין בהם נזק), אפשר פשוט לעבור ברפרוף על רשימת הסקריפטים בוק:ס, לראות באילו מהם יש פוטנציאל לשגיאות בממשק הנייד, ולהשבית אותם בנייד ספציפית (לא בעיה בתחילת הסקריפט לבדוק אם העיצוב הוא minerva ולצאת מיד במידה שכן). ברוב המקרים זה לא מסובך, כי רוב הסקריפטים לא מכילים יותר מכמה עשרות שורות קוד ולא בעיה לנחש האם יש בהם פוטנציאל לשגיאות: כנראה ש־99% מהשגיאות, אם בכלל יהיו כאלו, ייגרמו כתוצאה מניסיון לעשות מניפולציה על אלמנט שלא קיים ב־DOM של הממשק הנייד, וגם זה ברוב המקרים לא בעיה בכלל כי נעשה בדר"כ שימוש ב־jQuery, ולא ב־Vanilla JavaScript, כדי לעשות מניפולציה על ה־DOM (בעיקר בסקריפטים החדשים יותר). כלומר, קוד כמו $( '#non-existing-element' ).text( 'hello' ); לא צפוי לזרוק שום שגיאה, כי jQuery מגן מפני הדבר. להערכתי רוב הסקריפטים עושים שימוש ב־jQuery במקרים כאלה.
  2. אפשרות שנייה, שמרנית יותר, היא לשנות את התנהגות הפונקציה importUserScript() בממשק לניידים בלבד, כך שכברירת מחדל לא תטען שום סקריפט בניידים. היא תקבל מערך של מספרי הסקריפטים ש_כן_ צריכים להיטען בנייד, ותריץ אך ורק אותם. האפשרות הזו פחות עדיפה בעיניי לטווח הרחוק, כי מספר העורכים בנייד הולך וגדל עם השנים, ולפחות להשקפתי השאיפה היא שסקריפטים חדשים שנכתבים יהיו מותאמים גם לממשק הנייד, לפחות כל עוד התאמתם לא כרוכה במאמץ רב.

יצוין שמבדיקתי בוויקיפדיה האנגלית הפונקציה importScript() לא הושבתה בממשק לניידים, והיא מתנהגת בדיוק כמו בממשק למחשבים. על כן, אולי הסיבה לעריכה שנעשתה ע"י Jon ב־2020 הייתה תקלות כלשהן שהיו בעבר וכבר אינן עוד.

מה דעתכם? אני מעלה את הסוגיה הזאת כי לאחרונה כתבתי מספר סקריפטים שהותאמו גם לממשק הנייד, וחבל לי לבלבל את העורכים ולהסביר להם שכדי להשתמש בסקריפט גם בנייד עליהם להשתמש ב־mw.loader.load() המסורבל במקום ב־importUserScript() או importScript() הפשוטים והמוכרים.

ראו כאן חטיבת דיון קודמת שעסקה הסוגיה הזו. Guycn2 - שיחה 09:47, 14 באוגוסט 2023 (IDT)תגובה

Guycn2, הפעלה של סקריפטים בניידים תלויה בסקריפטים:
  • סקריפטים שמותאמים לניידים - יעשירו את הפונקציונליות
  • סקריפטים שלא מותאמים לניידים - במקרה הטוב יגרמו לטעינה איטית של דפים, ובמקרה הפחות טוב יגרמו לשגיאות.
לדעתי הצד הבטוח יותר הוא להפעיל רק סקריפטים שנבדקו מראש כמתאימים לניידים, אבל אין לי התנגדות לעשות ניסיון של להחזיר את הפונקציה לפעולה - ולטפל בסקריפטים סוררים - רק שבמקרה כזה צריך ליידע את הקהילה מראש כך שניתן יהיה לטפל בבעיות שעשויות לצוץ ("החל מ-1 בספטמבר ... עשויים להיות שיבושים... במקרים כאלו יש לפנות לשיחת מדיה ויקי:Mobile.js"). בברכה, ערן - שיחה 07:06, 23 באוגוסט 2023 (IDT)תגובה
תודה רבה, @ערן. אם כך אני חושב שבשלב זה אלך על הצד הבטוח יותר, ואשנה את התנהגות הפונקציה importUserScript() בניידים כך שתטען רק סקריפטים שבוודאות נתמכים בנייד. בברכה, Guycn2 - שיחה 09:28, 23 באוגוסט 2023 (IDT)תגובה
  בוצע Guycn2 - שיחה 00:26, 24 באוגוסט 2023 (IDT)תגובה
חזרה לדף "Mobile.js".