#[1]text/plain » Feed [2]text/plain » Comments Feed [3]text/plain »
  Demystifying Browsers Comments Feed [4]App-to-Web Communication:
  Launching Web Apps [5]alternate [6]alternate [7]text/plain
  [8]WordPress.com

  HideMenu

Pages

    * [9]About

[10]text/plain

  ericlaw talks about the web and software in general

  2020-02-09

Demystifying Browsers

  I started building browser extensions more than 22 years ago, and I
  started building browsers directly just over 16 years ago. At this
  point, I think it’s fair to say that I’m entering the grizzled veteran
  phase of my career.

  With the Edge team [11]continuing to grow with bright young minds from
  college and industry, I’m increasingly often asked “Where do I learn
  about browsers?” and I haven’t had a ready answer for that question.

  This post aims to answer it.

  First, a few prerequisites for developing expertise in browsers:
   1. Curiosity. While browsers are more complicated than ever, there are
      also better resources than ever to learn how they work. All major
      browsers are now based on open-source code, and if you’re curious,
      you no longer need to [12]join a secret priesthood to discover how
      they operate under the hood.
   2. Willingness to Experiment. Considering how complex browsers are
      (and because they’re so diverse, across platforms, maker, and
      version), it’s often easiest to definitively answer questions about
      how browsers work by trying things, rather than reading an
      explainer (possibly outdated or a map that doesn’t match the
      terrain) or reading the code (often complex and potentially
      misleading). Build test cases and try them in each browser to see
      what happens. When you encounter [13]surprising [14]behavior, let
      your curiosity guide you into figuring it out. Browsers contain no
      magic, but plenty of [15]butterfly effects.
   3. Doggedness. I’ve been doing this for half of my life, and I’m still
      learning daily. While historical knowledge will serve you well,
      things are changing in this space every day, and keeping up is an
      endless challenge. And it’s often fun.

  Now, how do you apply these prerequisites and grow to become a master
  of browsers? Read on.

Fundamental Understanding

  Over the years, a variety of broad resources have been developed that
  will give you a good foundation in the fundamentals of how browsers
  work. Taking advantage of these will help you more effectively explore
  and learn on your own.
    * First, I recommend reading [16]the Chrome Comic Book. This short,
      38 page comic book from legend Scott McCloud was published
      alongside the first version of Google Chrome back in 2008. It
      clearly and simply explains many of the core concepts behind modern
      browsers as application platforms.
    * HTML5Rocks has a great introduction into [17]How Browsers Work.
      This is a lengthy and detailed introduction into how browsers turn
      HTML and CSS into what you see on the screen. Read this article and
      you’ll understand more about this topic than 90% of web developers.
    * The folks at Google have created a fantastic four-part illustrated
      series about how modern browsers work: [18]Inside look at modern
      web browsers. [19]Navigation, [20]the Rendering Engine and
      [21]Input and Compositing as a part of their [22]Web Fundamentals
      site.
    * Mozilla wrote a fantastic [23]cartoon introduction to WebAssembly,
      explaining the basics behind this new technology; there’s tons of
      other invaluable content on [24]Mozilla Hacks.
    * [25]The Chromium Chronicle is a monthly series geared specifically
      to the Chromium developers who build the browser.
    * The [26]Chrome University [27]2[28]0[29]1[30]9 (and [31]2018) talks
      on YouTube are amazing.
    * Web Developers should check out [32]Web.Dev, a great source of
      articles on building fast and secure websites.

Books

  If you prefer to learn from books, I can recommend a few. Sadly, there
  are few on browsers themselves (largely because they tend to evolve too
  quickly), but there are good books on web technologies.
    * [33]High Performance Browser Networking can be [34]read online for
      free.
    * [35]HTTP2 in Action explains this important new protocol.
    * [36]The Tangled Web explains the web security model.
    * [37]Progressive Web Apps explores the technologies behind this new
      web application paradigm.

Tools

  One of the best ways to examine what’s going on with browsers is to
  just use tools to watch what’s going on as you use your favorite
  websites.
    * Built-in DevTools (just hit F12!) – They’re amazingly powerful. I
      don’t know of a great tutorial, but there are likely some [38]on
      YouTube.
    * [39]Telerik Fiddler – See what requests hit the network and what
      they contain.
    * [40]The VisBug Chrome Extension – Easily manipulate any page
      layout, directly in your browser.

