# Elm app not compatible with ChromeVox screen reader

**URL:** <https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682>\
**Category:** Request Feedback\
**Created:** [May 22, 2019, 1:17am UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682 "2019-05-22T01:17:00Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![berend](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/berend/32/2250_2.png) [@berend](https://discourse.elm-lang.org/u/berend)\
**Post date:** [May 22, 2019, 1:17am UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682/1 "2019-05-22T01:17:00Z")

</div>

When I try to run my Elm app with [ChromeVox](https://chrome.google.com/webstore/detail/chromevox/kgejglhpjiefppelpmljglcjbhoiplfn?hl=en), I see a continual stream of “Uncaught TypeError: Cannot read property ‘childNodes’ of undefined”.

What I’m guessing is I’m hitting a case similar to [what is described here](https://discourse.elm-lang.org/t/fullscreen-elm-app-in-0-19-childnode-issue-reopened/3174): i.e. it’s caused by Elm taking over the body.

Do I have any resolution to make my app compatible with screen readers?

---

<div class="post-metadata">

**Author:** ![avh4](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/avh4/32/97_2.png) [@avh4](https://discourse.elm-lang.org/u/avh4)\
**Post date:** [May 22, 2019, 2:56am UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682/2 "2019-05-22T02:56:22Z")

</div>

As noted in the thread you linked, [Evan appears interested](https://discourse.elm-lang.org/t/fullscreen-elm-app-in-0-19-childnode-issue-reopened/3174/20) in seeing a reproducible example of the problem. I imagine he’d accept a fix for this in a future version of elm/browser if there were clear examples of how the current implementation breaks (if you have some, you should open an [issue against elm/browser](https://github.com/elm/browser/issues)).

As far as workarounds, if it seems like Elm controlling `<body>` is the problem, you could switch from `Browser.application` to `Browser.element`. (I think this was also all covered in the other thread you linked.) If you still need control of the page title and/or need to interact with navigation commands, you could do that with the help of javascript using [ports](https://guide.elm-lang.org/interop/ports.html). (Though depending on how much of the SPA stuff in `Browser.application` you were relying on, that might get to be quite a bit of extra work.)

---

<div class="post-metadata">

**Author:** ![Hector](https://avatars.discourse-cdn.com/v4/letter/h/43a26b/32.png) [@Hector](https://discourse.elm-lang.org/u/Hector)\
**Post date:** [May 22, 2019, 2:34pm UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682/3 "2019-05-22T14:34:30Z")

</div>

> [@avh4](#):
>
> (if you have some, you should open an [issue against elm/browser](https://github.com/elm/browser/issues)).

There is also this issue:

> <https://github.com/elm/html/issues/44>
>
> elm.fullscreen attaches to \`body\`. Sadly a lot of chrome extensions actually inj…ect things into the \`body\`. This causes errors because the virtual dom goes out so sync with the real dom (that's been messed with). This causes the following error: 
> 
> (this is an onClick event however anything that changes the dom will mess with it)
> 
> !\[error\](https://cloud.githubusercontent.com/assets/164033/16359148/ce6af7f2-3ae6-11e6-8fb7-87b6d87c4dea.png)
> 
> \`\`\`
> 
> 
> Main.elm:6446 Uncaught TypeError: Cannot read property 'childNodes' of undefinedaddDomNodesHelp 
> @ Main.elm:6446addDomNodesHelp 
> @ Main.elm:6454addDomNodesHelp
> @ Main.elm:6454addDomNodesHelp
> @ Main.elm:6454addDomNodes 
> @ Main.elm:6400applyPatches 
> @ Main.elm:6482updateIfNeeded 
> @ Main.elm:5855requestAnimationFrame (async)registerVirtualNode
> @ Main.elm:5834(anonymous function) 
> @ Main.elm:3000step 
> @ Main.elm:2737work 
> @ Main.elm:2793setTimeout (async)enqueue 
> @ Main.elm:2782rawSend 
> @ Main.elm:2633enqueue
> @ Main.elm:3012eventHandler
> @ Main.elm:6049
> \`\`\`
> 
> I would propose that Elm.fullscreen actually make a "elm-html" div to embed itself into rather using the body itself. I think this would help prevent people from messing with it.

---

<div class="post-metadata">

**Author:** ![francescortiz](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/francescortiz/32/1721_2.png) [@francescortiz](https://discourse.elm-lang.org/u/francescortiz)\
**Post date:** [May 22, 2019, 10:43pm UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682/4 "2019-05-22T22:43:32Z")

</div>

IMHO, this is kind of silly. As the thread explains, all other app frameworks add a div instead of using the whole body. And switching to Browser.element instead means that you have to reimplement your navigation logic with ports. The patch against the generated javascript seems much quicker to implement. And, please correct me if I am wrong, but I haven’t heard anything about future plans for dropping current implementation of Browser.application.

---

<div class="post-metadata">

**Author:** ![avh4](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/avh4/32/97_2.png) [@avh4](https://discourse.elm-lang.org/u/avh4)\
**Post date:** [May 23, 2019, 12:19am UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682/5 "2019-05-23T00:19:04Z")

</div>

> [@francescortiz](#):
>
> The patch against the generated javascript seems much quicker to implement

Ah, sorry, I didn’t read the other thread in enough detail to notice that alternate workaround.

---

<div class="post-metadata">

**Author:** ![berend](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/berend/32/2250_2.png) [@berend](https://discourse.elm-lang.org/u/berend)\
**Post date:** [May 23, 2019, 2:11am UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682/6 "2019-05-23T02:11:43Z")

</div>

> [@francescortiz](#):
>
> The patch against the generated javascript seems much quicker to implement.

I had seen that, but it wasn’t that easy for me. I’m using the elm-hot-webpack-loader so no clue how I can intercept/inject my own stuff. And below that somebody claims the posted code needed some work.

Perhaps I should fork me own compiler, or ask CurrySoftware to fix this [in their fork](https://github.com/CurrySoftware/compiler).

---

<div class="post-metadata">

**Author:** ![francescortiz](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/francescortiz/32/1721_2.png) [@francescortiz](https://discourse.elm-lang.org/u/francescortiz)\
**Post date:** [May 24, 2019, 1:38pm UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682/7 "2019-05-24T13:38:13Z")

</div>

Wow, I didn’t know about this elm fork. They look towards custom repos which probable means allowing JavaScript. This is exactly what elm is missing! If they do fix the body issue or add this repos functionality I will absolutely move to their compiler. So ask them! 😀

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex035/uploads/elm_lang/original/1X/50a05e53677a2c3b47776d7abd0f113eb50193a1.png) [@system](https://discourse.elm-lang.org/u/system)\
**Post date:** [June 3, 2019, 1:38pm UTC](https://discourse.elm-lang.org/t/elm-app-not-compatible-with-chromevox-screen-reader/3682/8 "2019-06-03T13:38:14Z")

</div>

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.
