Using the JAWS Scripts For Microsoft Teams
Doug Lee
Last Revised October, 2021

This Guide provides tips for using Microsoft Teams (Teams) with JAWS For Windows and these scripts. When the scripts are installed and Teams is open and focused, this document can be opened via a double press of JAWSKey+F1 (or Insert+F1). For more general information about using Teams with a screen reader, consult Using Microsoft Teams With a Screen Reader.

Development of these scripts was funded in part by Level Access, for which this author is most grateful.

Table of Contents

System Requirements For JAWS Users

These scripts require JAWS 2019 or greater. JAWS versions prior to 2019 do not include native Teams scripts, which these scripts load in order to avoid blocking JAWS native support. If running JAWS 2019, be sure it is the latest update to that JAWS version in order to avoid problems loading the scripts.

Script Installation Instructions

To install these scripts on a new system:

  1. Load JAWS if this has not already been done. This will require administrative privileges on the computer.
  2. Run JAWS as the user for whom the scripts are to be installed. This and the following steps must be performed for each user of the computer who will be using JAWS with these scripts.
  3. Download and run, or run directly, the installer for these scripts; and follow the on-screen directions. Be sure to install the scripts in the currently running JAWS version if a JAWS version list is presented.
  4. To verify successful installation, type Insert+Q while Teams is in focus. Part of the JAWS spoken response should be a revision number. If you do not hear a revision number, the scripts are not correctly loaded. If you are using an old JAWS version, it may be necessary to install or reinstall the Script Load Manager (slman) scripts to manage Electron app script loading for your JAWS version.

Key Sequences

These scripts incorporate commands that consist of sequences of keystrokes, all beginning with a common prefix, or "command keystroke." This approach allows many script commands without the risk of conflicting with application keystrokes. See the "Multi-Key Command Sequences" section of the "Common Script Elements" document for further details, including how to explore the available script commands (similar to exploring a menu system), and how to change the Command keystroke if necessary.