Use the Source, Leia

  The fact that all of the major browsers are built atop open-source
  projects is a wonderful thing. No longer do you need to be a
  reverse-engineering ninja with a low-level debugger to figure out how
  things are meant to work (although sometimes such approaches can still
  be super-valuable).

  Source code locations:
    * Firefox‘s code can be searched via [41]Searchfox or [42]DXR.
    * Webkit source can be found [43]here, although I typically just
      search on a [44]mirror on GitHub.
    * Chromium‘s code is found in the [45]Code Search tool ([46]future
      version).
    * Microsoft Edge‘s code can be downloaded in giant (4gb) ZIP files
      from [47]here. Sadly, online search is not yet available.
    * [48]Brave‘s changes to Chromium can be found on GitHub.
    * The [49]HTML5 Specification is often useful.

Navigating the Code

  While simply perusing a browser’s source code might give you a good
  feel for the project, browsers tend to be enormous. Chromium is over 10
  million lines of code, for example.

  If you need to find something in particular, one often effective way to
  find it easily is to search for a string shown in the browser UI near
  the feature of interest. (Or, if you’re searching for a DOM function
  name or HTML attribute name, try searching for that.)

  By way of example, today I encountered an unexpected behavior in the
  handling of the “Go to <url>” command on Chromium’s context menu:

  So, to find the code that implements this feature, I first try
  searching for that string:

  …but there are a gazillion hits, which makes it hard to find what I
  need. So I instead search for a string that’s elsewhere in the context
  menu, and find only one hit in the Chromium “grd” (resources) file:

  When I go look at that grd file, I quickly find the identifier I’m
  really looking for just below my search result:

  So, we now know that we’re looking for usages of
  IDS_CONTENT_CONTEXT_GOTOURL, probably in a .CC file, and [50]we find
  that almost immediately:

  From here, we see that the menu item has the command identifier
  IDC_CONTENT_CONTEXT_GOTOURL, which we can then continue to chase down
  through the source until we find the code [51]that handles the command.
  That command makes use of a variable selection_navigation_url_, which
  is [52]filled elsewhere by some pretty complicated logic.

  After you gain experience in the Chromium code, you might learn “Oh,
  yeah, all of the context menu stuff is easy to find, it’s in the
  renderer_context_menu directory” and limit your searches to that area,
  but after four years of working on Chrome, I still usually start my
  searches broadly.

Look at their Bugs

  All browsers except Microsoft Edge have a public bug tracker where you
  can search for known issues and file new bugs if you encounter them.
    * Firefox – [53]Firefox Bugzilla
    * Webkit – [54]WebKit Bugzilla
    * Chromium – [55]CRBug
    * Microsoft Edge‘s – Platform bugs that are inherited from Chromium
      are tracked using [56]CRBug. Sadly, at present there is no public
      tracker for bugs that reproduce only in Edge. Bugs reported by the
      “Feedback” button are tracked internally by Microsoft.
    * Brave – [57]on GitHub
    * HTML5 Specification – [58]on GitHub

Blogs to Read

    * [59]This One – I write mostly about browsers.
    * My (archived) [60]IEInternals – I started writing this blog because
      it was the only reliable way for me to find my notes from
      investigations and troubleshooting years later.
    * [61]Cloudflare – Cloudflare is a $5B company whose primary product
      is their amazing blog. I understand they also run a CDN on the side
      to generate interesting topics for their blog to talk about.
    * [62]Nasko Oskov’s – Nasko is an engineer on the Chrome Security
      team and writes mostly about security topics.
    * [63]Chris Palmer’s – Chris is an engineer on the Chrome Security
      team and writes about secure design.
    * [64]Adam Langley’s – Google’s expert cryptographer
    * [65]Bruce Dawson’s – Bruce is a Chrome Engineer who posts lots of
      interesting information about debugging and performance
      troubleshooting, especially on Windows.
    * [66]Anne van Kesteren’s – Anne works on the HTML5 spec.
    * [67]Mark Nottingham’s – Mark co-chairs the HTTP and QUIC working
      groups

