כמעט בכל גרסה של Chrome אנחנו רואים מספר משמעותי של עדכונים ושיפורים למוצר, לביצועים שלו וליכולות של פלטפורמת האינטרנט. במאמר הזה מתוארות ההוצאה משימוש וההסרות ב-Chrome 54, שנמצא בגרסת בטא נכון ל-15 בספטמבר. הרשימה הזו עשויה להשתנות בכל עת.
השבתת ניווטים ב-handler של הסרת הנתונים שנטענו
TL;DR: כל הניווטים ממקורות שונים ייחסמו ב-handler של אירועים מסוג window.onunload
כדי ש-Chrome יהיה בתוך השורה עם מפרט ה-HTML וגם עם Firefox ו-Safari.
כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium
גרסאות קודמות של Chrome אפשרו הפרעה לניווט בין מקורות ב-window.onunload
. על ידי הגדרה של window.location.href = '#fragment'
. לפי מפרט ה-HTML, ברכיבי ה-handler של הסרת הנתונים שנטענו ניתן להשתמש רק בניווטים בתוך דף, ובגרסאות קודמות של Chrome נחסמו שיטות ניווט אחרות בהתאם לדרישות המפרט. החל מגרסה Chrome 54, ניווטים כאלה לא יאפשרו לנו להתאים אותנו למפרט וגם ל-Firefox ו-Safari.
HTTP/0.9 הוצא משימוש
TL;DR: HTTP/0.9 הוצא משימוש. על מפתחים לעבור לגרסה מאוחרת יותר, עם עדיפות ל-HTTP/2.
כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium
HTTP/0.9 הוא הקוד הקודם של HTTP/1.x. חסרות תכונות רבות של היורשים. אחד מהחששות העיקריים של האינטרנט המודרני הוא היעדר כותרות תגובה. בלעדיהם, אין דרך לוודא שתגובת HTTP/0.9 היא באמת תגובת HTTP/0.9. הדבר יכול לגרום למספר בעיות. דוגמאות לבעיות מהסוג הזה:
- לקוחות שמטפלים בתגובות שגיאה מסוימות כתגובות HTTP/0.9 חוקיות.
- שרתים שלא סוגרים את שקע הבקשות וגורמים ללקוחות להתייחס לתגובות כ-GET תלויה שנשארת פעילה לתמיד או עד שמשתמש מנווט לדף ששלח את הבקשה.
- שרתים שלא יכולים להודיע לדפדפן שבקשה נכשלה, מה שעלול לגרום לבעיות בהיוריסטיקה של שמירה במטמון.
הדרך היחידה למנוע תקלות ב-HTTP/0.9 היא להסיר את התמיכה לחלוטין. לכן התמיכה ב-HTTP/0.9 הוסרה ב-Chrome 54.
השימוש ב-initTouchEvent
הוסר
TL;DR:
initTouchEvent
הוצא משימוש לטובת TouchEvent
constructor
כדי לשפר את התאימות למפרטים, והוא יוסר לגמרי ב-Chrome 54.
כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium
מזה זמן רב מפתחים יכולים ליצור אירועי מגע סינתטי ב-Chrome
באמצעות initTouchEvent
API. האירועים האלה משמשים לעיתים קרובות כדי לדמות אירועי מגע
לבדיקה או לאוטומציה של ממשקי משתמש מסוימים באתר. החל מגרסה 49 של Chrome, ה-API הזה שהוצא משימוש מציג את האזהרה הבאה .
מלבד העובדה שלא מופיעה במפרט של אירועי המגע, יש כמה סיבות לכך שהשינוי הזה טוב.
ההטמעה של Chrome ב-initTouchEvent
לא תואמת בכלל ל-API של initTouchEvent
של Safari, ושונה מ-Firefox ב-Android. לבסוף, הרבה יותר קל להשתמש ב-constructor של TouchEvent
.
לכן החלטנו לפעול בהתאם למפרט ולא לתחזק ממשק API שלא הוגדר או תואם להטמעה היחידה האחרת.
מפתחים שצריכים חלופה צריכים להשתמש ב-constructor של TouchEvent
.
מאחר שההטמעות של ה-API initTouchEvent
ב-iOS וב-Android או ב-Chrome היו שונות כל כך, בהרבה מקרים, אתרים היו מכילים קוד בהתאם (לרוב, דפדפן Firefox)
var event = document.createEvent('TouchEvent');
if(ua === 'Android') {
event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
300, 300, 200, 200, false, false, false, false);
} else {
event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
200, false, false, false, false, touches, targetTouches, changedTouches, 0, 0);
}
document.body.dispatchEvent(touchEvent);
היא גרועה כי היא מחפשת את "Android" בסוכן המשתמש ו-Chrome ב-Android יתאים ויצאה משימוש. עדיין לא ניתן להסיר אותה, מכיוון שב-Android יהיו במשך תקופה מסוימת דפדפנים אחרים המבוססים על WebKit ודפדפנים ישנים יותר של Blink, שעדיין תצטרכו לתמוך בממשק ה-API הישן.
כדי לטפל כראוי בפונקציות TouchEvent
באינטרנט, צריך לשנות את הקוד כך שיתמוך ב-Firefox, IE Edge ו-Chrome. לשם כך, צריך לבדוק אם קיים TouchEvent
באובייקט window
, ואם יש לו "length" חיובי (שמציין שזהו בנאי שמקבל ארגומנט) צריך להשתמש בו.
if('TouchEvent' in window && TouchEvent.length > 0) {
var touch = new Touch({
identifier: 42,
target: document.body,
clientX: 200,
clientY: 200,
screenX: 300,
screenY: 300,
pageX: 200,
pageY: 200,
radiusX: 5,
radiusY: 5
});
event = new TouchEvent("touchstart", {
cancelable: true,
bubbles: true,
touches: [touch],
targetTouches: [touch],
changedTouches: [touch]
});
}
else {
event = document.createEvent('TouchEvent');
if(ua === 'Android') {
event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
300, 300, 200, 200, false, false, false, false);
} else {
event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
200, false, false, false, false, touches, targetTouches,
changedTouches, 0, 0);
}
}
document.body.dispatchEvent(touchEvent);
המאפיין KeyboardEvent.keyIdentifier הוסר
TL;DR: נכס keyboardEvent.keyIdentifier
הנתמך מעט יוסר לטובת הנכס KeyboardEvent.key
המבוסס על תקנים.
כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium
המאפיין keyboardEvent.keyIdentifier
היה חלק קצר ממפרט W3C ב-2009 וב-2010. עם זאת, היא הוטמעה בעבר רק ב-WebKit.
מפתחים שצריכים להחליף את המאפיין הזה יכולים להשתמש בנכס KeyboardEvent.key
המבוסס על סטנדרטי או בנכס KeyboardEvent.code
(כפי שמתואר במאמר שעשינו באביב שעבר). לממשק הישן יש בסיס הטמעה רחב ככל האפשר, והוא נתמך בכל הדפדפנים המובילים למחשבים, למעט Safari. הגרסה מאוחרת יותר נתמכת כרגע ב-Chrome, Firefox ו-Opera. הסרת התכונה הזו נועדה לקדם את השימוש בנכס KeyboardEvent.key
. מ-Apple לא הודיעה אם היא תתמוך בתכונה הזו. עם זאת, גם הנכסים KeyboardEvent.keyCode
ו-KeyboardEvent.charCode
שהוצאו משימוש (אבל עדיין לא הוסרו מ-Chrome) זמינים ב-Safari.
הסרה של אירוע ומאפיין שהסתיים ב-MediaStream ומאפיין מצורף
TL;DR: האירוע והמאפיין ended
וonended
מטפלים באירועים אנחנו מסירים מאחר שהם הוסרו מהמפרט של תיעוד מדיה ותזרים.
כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium
האירוע ended
וה-handler של האירועים onended
לא היו חלק מהמפרט של WebRTC במשך כשלוש שנים. מפתחים שרוצים לצפות באירועים צריכים להשתמש ב-MediaStreamTracks
במקום ב-MediaStreams
.
הוצאה משימוש של SVGElementElement.viewPort
ההטמעה לא פועלת ב-Chrome מאז 2012. המאפיין לא קיים בכלל בדפדפנים אחרים והוא הוסר מהמפרט. מהסיבות האלה, אנחנו מוציאים את הנכס משימוש. ההסרה צפויה להתבצע ב-Chrome 55.
כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium
הוצאה משימוש של SVGViewElement.viewTarget
המאפיין SVGViewElement.viewTarget
אינו חלק ממפרט SVG2.0 והשימוש בו קטן או לא קיים. המאפיין הזה הוצא משימוש ב-Chrome 54. ההסרה צפויה להתבצע ב-Chrome 56.
כוונה להסיר | מעקב אחר הסטטוס של Chrome | באג ב-Chromium
הסרת SVGZoomEvent
SVGZoomEvent
אינו חלק ממפרט SVG2.0 ולא פועל ב-Chromium. למרות העובדה שהיא עדיין ניתנת לזיהוי, המפתחים עלולים לבלבל את המפתחים. הוא יוסר.