# WebKit

WebKit is an open-source web content engine for browsers and other applications.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Squarespace & Web Standards: How We Helped Bring HTML Video & Audio Lazy Loading to Today's Browsers

DevFeed: [Squarespace & Web Standards: How We Helped Bring HTML Video & Audio Lazy Loading to Today's Browsers](<https://devfeed.tech/articles/squarespace-web-standards-how-we-helped-bring-html-video-audio-lazy-loading-to-today-s-browsers-30781.md>)

Original publisher: [Read original article](<https://engineering.squarespace.com/blog/2026/squarespace-and-web-standards-how-we-helped-bring-html-video-and-audio-lazy-loading-to-todays-browsers>)

Author: Scott Jehl

Published: 2026-03-30T21:00:00Z

Content type: article

Language: en

Sources: [Squarespace](<https://devfeed.tech/sources/squarespace.md>), [Squarespace Engineering Blog](<https://devfeed.tech/sources/squarespace-engineering-blog.md>)

Topics: [web-standards](<https://devfeed.tech/topics/web-standards.md>), [lazy loading](<https://devfeed.tech/topics/lazy-loading.md>), [HTML](<https://devfeed.tech/topics/html.md>), [Web platform](<https://devfeed.tech/topics/web-platform.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [Chromium](<https://devfeed.tech/topics/chromium.md>), [Google Chrome](<https://devfeed.tech/topics/google-chrome.md>), [Firefox](<https://devfeed.tech/topics/firefox.md>)

Tags: [browsers](<https://devfeed.tech/tags/browsers.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [chromium](<https://devfeed.tech/tags/chromium.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [html](<https://devfeed.tech/tags/html.md>), [lazy-loading](<https://devfeed.tech/tags/lazy-loading.md>), [standards](<https://devfeed.tech/tags/standards.md>), [web-standards](<https://devfeed.tech/tags/web-standards.md>)

### AI overview

Squarespace engineers describe how they helped add lazy loading for HTML video and audio to the HTML Standard. They contributed proposed implementations for Firefox and WebKit, worked with Chromium developers on a Google Chrome implementation, and added automated testing.

### Source excerpt

At Squarespace, many of our core products are built on web standards, and our engineers are constantly pushing the boundaries of the web's capabilities. Occasionally, those boundaries reveal a limitation: an opportunity for the web's native capabilities to grow. This post is the story of how we found such an opportunity to work with the standards community to improve the web in a way that we - and everyone who uses it - can benefit.

## SwiftUI Custom URL Schemes

DevFeed: [SwiftUI Custom URL Schemes](<https://devfeed.tech/articles/swiftui-custom-url-schemes-21088.md>)

Original publisher: [Read original article](<https://useyourloaf.com/blog/swiftui-custom-url-schemes/>)

Author: Keith Harrison

Published: 2025-10-27T11:26:47Z

Content type: tutorial

Language: en

Sources: [K. Harrison](<https://devfeed.tech/sources/k-harrison.md>)

Topics: [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [WebView](<https://devfeed.tech/topics/webview.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [async](<https://devfeed.tech/tags/async.md>), [auto-layout](<https://devfeed.tech/tags/auto-layout.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios-26](<https://devfeed.tech/tags/ios-26.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [scheme](<https://devfeed.tech/tags/scheme.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>), [web](<https://devfeed.tech/tags/web.md>), [webview](<https://devfeed.tech/tags/webview.md>), [wwdc](<https://devfeed.tech/tags/wwdc.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

This tutorial explains how to create a custom URL scheme handler for SwiftUI WebViews in iOS 26. It covers implementing URLSchemeHandler, loading local HTML resources from an app bundle, registering the handler in a WebPage configuration, and displaying the page in a WebView.

### Source excerpt

Create a custom URL scheme handler for SwiftUI WebViews. Custom URL schemes Apple introduced both WebView and WebPage SwiftUI views in iOS 26. These provide similar WebKit functionality to the UIKit WKWebView APIs. This includes being able to register custom URL schemes to load local resources. Suppose I have an App that loads quotations from the local App bundle. My URL scheme uses the format: quotes://001.html There are a few steps to support a custom URL scheme: Create a custom URL scheme handler that knows how to load the local resources. Register the scheme handler in a WebPage configuration. Have the WebView load and display the web page. Let's look at each of those steps. URLSchemeHandler (iOS 26) The URLSchemeHandler is a protocol with a reply method to return an async sequence of results. The AsyncSequence expects us to either yield a URLResponse and some data or throw an error. struct QuoteSchemeHandler: URLSchemeHandler { static let scheme = "quotes" func reply(for request: URLRequest) -> some AsyncSequence< URLSchemeTaskResult, any Error > { AsyncThrowingStream { continuation in ... } } } The reply method provides us with the URLRequest. I start by extracting the URL and checking it matches our quotes scheme: guard let url = request.url else { continuation.finish(throwing: QuoteError.missingURL) return } guard url.scheme == QuoteSchemeHandler.scheme else { continuation.finish(throwing: QuoteError.invalidScheme) return } To construct the URL response I need the mime type and length of the data. I first extract the filename from the URL, determine the mime type from the file extension, and then load the data: do { let file = try filename(for: url) let mimeType = try mimeType(for: file) let data = try Data(contentsOf: file) I can then build the URLResponse: let response = URLResponse( url: url, mimeType: mimeType, expectedContentLength: data.count, textEncodingName: "utf-8" ) If nothing has gone wrong I then add the response and the data to the AsyncSequenc

## CSS random()

DevFeed: [CSS random()](<https://devfeed.tech/articles/css-random-20774.md>)

Original publisher: [Read original article](<https://erikrunyon.com/2025/10/css-random/>)

Author: Erik Runyon

Published: 2025-10-08T00:00:00Z

Content type: article

Language: en

Sources: [Erik Runyon](<https://devfeed.tech/sources/erik-runyon.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [safari](<https://devfeed.tech/tags/safari.md>), [web-development](<https://devfeed.tech/tags/web-development.md>)

### AI overview

The article examines Safari's non-standard CSS random() function, describing its random(min, max, step) syntax and current limitations. It explains that the function supports numeric and color contexts but not selectors or string values, and discusses possible uses such as random dimensions, collection items, images, and displayed random numbers.

### Source excerpt

Safari recently implemented a non-standard (yet?) CSS random() function (currently only in WebKit, and not yet part of any CSS specification). Since many recent CSS features are directly aimed at replacing common JavaScript functionality, I expected this function to do the same. While it has some neat use cases, it doesn't cover most of the scenarios where I currently use JavaScript's Math.random(). What it does The basic format of the function follows the pattern "random(min, max, step)". For instance, if you want to assign an element a random height between 50px and 200px, you would use "height: random(50px, 200px)". You can also include a "step" value like so "height: random(50px, 200px, 50px)" where the values will always be a multiple of 50. You can see more examples on the WebKit post "Rolling the Dice with CSS random()" and Frontend Masters "Very Early Playing with random() in CSS". What it doesn't Currently, random() can only be used in numeric or color contexts -- not in selectors or string values like URLs or text content. I have two primary use cases, and one just for fun. All three are marked-up as I would expect to use them if they were supported in the CodePen below. Random items from a collection A common pattern on many Notre Dame sites would be to show a random item from a collection. These could be content such as faculty spotlights, recent publications, or student profiles. We always know how many we're choosing from, and they're always contained to a specific section. So being able to use CSS to show a random child using ":nth-child" would be fantastic. Random images Less common is showing random images. This could be in a feature area on the homepage, or even a decorative background image. This would require the ability to concatenate a string with the random number. Random numbers A "just for fun" feature would be displaying the value from the random() function. My initial thought would be a CSS only dice roller. The demo in the pen would requir

## Apple's WebKit Feature Pace and Browser Competition on iOS

DevFeed: [Apple's WebKit Feature Pace and Browser Competition on iOS](<https://devfeed.tech/articles/comforting-myths-26558.md>)

Original publisher: [Read original article](<https://infrequently.org/2025/09/cupertinos-comforting-myths/>)

Author: Alex Russell

Published: 2025-09-23T00:00:00Z

Content type: opinion

Language: en

Sources: [Alex Russell](<https://devfeed.tech/sources/alex-russell.md>)

Topics: [WebKit](<https://devfeed.tech/topics/webkit.md>), [browsers](<https://devfeed.tech/topics/browsers.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Web](<https://devfeed.tech/topics/web.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [features](<https://devfeed.tech/tags/features.md>), [standards](<https://devfeed.tech/tags/standards.md>), [web](<https://devfeed.tech/tags/web.md>), [webdev](<https://devfeed.tech/tags/webdev.md>)

### AI overview

This opinion article examines Apple's approach to web-platform collaboration and feature development, arguing that WebKit has trailed Blink and Gecko while Apple's iOS policies prevent competing browsers from shipping alternative engines. It introduces data intended to assess claims about Apple's handling of challenging APIs.

### Source excerpt

Update: The charts below were inappropriately snapped, compressing the range of values. This has been corrected. Feature availability numbers also changed since drafting and have been updated. In several recent posts, I've attempted to address how the structure of standards bodies and their adjacent incubation venues accelerates or suppresses the potential of the web as a platform. The pace of progress matters because platforms are competitions, and actors that prevent expansions of basic capabilities risk consigning the web to the dustbin. Inside that framework, there is much to argue over regarding the relative merits of specific features and evolutionary directions. This is healthy and natural. We should openly discuss features and their risks, try to prevent bad consequences, and work to mend what breaks. This competitive process has made browsers incredibly safe and powerful for 30 years. Until iOS, that is. Imagine my surprise upon hearing that Apple isn't attempting to freeze the web in amber, preserving advantages for its proprietary platform, and that it instead offers to redesign proposals it disagrees with. Contents Background Is Apple Engaged In Constructive API Redesign? General Trends Hard Cases Overall Impressions What's Happening Here? As I have occasionally documented, this has not been my experience. I have relatively broad exposure to the patterns of Apple's collaboration, having designed, advised on, or led teams that built dozens of features across disparate areas of the platform since the Blink fork.1 But perhaps this was the wrong slice from which to judge? I've been hearing of Apple's openness to collaboration on challenging APIs so often that either my priors are invalid, or something else is at work. To find out, I needed data. Background A specific parry gets deployed whenever WebKit's sluggish feature pace comes up: "controversial" features "lack consensus" or "are not standards" or "have privacy and security problems" (unspecified). The

## Safari 16.4 Adds Long-Delayed Web Platform Features

DevFeed: [Safari 16.4 Adds Long-Delayed Web Platform Features](<https://devfeed.tech/articles/safari-16-4-is-an-admission-26538.md>)

Original publisher: [Read original article](<https://infrequently.org/2023/02/safari-16-4-is-an-admission/>)

Author: Alex Russell

Published: 2023-02-22T00:00:00Z

Content type: opinion

Language: en

Sources: [Alex Russell](<https://devfeed.tech/sources/alex-russell.md>)

Topics: [WebKit](<https://devfeed.tech/topics/webkit.md>), [browsers](<https://devfeed.tech/topics/browsers.md>), [Web platform](<https://devfeed.tech/topics/web-platform.md>), [PWA](<https://devfeed.tech/topics/pwa.md>)

Tags: [browsers](<https://devfeed.tech/tags/browsers.md>), [competition](<https://devfeed.tech/tags/competition.md>), [components](<https://devfeed.tech/tags/components.md>), [compression](<https://devfeed.tech/tags/compression.md>), [css](<https://devfeed.tech/tags/css.md>), [pwa](<https://devfeed.tech/tags/pwa.md>), [reporting](<https://devfeed.tech/tags/reporting.md>), [safari](<https://devfeed.tech/tags/safari.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [webdev](<https://devfeed.tech/tags/webdev.md>), [webrtc](<https://devfeed.tech/tags/webrtc.md>)

### AI overview

This commentary reviews Safari 16.4's web-platform additions, including PWA, Web Components, CSS, Web Codecs, WASM SIMD, compression, reporting, Canvas, and WebRTC changes. It argues that many features arrived years after Chromium implementations and notes some improvements remain limited to macOS and iPadOS.

### Source excerpt

If you're a web developer not living under a rock, you probably saw last week's big Safari 16.4 reveal. There's much to cheer, but we need to talk about why this mega-release is happening now, and what it means for the future. Contents WebKit's Roaring Twenties Good Things Come In Sixes What Changed? Headcount Is Destiny Early Innings But first, the list! WebKit's Roaring Twenties Apple's summary combines dozens of minor fixes with several big-ticket items. Here's an overview of the most notable features, prefixed with the year they shipped in Chromium: 2015: Web Push for iOS (but only for installed PWAs) 2020: PWA Badging API (for unread counts) and id support (making updates smoother) 2015: PWA installation for third-party browsers (but not to parity with "Smart Banners") A bevy of Web Components features, many of which Apple had held up in standards bodies for years1, including: 2019: Constructable Stylesheets (important for performance) 2019: Form participation and default ARIA role 2021: Declarative Shadow DOM for "SSR" Myriad small CSS improvements and animation fixes, but also: 2018: CSS Typed OM for faster styling from JavaScript 2020: CSS Custom Properties can now be animated 2019: <iframe> lazy loading 2017: Clear-Site-Data for Service Worker use at scale 2021: Web Codecs for video (but not audio) 2021: WASM SIMD for better ML and games 2020: Compression Streams 2018: Reporting API (for learning about crashes and metrics reporting) 2020: Screen Orientation & Screen Wake Lock APIs (critical for games) 2018: Offscreen Canvas (but only 2D, which isn't what folks really need) Critical usability and quality fixes for WebRTC A number of improvements look promising, but remain exclusive to macOS and iPadOS: Fullscreen API fixes AVIF and AV1 support The lack of iOS support for Fullscreen API on <canvas> elements continues to harm game makers; likewise, the lack of AVIF and AV1 holds back media and streaming businesses. Regardless, Safari 16.4 is astonishingly dens

## How Artsy Preserved Cookie Preferences Beyond Safari's 7-Day Limit

DevFeed: [How Artsy Preserved Cookie Preferences Beyond Safari's 7-Day Limit](<https://devfeed.tech/articles/hacking-around-safari-s-7-day-cookie-limit-19161.md>)

Original publisher: [Read original article](<https://artsy.github.io/blog/2022/08/23/getting-around-7-day-cookie/>)

Published: 2022-08-23T00:00:00Z

Content type: tutorial

Language: en

Sources: [Artsy](<https://devfeed.tech/sources/artsy.md>)

Topics: [browser](<https://devfeed.tech/topics/browser.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [User experience (UX)](<https://devfeed.tech/topics/ux.md>), [client](<https://devfeed.tech/topics/client.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [browser](<https://devfeed.tech/tags/browser.md>), [ccpa](<https://devfeed.tech/tags/ccpa.md>), [cookies](<https://devfeed.tech/tags/cookies.md>), [gdpr](<https://devfeed.tech/tags/gdpr.md>), [privacy](<https://devfeed.tech/tags/privacy.md>), [safari](<https://devfeed.tech/tags/safari.md>), [server](<https://devfeed.tech/tags/server.md>), [ux](<https://devfeed.tech/tags/ux.md>), [wwdc](<https://devfeed.tech/tags/wwdc.md>)

### AI overview

This article explains how Artsy addressed Safari's seven-day limit on client-side cookies, which caused cookie-consent preferences to be repeatedly requested. It describes replacing the client-side cookie with a same-domain, secure, server-side cookie so the preferences persist beyond seven days.

### Source excerpt

Amongst the many, many things that organizations have to contend with around cookie consent laws is Apple's very own browser, Safari. Did you know that Safari will only retain a client-side cookie for 7 days? This is in support of Apple's Intelligent Tracking Prevention (ITP) feature, designed to protect a user's privacy. These privacy efforts are great but, in hand with laws like GDPR and CCPA, their rollout often creates a UX nightmare for users without some extra care. Here at Artsy, we've landed on a way to make things slightly less bad and want to share our approach. Scenario: Imagine that as a EU resident you visit artsy.net for the first time. A banner appears asking you to Accept or Deny tracking cookies from our site. You don't like tracking cookies, so you click the "Deny" button and the banner disappears. All good, right? Nope! You visit Artsy a week later and again, a banner appears asking you to choose your preferences. This happens again and again until you switch browsers and realize that what you were experiencing was Apple's ITP feature in action. After choosing your preferences, the cookie we use to store them is erased after 7 days, necessitating another interaction. We thrashed around in this vicious cycle for months until we found a simple, elegant solution thanks to a WebKit engineer's prompt (during Apple's open lab calls at WWDC - which you too can schedule!) She mentioned that the 7-day cookie limitation only applies to client-side cookies and that same-domain, secure, server-side cookies are not limited to these constraints. This got us thinking. Our third-party cookie consent management service sets a client-side cookie, not a server-side cookie. Could we perhaps overwrite the client-side cookie with a server-side cookie of the same name and trick Safari into persisting the user preferences beyond the 7-day limit? We gave it a try and... Yes. We. Can! And this means that you can too (and it's also real easy to implement). First, define an AP

## Safari's approach may push web developers and users toward Chromium

DevFeed: [Safari's approach may push web developers and users toward Chromium](<https://devfeed.tech/articles/safari-isn-t-protecting-the-web-it-s-killing-it-19095.md>)

Original publisher: [Read original article](<https://httptoolkit.com/blog/safari-is-killing-the-web/>)

Author: HTTP Toolkit; Tim Perry

Published: 2021-07-28T15:50:00Z

Content type: opinion

Language: en

Sources: [HTTP Toolkit](<https://devfeed.tech/sources/http-toolkit.md>)

Topics: [browser](<https://devfeed.tech/topics/browser.md>), [Web](<https://devfeed.tech/topics/web.md>), [Chromium](<https://devfeed.tech/topics/chromium.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [browser](<https://devfeed.tech/tags/browser.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [chromium](<https://devfeed.tech/tags/chromium.md>), [safari](<https://devfeed.tech/tags/safari.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

This opinion article argues that Safari's unimplemented features, bugs, and slow release cycle can harm web development and may push developers and users toward Chromium. The author avoids speculating about Apple's motivations and argues that browser diversity remains important.

### Source excerpt

There's been a lot of discussion recently about how "Safari is the new IE" (1, 2, 3, 4, 5). I don't want to rehash the basics of that, but I have seen some interesting rebuttals, most commonly: Safari is actually protecting the web, by resisting adding unnecessary and experimental features that create security/privacy/bloat problems. That is worth further discussion, because it's widespread, and wrong. More specifically, Safari's approach isn't protecting the web from bloat & evil Google influence, because: Most features that Safari hasn't implemented have no hint of security, privacy or performance concerns, and they've been implemented in every other browser already. The largest Safari complaint is unrelated to experimental features from the Chrome team: it's the showstopping bugs in implemented features, made worse by Safari's slow release cycle. Refusing to engage with the contentious API proposals for real use cases doesn't actually protect the web anyway - it just pushes web developers and users into the arms of Chromium. We'll dig into each of these points in more detail in a second, and then we'll talk about what Safari could do instead. There have been other arguments made too, including much speculation about why Safari might be killing the web - is this motivated by protecting Apple's app store profits? I'm going to ignore those suggestions entirely, and stick to concrete problems. Their reasons are their own, outside Apple we can do little more than guess, and the concrete issues can make the point without conjecture. Before we start, I do want to recognize that the Safari/WebKit team are working hard, and I do desperately want them to succeed! Chromium's domination is bad for everybody, and building a popular browser that's focused on privacy & security, as they appear to be trying to do, is a fantastic goal. That does not mean their current approach deserves our blind support. I'm sure the Safari team are working on the issues below already, and I thin

## CVE-2017-2446 or JSC::JSGlobalObject::isHavingABadTime.

DevFeed: [CVE-2017-2446 or JSC::JSGlobalObject::isHavingABadTime.](<https://devfeed.tech/articles/cve-2017-2446-or-jsc-jsglobalobject-ishavingabadtime-39706.md>)

Original publisher: [Read original article](<https://doar-e.github.io/blog/2018/07/14/cve-2017-2446-or-jscjsglobalobjectishavingabadtime/>)

Author: yrp

Published: 2018-07-15T01:49:00Z

Content type: tutorial

Language: en

Sources: [Diary of a reverse-engineer](<https://devfeed.tech/sources/diary-of-a-reverse-engineer.md>)

Topics: [Exploit](<https://devfeed.tech/topics/exploit.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>), [Linux](<https://devfeed.tech/topics/linux.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [cve](<https://devfeed.tech/tags/cve.md>), [cve-2017-2446](<https://devfeed.tech/tags/cve-2017-2446.md>), [exploit](<https://devfeed.tech/tags/exploit.md>), [exploitation](<https://devfeed.tech/tags/exploitation.md>), [javascriptcore](<https://devfeed.tech/tags/javascriptcore.md>), [jsc](<https://devfeed.tech/tags/jsc.md>), [linux](<https://devfeed.tech/tags/linux.md>)

### AI overview

A technical post describes developing an exploit for the JavaScriptCore engine targeting CVE-2017-2446. It covers the author's background, WebKit exploitation resources, vulnerable-version setup, tooling, and a Linux-based JSC target.

### Source excerpt

Introduction This post will cover the development of an exploit for JavaScriptCore (JSC) from the perspective of someone with no background in browser exploitation. Around the start of the year, I was pretty burnt out on CTF problems and was interested in writing an exploit for something more complicated and ...

## Use skip navigation links

DevFeed: [Use skip navigation links](<https://devfeed.tech/articles/use-skip-navigation-links-9413.md>)

Original publisher: [Read original article](<https://a11yproject.com/posts/skip-nav-links/>)

Author: Cameron Cundiff

Published: 2013-05-11T00:00:00Z

Content type: article

Language: en

Sources: [The A11Y Project](<https://devfeed.tech/sources/the-a11y-project.md>)

Topics: [aria](<https://devfeed.tech/topics/aria.md>), [polyfill](<https://devfeed.tech/topics/polyfill.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [browsers](<https://devfeed.tech/topics/browsers.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [bug](<https://devfeed.tech/topics/bug.md>)

Tags: [aria](<https://devfeed.tech/tags/aria.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [bug](<https://devfeed.tech/tags/bug.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [polyfill](<https://devfeed.tech/tags/polyfill.md>)

### AI overview

The article explains how skip navigation links help keyboard users and screen-reader users bypass repeated navigation and reach a page's main content. It recommends combining skip links with a clear heading structure and ARIA landmarks, and discusses JavaScript polyfills for WebKit-based browsers affected by a browser bug.

### Source excerpt

Use skip nav links in conjunction with a coherent heading outline and ARIA landmarks. You may need to also implement a JavaScript polyfill for Webkit-based browsers. It can be frustrating and fatiguing for folks with limited mobility to have to have to repeatedly tab through navigation links to get to the main content of a page. People who use screen readers face similar frustration when the page outline is not well defined. In order to address this issue, WCAG 2.0 has specified a guideline for bypassing repetitive blocks of content. One technique recommended by the W3C is to include a skip navigation link at the beginning of the page, that changes focus to the first element after the repeated content. Skip nav links are useful for users who use keyboard navigation only, but screen readers now support more sophisticated ways of navigating regions. Specifically, they support heading navigation and ARIA landmarks. You should take advantage of these features by using a clear heading outline and defining page regions, as illustrated in Quick Tip: ARIA Landmark Roles. Example <body> <a href="#main">Skip to main content</a> <nav role="navigation"> <ul> <li><a href="/">Home</a></li> <li><a href="/about">About</a></li> <li><a href="/blog">Blog</a></li> </ul> </nav> <main id="main"> <!-- page specific content --> </main> </body> Disclaimer: The mechanism by which skip navigation links work had for some time been broken in Webkit-based browsers and has only recently been fixed. Until these browsers release the fixes, you may need to use a JavaScript polyfill to make skip nav links work. Notes Jim Thatcher pioneered skip navigation links as early as 1998 An example of a JavaScript polyfill by Nicholas C. Zakas. An alternative non-Javascript method would be to add tabindex="-1" or 0 to elements that don't normally receive focus. This adds them to the tab order. The bug in Chrome looks to apply to anchors as well. However, the tabindex bypasses the issue.

## WebKit for Developers

DevFeed: [WebKit for Developers](<https://devfeed.tech/articles/webkit-for-developers-21679.md>)

Original publisher: [Read original article](<https://paulirish.com/2013/webkit-for-developers/>)

Author: Paul Irish

Published: 2013-02-28T10:53:00Z

Content type: article

Language: en

Sources: [Paul Irish](<https://devfeed.tech/sources/paul-irish.md>)

Topics: [WebKit](<https://devfeed.tech/topics/webkit.md>), [browsers](<https://devfeed.tech/topics/browsers.md>), [web browser](<https://devfeed.tech/topics/web-browser.md>), [Parsing](<https://devfeed.tech/topics/parsing.md>), [Web platform](<https://devfeed.tech/topics/web-platform.md>), [Chromium](<https://devfeed.tech/topics/chromium.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apple](<https://devfeed.tech/tags/apple.md>), [browser](<https://devfeed.tech/tags/browser.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [chromium](<https://devfeed.tech/tags/chromium.md>), [css](<https://devfeed.tech/tags/css.md>), [developers](<https://devfeed.tech/tags/developers.md>), [html](<https://devfeed.tech/tags/html.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [mac-os](<https://devfeed.tech/tags/mac-os.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [safari](<https://devfeed.tech/tags/safari.md>), [web](<https://devfeed.tech/tags/web.md>), [web-browser](<https://devfeed.tech/tags/web-browser.md>)

### AI overview

This article explains WebKit as an open browser engine and examines how WebKit-based browsers share components while differing across platform-specific ports. It covers parsing, layout, rendering, networking, hardware acceleration, and WebKit's use in Safari, GTK-based environments, and mobile browsers, while preserving a historical snapshot from early 2013.

### Source excerpt

Feb 2015: A lot's happened since I wrote this post two years ago. Chrome forked WebKit and started Blink, Opera adopted Chromium, and node-webkit became nw.js. This post describes a complexity of defining WebKit that doesn't exist much anymore; with Chrome's departure the WebKit world is more simple and clear. WebKit is deployed through iOS Safari and Mac Safari, and the active GTK community leverages WebKit inside the GNOME Platform. Some smaller mobile browsers use WebKit, some Chromium, some use forks of either, and many just use the system WebViews that are both powered by up-to-date version of iOS WebKit and Android Chromium. The post below is kept intact and represents a snapshot of history in early 2013, rather than the modern WebKit landscape. For many of us developers, WebKit is a black box. We throw HTML, CSS, JS and a bunch of assets at it, and WebKit, somehow.. magically, gives us a webpage that looks and works well. But in fact, as my colleague Ilya Grigorik puts it... WebKit isn't a black box. It's a white box. And not just that, but an open, white box. So let's take a moment to understand some things: What is WebKit? What isn't WebKit? How is WebKit used by WebKit-based browsers? Why are all WebKits not the same? Now, especially with the news that Opera has moved to WebKit, we have a lot of WebKit browsers out there, but its pretty hard to know what they share and where they part ways. Below we'll hopefully shine some light on this. As a result you'll be able to diagnose browser differences better, report bugs at the right tracker, and understand how to develop against specific browsers more effectively. Standard Web Browser Components Let's lay out a few components of the modern day web browser: Parsing (HTML, XML, CSS, JavaScript) Layout Text and graphics rendering Image decoding GPU interaction Network access Hardware acceleration Which of those are shared in WebKit-based browsers? Pretty much only the first two. The others are handled by individual

## Waveforms, Let's Talk About Them

DevFeed: [Waveforms, Let's Talk About Them](<https://devfeed.tech/articles/waveforms-let-s-talk-about-them-2177.md>)

Original publisher: [Read original article](<https://developers.soundcloud.com/blog//waveforms-let-s-talk-about-them>)

Published: 2012-06-26T00:00:00Z

Content type: article

Language: en

Sources: [SoundCloud Backstage Blog](<https://devfeed.tech/sources/soundcloud-backstage-blog.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Canvas](<https://devfeed.tech/topics/canvas.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [CSS](<https://devfeed.tech/topics/css.md>), [jQuery](<https://devfeed.tech/topics/jquery.md>), [HTML](<https://devfeed.tech/topics/html.md>)

Tags: [announcements](<https://devfeed.tech/tags/announcements.md>), [css](<https://devfeed.tech/tags/css.md>), [html](<https://devfeed.tech/tags/html.md>), [image](<https://devfeed.tech/tags/image.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [learn](<https://devfeed.tech/tags/learn.md>), [library](<https://devfeed.tech/tags/library.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [server](<https://devfeed.tech/tags/server.md>), [techniques](<https://devfeed.tech/tags/techniques.md>)

### AI overview

This SoundCloud developer article introduces Waveform.js, a JavaScript library for coloring audio waveforms. It reviews element stacking, WebKit masking, and Canvas-based pixel manipulation, including a server-side workaround for cross-domain image restrictions and a jQuery plugin implementation.

### Source excerpt

Waveforms I've worked at SoundCloud for over two years now, and if there's one thing I do a lot, it's color waveforms. Tons of them. And, I've done it several different ways. Today, Johannes and I are pumped to announce a new JavaScript library called Waveform.js that will assist you in your coloring efforts. But first, let's take some time to look back and learn from past techniques.

## \* { box-sizing: border-box } FTW

DevFeed: [\* { box-sizing: border-box } FTW](<https://devfeed.tech/articles/box-sizing-border-box-ftw-21670.md>)

Original publisher: [Read original article](<https://paulirish.com/2012/box-sizing-border-box-ftw/>)

Author: Paul Irish

Published: 2012-02-01T17:11:00Z

Content type: article

Language: en

Sources: [Paul Irish](<https://devfeed.tech/sources/paul-irish.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [browser](<https://devfeed.tech/topics/browser.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [polyfill](<https://devfeed.tech/topics/polyfill.md>), [jQuery](<https://devfeed.tech/topics/jquery.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [css](<https://devfeed.tech/tags/css.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [front-end](<https://devfeed.tech/tags/front-end.md>), [layout](<https://devfeed.tech/tags/layout.md>), [padding](<https://devfeed.tech/tags/padding.md>), [polyfill](<https://devfeed.tech/tags/polyfill.md>)

### AI overview

This article recommends applying a natural border-box sizing model to all elements by setting box-sizing on html and inheriting it through elements and pseudo-elements. It explains how this keeps declared widths stable when padding is added, discusses browser support and required prefixes for older Firefox, iOS, and Android versions, and notes compatibility with jQuery, Chrome DevTools, and mobile devices.

### Source excerpt

One of my least favorite parts about layout with CSS is the relationship of width and padding. You're busy defining widths to match your grid or general column proportions, then down the line you start to add in text, which necessitates defining padding for those boxes. And 'lo and behold, you now are subtracting pixels from your original width so the box doesn't expand. Ugh. If I say the width is 200px, gosh darn it, it's gonna be a 200px wide box even if I have 20px of padding. So as you know, this is NOT how the box model has worked for the past ten years. Wikipedia has a great history of this box model. Jeff Kaufman also dove into the history Anyway, I have a recommendation for your CSS going forward: 1 2 3 4 5 6 7 /* apply a natural box layout model to all elements, but allowing components to change */ html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; } Update August 2014: This code was updated to match new box-sizing best practices. Also prefixes are pretty much dead. This gives you the box model you want. Applies it to all elements. Turns out many browsers already use border-box for a lot of form elements (which is why inputs and textareas look diff at width:100%;) But applying this to all elements is safe and wise. Browser support Due to browser support, this recommendation is only for projects that support IE8 and up. (Full browser compat at MDN) Firefox <= 28 still needs the -moz- prefix, and <= iOS4, Android <= 2.3 need the -webkit-, but everyone else uses the unprefixed. You can find more info about a box-sizing polyfill for IE6 & 7 at html5please.com/#box-sizing (which was developed with * { box-sizing: border-box!). Is it safe to use? Totally. jQuery works pretty great with it (except this). As mentioned, browser support is excellent. And a number of projects use this layout model by default, including the WebKit Web Inspector (aka Chrome DevTools). I heard from Dutch front-end developer Yathura Thorn on his experience: We've

## Mobile: Unit Testing

DevFeed: [Mobile: Unit Testing](<https://devfeed.tech/articles/mobile-unit-testing-2082.md>)

Original publisher: [Read original article](<https://developers.soundcloud.com/blog//mobile-unit-testing>)

Published: 2011-09-12T00:00:00Z

Content type: article

Language: en

Sources: [SoundCloud Backstage Blog](<https://devfeed.tech/sources/soundcloud-backstage-blog.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Mocking](<https://devfeed.tech/topics/mocking.md>), [jQuery](<https://devfeed.tech/topics/jquery.md>), [Selenium](<https://devfeed.tech/topics/selenium.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [Jenkins](<https://devfeed.tech/topics/jenkins.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [browser](<https://devfeed.tech/tags/browser.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [jenkins](<https://devfeed.tech/tags/jenkins.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mocking](<https://devfeed.tech/tags/mocking.md>), [safari](<https://devfeed.tech/tags/safari.md>), [selenium](<https://devfeed.tech/tags/selenium.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>)

### AI overview

This article describes SoundCloud's early-2011 experience establishing JavaScript unit testing for its Mobile project. It covers the selection of QUnit, Mockjax for mocking API requests, PhantomJS for browser-like test execution in Jenkins-based continuous integration, and the evaluation of Selenium and TestSwarm.

### Source excerpt

When we started the Mobile project early 2011, unit testing JavaScript was one of the goals to tackle on the technical side. The history of...