People to Follow

    * Lin Clark ([68]@linclark) draws [69]@codecartoons. These are my
      favorite thing in the universe.
    * Similarly, [70]@kosamari provides some of the clearest explanations
      of complicated browser topics.
    * The [71]@intenttoship bot publishes notices of browsers’ intention
      to launch new features
    * Other Chrome folks often tweet interesting things: [72]Mike West,
      [73]Alex Russell, [74]Paul Irish, [75]Jake Archibald, [76]Rick
      Byers, [77]Pete LePage, [78]Surma, [79]Jochen Eisinger, [80]Jeffrey
      Yasskin, [81]Yoav Weiss, [82]Chris Wilson, [83]Domenic Denicola,
      [84]Paul Kinlan, [85]Adrienne Porter Felt, [86]Emily Schechter,
      [87]Emily Stark, [88]Parisa Tabriz, [89]Nasko Oskov, [90]Simeon,
      [91]Ryan Sleevi, [92]Justin Schuh, [93]Rowan Merewood, [94]Peter
      Beverloo, [95]Dominick Ng, [96]Asanka Herath, [97]Darin Fisher,
      [98]Andrew Whalley, [99]Dion Almaer, [100]Mathias Bynens,
      [101]David Benjamin, [102]Bruce Dawson, [103]Addy Osmani, [104]Ilya
      Grigorik, [105]Mathieu Perreault, [106]Varun Khaneja, [107]Chris
      Thompson, [108]Ian Kilpatrick, [109]Avi Drissman
    * [110]PPK, [111]Michal Špaček, [112]François Remy, [113]Melanie
      Richards, [114]Tony Ross, [115]Mark Nottingham, [116]Alex Wykoff,
      [117]Mike Taylor, [118]Adam Langley, [119]Nic Jansma, [120]John
      Wilander, [121]othermaciej, [122]pes, [123]Artur Janc, [124]Ivan
      Fratric, [125]Lucas Pardoe, [126]Anne van Kesteren, [127]Aaron
      Gustafson, [128]Allen Wirfs-Brock, [129]J.C., [130]Adam Roach,
      [131]Zouhir, [132]Kamila Hasanbega, [133]Matt Holt, [134]John
      Graham-Cumming, [135]Jun Kokatsu, [136]Patrick Kettner, [137]Eiji
      Kitamura, [138]Jonathan Kingston, [139]Sampson, [140]Brian Clifton,
      [141]Brian Bondy, [142]Owen Campbell-Moore, [143]Natalie
      Silvanovich, [144]Alex Ainslie, [145]Mike Conley, [146]Tanvi,
      [147]Malte Ubl, [148]Chris Heilmann, [149]Monica Dinculescu,
      [150]Eric Mill, [151]Evan J, [152]eae, [153]Scott Helme, [154]April
      King, [155]Matthew Prince, [156]Yan, [157]Patrick Donahue,
      [158]Justin, [159]Jyrki Alakuijala, [160]James Forshaw, [161]Tim
      Kadlec, [162]Kyle Pflug, [163]Sam Sneddon, [164]David Storey,
      [165]Chris Love, [166]Travis Leithead, [167]Tammy Everts, [168]Greg
      Whitworth, [169]Sean Lyndersay, [170]Daniel Stenberg, [171]L. David
      Baron, [172]TJ VanToll, [173]John Jansen, [174]Patrick McManus,
      [175]Giorgio Maone, [176]Ben Adida, [177]Ivan Ristic, [178]Patrick
      Meenan, [179]Steve Souders, [180]Jungkee Song, [181]Dane Knecht,
      [182]Scott Low
    * [183]EdgeDevTools, [184]ChromeDevTools, [185]WebKit, [186]WebCompat
    * [187]Me :)

  I’ve doubtless forgotten some, [188]see who I follow.

Extra Resources

    * [189]CanIUse.com often has useful information.
    * [190]ChromeStatus and particularly their “[191]upcoming changes”
      schedule.
    * Chrome’s [192]OmahaProxy and [193]ChromiumDash.
    * [194]Chromium Design Docs – Some are badly outdated, but all of
      them are interesting.
    * [195]SSLLabs.com

  Browsers are hugely complicated beasts, and tons of fun. If the
  resources above leave you feeling both overwhelmed and excited, maybe
  you should become a browser builder.

  Want to change the world? [196]Come join the new Microsoft Edge team
  today!

  -Eric
  PS: Have I forgotten or overlooked a great resource for folks entering
  our field? Please leave me a comment!

Share this:

    * [197]Twitter
    * [198]Facebook
    *