By default, the Command keystroke for these scripts is [. This document may refer to this keystroke as [ or Command; so, for example, [ Tab and Command Tab both refer to typing the prefix keystroke, then separately the Tab key. Some sequences may consist of more than two keystrokes, or "levels"; for example, [ d r would refer to typing [, then d, then finally r.

Using Teams With JAWS and the Scripts

Optimal Teams Configuration

For best results, this author recommends the following adjustments to the default Teams configuration, all made in Settings which is reachable with Ctrl+Comma:

Script Commands and Features

The scripts provide the following features, commands, and command modifications:

Message reading system
A system for improving the reading of messages. See The Message Reading System for details and relevant commands.
Automatic fix for Teams window structure problems when possible
Sometimes, Teams' accessibility information winds up owned by another window that is not part of Teams, which causes screen readers to become confused. These scripts try to detect and rectify this situation when Teams takes focus. If you hear an announcement like
Teams needs to be maximized and/or restored in order to fix a problem affecting screen readers. If this fails, restart Teams.
try flipping Teams between the Restored and Maximized states. If this does not work, restart Teams.
[ C
Moves focus to a tree control, which one depending on the active screen:
[ Shift+T
Announces who is typing in the displayed conversation.
Quick Settings (JAWSKey+V) additions
[ N and [ Shift+N
Move focus to the next and prior areas of the screen, respectively. These command sequences are duplicates of the native Ctrl+F6 and Ctrl+Shift+F6 commands and are included for those who prefer to avoid key combinations that require moving the hands away from the home row on the keyboard. They may also be useful to users of Bluetooth keyboards that require an extra Fn key for function keys.
` (the grave accent key)
Moves focus to the next control that allows it. This key acts like Tab but is capable of reaching some controls that Tab may skip. such as links inside a message, and the "More actions" button for the active entry in Call History.
[ B
Bring up a list of buttons for selection. Press Enter on a button's name to click the button, or press Esc to close the list without activating any buttons. This command can be especially useful for finding "Hang up" and other call management buttons quickly.
[ L followed by a digit
Focuses a list by its position among displayed lists. [ L 1 focuses the first list, [ L 2 the second, etc. [ L 0 will focus the tenth list, if that many exist. The order of lists may not correspond to screen order.
[ S
Announce who is currently speaking in a call or meeting. Only tested in separate meeting windows but may work when the meeting is part of the main Teams window.
[ V
Announce who is currently sending video in a call or meeting. Only tested in separate meeting windows but may work when the meeting is part of the main Teams window.
[ T
Move focus to the first tab control on the screen, or the next one if more than one are available and one already has focus.
[ U and [ Shift+U
Say any User Principal Names (UPN) found attached to the current screen. The second of these commands also puts the name or names on the Windows clipboard. These commands provide a quick way to grab the id strings for chat users for use elsewhere.
JAWSKey+F1 typed twice quickly
Opens this document in the default browser.
Insert+T
Says and Brailles, after the title, as many of the following as are applicable: If, in a one-on-one chat, the status appears as "Status unknown," it may be necessary to wait for Teams to update the status. If this condition persists for more than a minute, it may be necessary to sign into Teams.
Ctrl+JAWSKey+V typed three times quickly
Brings up, in a JAWS virtual viewer, a list of the Teams versions so far seen. Each version will be shown with the date on which it was first run with JAWS and these scripts. This is meant to simplify identification of problems arising from Teams updates, although the Teams HTML code can change without a corresponding change to the version number.

The scripts also provide the following features:

The Message Reading System

A Teams chat message can include several types of information: content, reactions, reply count, attachments, flags such as Edited, etc. The message reading system described in this section can simplify accessing specific parts of a message. This is accomplished in two ways:

Message Reading Format Customization

The key sequence [ F will cycle between available message formats. The default format is "Default custom," which rearranges information in messages in a way pleasing at least to this script author. The "Native" option reverts message reading to the native format presented by Teams itself.

The "Default custom" message format presents message information in the following order:

Conspicuously removed from this reading format is the message's help text. Use the sequence [ 8 to read the help text.

Note that any change to the message reading format via [ F will remain in effect until changed again, even if JAWS is restarted.

Reading Specific Parts of a Message On Demand

Sequences consisting of [ followed by a digit between 1 and 9 will read specific portions of the current message:

Unrecognized Message Formats

From time to time, a message may appear that the scripts are unable to recognize for format alterations, separation into parts, etc. This can occur because

Messages with an unrecognized format are always presented as if the "Native" message reading format is in effect; that is, without alteration from what Teams natively presents. Command sequences for reading portions of a message may produce error messages instead of information when applied to a Teams message with an unrecognized format.

Using the Calendar Page

Activate the Calendar page with Ctrl+4. Teams offers two calendar views: Day view and Agenda view. A button for the view not currently showing will appear in tab order.

The Day view appears by default and shows meetings in a table, in which Left and Right arrows move among meeting links and Enter on a link populates the Details area from the meeting. In the Agenda view, all meetings for the current week appear in a treeView. Pressing Enter on an meeting again populates the Details area with the details for that meeting. Details can be reached in either view via Tab.

Screen Sharing and Handling Control Requests

To share your full screen:

  1. Focus the current call's control bar that contains Mute, Leave, etc.
  2. Find and press Space on "Share content," or just type Ctrl+Shift+E ( a native Teams shortcut).
  3. Tab to the full-screen option, which starts with a "1." Press Enter to share your screen with the participants in this call.

If someone in your call requests control of your computer, a box will appear to indicate this and to allow you to answer with Allow or Deny. To facilitate reaching these two buttons, be sure that focus is on the call's control bar before the control request arrives. This will cause JAWS to announce the request, and will allow Shift+Tab (possibly more than one) to reach the Allow and Deny buttons. Note that Tab can get stuck on a "Pin toolbar" button; Shift+Tab works better. Also note that, on the closing of this dialog, it may be necessary to Alt+Tab once to make the Tab and Shift+Tab keys succeed at moving among Teams call control bar items.

Known Issues

Issues shown in this section may be fixed in future script and/or application or JAWS updates but are not addressed as of this writing. Note that specific issues may and may not be present depending on the exact version of Teams HTML or application code running.

From time to time, Teams 1.4 versions have been known to stop providing accessibility information for some or all of a screen. Symptoms include silence on Tab and Shift+Tab, apparent inability to tab around, and unexpected or incomplete information for the Insert+T command. Restarting Teams should fix this problem. For an active meeting screen, using the "Change your view" option to toggle Full screen on and off may fix this problem without a Teams restart.

Messages in a meeting chat that is part of a separate meeting screen may not read in exactly the same way as messages in a meeting chat that is part of the main Teams screen.

The JAWS virtual and touch cursors may sometimes provide more information than the PC cursor, especially in Settings pages where they can find hints for fields, group headings, etc.

Although sharing control from a JAWS machine works well, controlling another machine from a JAWS machine via Teams does not. Use the JAWS Tandem feature for this purpose. Problems with using Teams' control support instead include

In JAWS versions 2019 and older, arrowing through replies in a thread, and possibly in other places, could cause any of the following anomalies:

These problems appear to be fixed in JAWS 2020. Revisions 71 and later of these scripts attempt to mittigate these issues but may sometimes fail to do so, and may sometimes cause silence after an arrow to a new reply. Use the JAWS SayLine command to read any reply that receives focus without speaking, or to verify where focus finally settled after navigation.

TreeView item states (Collapsed and Expanded) are not always properly indicated.

When focus switches from outside of Teams directly into a chat message list, Braille will not necessarily mirror speech for the focused chat message until the user tabs away from and back to the list once. This is due to JAWS not calling the BrailleCallbackObjectIdentify function until the user first moves among controls in Teams.

Some list controls allow navigation with up and down arrows to move out of the list, or to wrap from one end of the list to the other.

Revision History

This is the revision history of these scripts, most recent revision first:

Revision 223, October 18, 2021, tested in Teams app version 1.4.00.26376

This revision splits off from revisions that supported Teams versions older than 1.4.00.11161. This revision may support a few older Teams versions but not many.

Revision 208, June 9, 2021, tested in Teams app version 1.4.00.11161

This revision is the last revision supporting Teams versions 1.4.00.11161 and older. This revision may support some newer versions but not all. Download this revision if you use Teams 1.4.00.11161 or older.

Revision 204, May 7, 2021, tested in Teams app version 1.4.00.11161

Revision 202, April 29, 2021, tested in Teams app version 1.4.00.8872

Warning: This revision marks the end of support for JAWS versions 17.0, 18.0, and 2018. This is because this revision starts cooperating with Teams scripts that are included in JAWS itself starting in JAWS 2019, but these can't be loaded in 2018 and older because they don't exist there. If you need Teams scripts in JAWS 17, 18, or 2018, use the revision 193 installer for JAWS 17, 18, and 2018 instead of the current revision. There are no plans to continue updating that revision, though some of the below enhancements are included there.

Important: The BX Update feature for updating scripts will not work as a means of updating to revision 193 or later from an older revision. It is necessary to run the appropriate script installer.

The following changes apply to both the current revision and revision 193:

The following changes are available in this revision but not in revision 193:

Revision 173, October 07, 2020, tested in Teams app version 1.3.00.21759

Revision 162, September 01, 2020, tested in Teams app version 1.3.00.21759

Revision 150, August 18, 2020

Revision 139, July 01, 2020

Revision 116, April 19, 2020

Revision 108, April 15, 2020

Revision 99, April 14, 2020

Revision 98, April 07, 2020

Revision 71, March 10, 2020

Revision 62, March 4, 2020