הוצאה משימוש והסרות ב-Chrome 60

ג'ו מדלי
ג'ו מדלי

כמעט בכל גרסה של Chrome ניתן לראות מספר משמעותי של עדכונים ושיפורים למוצר, לביצועים שלו וליכולות של פלטפורמת האינטרנט. במאמר הזה נתאר את ההוצאה משימוש וההסרות ב-Chrome 60, שנמצא בגרסת בטא נכון ל-8 ביוני. הרשימה הזו עשויה להשתנות בכל עת.

אבטחה

עכשיו נדרש מקור מאובטח עבור crypto.subtle

ה-Web Crypto API שנתמך מאז הגרסה של Chrome 37 תמיד עבד על מקורות לא מאובטחים. בגלל המדיניות הוותיקה של Chrome לגבי העדפה למקורות מאובטחים לתכונות מתקדמות, האפשרות crypto.subtle לא גלויה רק במקורות מאובטחים.

כוונה להסיר | באג ב-Chromium

הסרת ניווטים במסגרות מובילות שנוצרו על ידי תוכן לכתובות URL של נתונים

בגלל שהם לא מכירים את המשתמשים שלא משתמשים בדפדפנים טכניים, אנחנו רואים יותר ויותר שימוש בסכימה data: למטרות זיוף ופישינג. כדי למנוע זאת, אנחנו חוסמים דפי אינטרנט כך שלא יוכלו לטעון כתובות URL של data: בפריים העליון. הכלל הזה חל על תגי <a>, על window.open, על window.location ועל מנגנונים דומים. הסכמה data: תמשיך לפעול במשאבים שנטענים על ידי דף.

התכונה הזו הוצאה משימוש בגרסה 58 של Chrome ועכשיו היא הוסרה.

כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium

השבתה זמנית של navigator.sendBeacon() בחלק מה-blobs.

הפונקציה navigator.sendBeacon() זמינה החל מגרסה Chrome 39. כפי שנוצר במקור, הארגומנט data של הפונקציה יכול להכיל כל blob שרירותי שהסוג שלו לא נמצא ברשימת ההיתרים של CORS. אנחנו מאמינים שמדובר באיום אבטחה פוטנציאלי, למרות שאף אחד עדיין לא ניסה לנצל אותו. מאחר שאין לנו פתרון מיידי סביר לכך, באופן זמני, לא ניתן יותר להפעיל את sendBeacon() ב-blobs שהסוג שלהם לא בטוח ל-CORS.

על אף ששינוי זה יושם עבור Chrome 60, הוא עבר מיזוג בחזרה ל-Chrome 59.

באג ב-Chromium

CSS

גורם לשילוב צאצאים מצלליות להתנהג כמו קומבינטור צאצא

שילוב הצאצאים של צאצאי הצלליות (>>>), שהוא חלק מהמודול להיקף CSS ברמה 1, נועד להתאים לילדים של רכיב אב מסוים גם אם הם הופיעו בתוך עץ צל. היו לכך כמה מגבלות. ראשית, לפי המפרט, אפשר היה להשתמש בה רק בקריאות של JavaScript כמו querySelector(), והיא לא פעלה בגיליון סגנונות. חשוב מכך, ספקי דפדפנים לא הצליחו לגרום לו לעבוד מעבר לרמה אחת של Shadow DOM.

כתוצאה מכך, הוסר שילוב הצאצאים ממפרטים רלוונטיים, כולל Shadow DOM v1. במקום לקטוע דפי אינטרנט על ידי הסרת בורר זה מ-Chromium, בחרנו במקום זאת לכינוי את שילוב הצאצאים של הצלליות לרכיב צאצאים. ההתנהגות המקורית הוצאה משימוש ב-Chrome 45. ההתנהגות החדשה מיושמת ב-Chrome 61.

כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium

JavaScript

הוצא משימוש והסרה של RTCPeerConnection.getStreamById()

לפני כמעט שנתיים, getStreamById() הוסר מהמפרט של WebRTC, אבל רוב הדפדפנים האחרים כבר הסירו אותו מההטמעות שלהם. למרות שנראה שהשימוש בפונקציה הזו מועט, חשוב לזכור גם שקיים סיכון מזערי ביכולת הפעולה ההדדית עם דפדפנים שמבוססים על Edge ו-WebKit חוץ מאשר ב-Safari, שם עדיין יש תמיכה ב-getStreamById(). מפתחים שזקוקים להטמעה חלופית יכולים למצוא קוד לדוגמה בקטע Intent to Remove שבהמשך.

ההסרה מתבצעת ב-Chrome 62.

כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium

הוצאה משימוש של SVGPathElement.getPathSegAtLength

לפני יותר משנתיים, getPathSegAtLength() הוסר ממפרט ה-SVG. מאחר שיש רק קומץ היטים לשיטה הזו ב-httparchive, היא יוצאת משימוש ב-Chrome 60. ההסרה צפויה להתבצע ב-Chrome בגרסה 62, שיתקבל בשלב כלשהו בתחילת או באמצע אוקטובר.

כוונת הוצאה משימוש | מעקב אחר הסטטוס של Chrome | באג ב-Chromium

העברת getContextAttributes() מאחורי סימון

הפונקציה getContextAttributes() נתמכת ב-CanvasRenderingContext2D מאז 2013. עם זאת, התכונה לא הייתה חלק מסטנדרט כלשהו, ומאז לא הפכה לחלק ממנה. היה צריך להטמיע אותו מאחורי הדגל --enable-experimental-canvas-features של שורת הפקודה, אבל הוא לא הוטמע בטעות. פיקוח זה תוקן בגרסה 60 של Chrome. אנו מאמינים שהשינוי הזה בטוח, כי לא נמצאו נתונים שמראים שמישהו משתמש בשיטה.

באג ב-Chromium

הסרה של Headers.prototype.getAll()

הפונקציה Headers.prototype.getAll() מוסרת בהתאם לגרסה האחרונה של מפרט Fetch.

כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium

הסרה של IndexDB.webkitGetDatabaseNames()

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

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

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

התכונה הזו הוצאה משימוש בגרסה 58 של Chrome ועכשיו היא הוסרה.

כוונה להסיר | Chromestatus tracker | באג ב-Chromium

הסרה של WEBKIT_KEYFRAMES_כלל ו-WEBKIT_KEYFRAME_כלל

הקבועים הלא סטנדרטיים WEBKIT_KEYFRAMES_RULE ו-WEBKIT_KEYFRAME_RULE מוסרים מכלל CSS. במקום זאת, המפתחים צריכים להשתמש ב-KEYFRAMES_RULE וב-KEYFRAME_RULE.

כוונה להסיר | Chromestatus tracker | באג ב-Chromium

ממשק משתמש

נדרשת תנועת משתמש לתיבות דו-שיח של beforeunload.

החל מ-Chrome 60 ואילך, תיבת הדו-שיח beforeunload תופיע רק אם המסגרת שמנסה להציג אותה קיבלה תנועת משתמש או אינטראקציה של משתמש (או אם מסגרת מוטמעת כלשהי קיבלה תנועה כזו). אבהיר שלא מדובר בשינוי בשליחת האירוע beforeunload. זה רק שינוי של הצגת תיבת הדו-שיח.

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

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

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