Leave a Reply [199]Cancel reply

  Enter your comment here...

  ____________________________________________________________
  ____________________________________________________________
  ____________________________________________________________
  ____________________________________________________________

  Fill in your details below or click an icon to log in:
    *
    *
    *
    *
    *

  [200]Gravatar
  Email (required) (Address never made public)
  ____________________
  Name (required)
  ____________________
  Website
  ____________________
  WordPress.com Logo

  You are commenting using your WordPress.com account. ( [201]Log Out /
  [202]Change )
  Google photo

  You are commenting using your Google account. ( [203]Log Out /
  [204]Change )
  Twitter picture

  You are commenting using your Twitter account. ( [205]Log Out /
  [206]Change )
  Facebook photo

  You are commenting using your Facebook account. ( [207]Log Out /
  [208]Change )
  [209]Cancel

  Connecting to %s

  [ ] Notify me of new comments via email.

  [ ] Notify me of new posts via email.

  Post Comment

About ericlaw

  Impatient optimist. Dad. Author/speaker. Created Fiddler & SlickRun. PM
  @ MSFT '01-'12, and '18-, presently working on Microsoft Edge. My words
  are my own.

  [210]View all posts

Categories

  [211]browsers [212]dev [213]web

Tags

  [214]browsers [215]dev [216]webdev
  [217]Previous Post

App-to-Web Communication: Launching Web Apps

  [218]Blog at WordPress.com.


  ____________________________________________________________
  ____________________________________________________________
  ____________________________________________________________
  ____________________________________________________________
  Post to
  [219]Cancel Reblog Post

References

  Visible links
  1. https://textslashplain.com/feed/
  2. https://textslashplain.com/comments/feed/
  3. https://textslashplain.com/2020/02/09/demystifying-browsers/feed/
  4. https://textslashplain.com/2020/02/05/app-to-web-communication-launching-web-apps/
  5. https://public-api.wordpress.com/oembed/?format=json&url=https://textslashplain.com/2020/02/09/demystifying-browsers/&for=wpcom-auto-discovery
  6. https://public-api.wordpress.com/oembed/?format=xml&url=https://textslashplain.com/2020/02/09/demystifying-browsers/&for=wpcom-auto-discovery
  7. https://textslashplain.com/osd.xml
  8. https://s1.wp.com/opensearch.xml
  9. https://textslashplain.com/about/
 10. https://textslashplain.com/
 11. https://aka.ms/edgejobs
 12. https://textslashplain.com/2020/01/19/retiring-internet-explorer/
 13. https://textslashplain.com/2017/03/01/the-trouble-with-magic/
 14. https://docs.microsoft.com/en-us/archive/blogs/ieinternals/url-fragments-and-redirects
 15. https://docs.microsoft.com/en-us/archive/blogs/ieinternals/theres-never-magic-but-plenty-of-butterfly-effects
 16. https://www.google.com/googlebooks/chrome/big_00.html
 17. https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/
 18. https://developers.google.com/web/updates/2018/09/inside-browser-part1
 19. https://developers.google.com/web/updates/2018/09/inside-browser-part2
 20. https://developers.google.com/web/updates/2018/09/inside-browser-part3
 21. https://developers.google.com/web/updates/2018/09/inside-browser-part4
 22. https://developers.google.com/web/updates/2020
 23. https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webassembly/
 24. https://hacks.mozilla.org/
 25. https://developers.google.com/web/updates/tags/chromium-chronicle
 26. https://www.youtube.com/playlist?list=PLNYkxOF6rcICgS7eFJrGDhMBwWtdTgzpx
 27. https://www.youtube.com/playlist?list=PLNYkxOF6rcICgS7eFJrGDhMBwWtdTgzpx
 28. https://www.youtube.com/playlist?list=PLNYkxOF6rcICgS7eFJrGDhMBwWtdTgzpx
 29. https://www.youtube.com/playlist?list=PLNYkxOF6rcICgS7eFJrGDhMBwWtdTgzpx
 30. https://www.youtube.com/playlist?list=PLNYkxOF6rcICgS7eFJrGDhMBwWtdTgzpx
 31. https://www.youtube.com/results?search_query=chrome+university+2018
 32. https://web.dev/learn/
 33. https://amzn.to/2OH7qs2
 34. https://hpbn.co/
 35. https://amzn.to/31Ee87u
 36. https://amzn.to/38nPieV
 37. https://abookapart.com/products/progressive-web-apps
 38. https://www.youtube.com/results?search_query=Chrome+Developer+Tools
 39. https://fiddler2.com/
 40. https://chrome.google.com/webstore/detail/visbug/cdockenadnadldjbbgcallicgledbeoc/
 41. https://searchfox.org/
 42. https://dxr.mozilla.org/mozilla-central/source/
 43. https://trac.webkit.org/browser
 44. https://github.com/WebKit/webkit
 45. https://cs.chromium.org/
 46. https://source.chromium.org/chromium/chromium/src?originalUrl=https://cs.chromium.org/
 47. https://thirdpartysource.microsoft.com/
 48. https://github.com/brave/brave-core
 49. https://html.spec.whatwg.org/
 50. https://cs.chromium.org/chromium/src/chrome/browser/renderer_context_menu/render_view_context_menu.cc?l=1679&rcl=60c5f33a490f209ca3a4c10da85f9607869d65ae
 51. https://cs.chromium.org/chromium/src/chrome/browser/renderer_context_menu/render_view_context_menu.cc?l=2402&rcl=e35c96184d471a4c744097c93a9c4ac9a30d23b0
 52. https://cs.chromium.org/chromium/src/chrome/browser/renderer_context_menu/render_view_context_menu.cc?l=1649&rcl=e35c96184d471a4c744097c93a9c4ac9a30d23b0
 53. https://bugzilla.mozilla.org/home
 54. https://bugs.webkit.org/
 55. https://crbug.com/
 56. https://crbug.com/
 57. https://github.com/brave/brave-browser/issues
 58. https://github.com/whatwg/html/issues
 59. https://textslashplain.com/
 60. https://docs.microsoft.com/en-us/archive/blogs/ieinternals/
 61. https://blog.cloudflare.com/
 62. https://netsekure.org/
 63. https://noncombatant.org/
 64. https://www.imperialviolet.org/
 65. https://randomascii.wordpress.com/
 66. https://annevankesteren.nl/
 67. https://www.mnot.net/blog/
 68. https://twitter.com/linclark
 69. https://twitter.com/codecartoons
 70. https://twitter.com/kosamari
 71. https://twitter.com/intenttoship
 72. https://twitter.com/mikewest
 73. https://twitter.com/slightlylate
 74. https://twitter.com/paul_irish
 75. https://twitter.com/jaffathecake
 76. https://twitter.com/RickByers
 77. https://twitter.com/petele
 78. https://twitter.com/DasSurma
 79. https://twitter.com/jochen_e
 80. https://twitter.com/jyasskin
 81. https://twitter.com/yoavweiss
 82. https://twitter.com/cwilso
 83. https://twitter.com/domenic
 84. https://twitter.com/Paul_Kinlan
 85. https://twitter.com/__apf__
 86. https://twitter.com/emschec
 87. https://twitter.com/estark37
 88. https://twitter.com/laparisa
 89. https://twitter.com/nasko
 90. https://twitter.com/DotProto
 91. https://twitter.com/sleevi_
 92. https://twitter.com/justinschuh
 93. https://twitter.com/rowan_m
 94. https://twitter.com/beverloo
 95. https://twitter.com/dominickng
 96. https://twitter.com/asankah
 97. https://twitter.com/darinwf
 98. https://twitter.com/arw
 99. https://twitter.com/dalmaer
100. https://twitter.com/mathias
101. https://twitter.com/davidben__
102. https://twitter.com/BruceDawson0xB
103. https://twitter.com/addyosmani
104. https://twitter.com/igrigorik
105. https://twitter.com/madmath
106. https://twitter.com/aawc
107. https://twitter.com/notyetsecure
108. https://twitter.com/bfgeek
109. https://twitter.com/avidrissman
110. https://twitter.com/ppk
111. https://twitter.com/spazef0rze
112. https://twitter.com/FremyCompany
113. https://twitter.com/soMelanieSaid
114. https://twitter.com/trossweb
115. https://twitter.com/mnot
116. https://twitter.com/alex_wykoff
117. https://twitter.com/miketaylr
118. https://twitter.com/agl__
119. https://twitter.com/nicj
120. https://twitter.com/johnwilander
121. https://twitter.com/othermaciej
122. https://twitter.com/pes10k
123. https://twitter.com/arturjanc
124. https://twitter.com/ifsecure
125. https://twitter.com/SimmerVigor
126. https://twitter.com/annevk
127. https://twitter.com/AaronGustafson
128. https://twitter.com/awbjs
129. https://twitter.com/ciphercoffee
130. https://twitter.com/adambroach
131. https://twitter.com/_zouhir
132. https://twitter.com/KamilaHasanbega
133. https://twitter.com/mholt6
134. https://twitter.com/jgrahamc
135. https://twitter.com/shhnjk
136. https://twitter.com/patrickkettner
137. https://twitter.com/agektmr
138. https://twitter.com/KingstonTime
139. https://twitter.com/BraveSampson
140. https://twitter.com/_brianclifton
141. https://twitter.com/brianbondy
142. https://twitter.com/owencm
143. https://twitter.com/natashenka
144. https://twitter.com/alexainslie
145. https://twitter.com/mike_conley
146. https://twitter.com/TanviHacks
147. https://twitter.com/cramforce
148. https://twitter.com/codepo8
149. https://twitter.com/notwaldorf
150. https://twitter.com/konklone
151. https://twitter.com/ejcx_
152. https://twitter.com/ejcx_
153. https://twitter.com/Scott_Helme
154. https://twitter.com/aprilmpls
155. https://twitter.com/eastdakota
156. https://twitter.com/bcrypt
157. https://twitter.com/prdonahue
158. https://twitter.com/xxdesmus
159. https://twitter.com/jyzg
160. https://twitter.com/tiraniddo
161. https://twitter.com/tkadlec
162. https://twitter.com/kylealden
163. https://twitter.com/gsnedders
164. https://twitter.com/dstorey
165. https://twitter.com/ChrisLove
166. https://twitter.com/TravisLeithead
167. https://twitter.com/tameverts
168. https://twitter.com/gregwhitworth
169. https://twitter.com/SeanOnTwt
170. https://twitter.com/bagder
171. https://twitter.com/davidbaron
172. https://twitter.com/tjvantoll
173. https://twitter.com/thejohnjansen
174. https://twitter.com/mcmanusducksong
175. https://twitter.com/ma1
176. https://twitter.com/benadida
177. https://twitter.com/ivanristic
178. https://twitter.com/patmeenan
179. https://twitter.com/Souders
180. https://twitter.com/jungkees
181. https://twitter.com/dok2001
182. https://twitter.com/_scottlow
183. https://twitter.com/EdgeDevTools
184. https://twitter.com/chromeDevTools
185. https://twitter.com/webkit
186. https://twitter.com/webcompat
187. https://twitter.com/ericlaw
188. https://twitter.com/ericlaw/following
189. https://caniuse.com/
190. http://chromestatus.com/
191. https://chromestatus.com/features/schedule
192. https://omahaproxy.appspot.com/
193. https://chromiumdash.appspot.com/schedule
194. https://www.chromium.org/developers/design-documents
195. https://ssllabs.com/
196. https://aka.ms/edgejobs
197. https://textslashplain.com/2020/02/09/demystifying-browsers/?share=twitter
198. https://textslashplain.com/2020/02/09/demystifying-browsers/?share=facebook
199. https://textslashplain.com/2020/02/09/demystifying-browsers/#respond
200. https://gravatar.com/site/signup/
201. javascript:HighlanderComments.doExternalLogout( 'wordpress' );
202. https://textslashplain.com/2020/02/09/demystifying-browsers/
203. javascript:HighlanderComments.doExternalLogout( 'googleplus' );
204. https://textslashplain.com/2020/02/09/demystifying-browsers/
205. javascript:HighlanderComments.doExternalLogout( 'twitter' );
206. https://textslashplain.com/2020/02/09/demystifying-browsers/
207. javascript:HighlanderComments.doExternalLogout( 'facebook' );
208. https://textslashplain.com/2020/02/09/demystifying-browsers/
209. javascript:HighlanderComments.cancelExternalWindow();
210. https://textslashplain.com/author/ericlaw1979/
211. https://textslashplain.com/category/browsers/
212. https://textslashplain.com/category/dev/
213. https://textslashplain.com/category/tech/web/
214. https://textslashplain.com/tag/browsers/
215. https://textslashplain.com/tag/dev/
216. https://textslashplain.com/tag/webdev/
217. https://textslashplain.com/2020/02/05/app-to-web-communication-launching-web-apps/
218. https://wordpress.com/?ref=footer_blog
219. https://textslashplain.com/2020/02/09/demystifying-browsers/

  Hidden links:
221. https://textslashplain.com/
222. https://textslashplain.com/2020/02/09/demystifying-browsers/#comment-form-guest
223. https://textslashplain.com/2020/02/09/demystifying-browsers/#comment-form-load-service:WordPress.com
224. https://textslashplain.com/2020/02/09/demystifying-browsers/#comment-form-load-service:Twitter
225. https://textslashplain.com/2020/02/09/demystifying-browsers/#comment-form-load-service:Facebook