< Previous | Contents | Next >

5.4. Termination of a Content Object through Navigation

If an LMS provides user interface devices for navigation events, a learner may indicate their desire to navigate by triggering one or more of these devices. When a learner indicates the desire to navigate, SCORM assumes the learner is implying that they are “done” with the currently launched content object, if one exists. If the LMS chooses to honor the learner-triggered navigation event, the LMS must first take away (unload) the current launched content object and then process the appropriate navigation request. The content object must be removed before processing the navigation request to ensure that the content object has “committed” any learner progress information that may affect sequencing.

SCOs can communicate navigation intentions directly to the LMS through the SCORM Navigation Data Model. A SCO must also indicate to the LMS when the LMS should act on its intensions; this is done by invoking the Terminate() (refer to the SCORM RTE book [4]). The Terminate() API method indicates that the SCO has completed communication with the LMS; therefore, if the SCO has completed communication and indicated a navigation intension, the LMS should act on it.

Once the Terminate() request has been processed, the LMS shall first process any pending, learner initiated, navigation events. If there is no pending, learner initiated, navigation event, the LMS shall process the last navigation request communicated by the SCO (refer to Section 5.6.4: Run-Time Communication of Navigation Requests), if any. If neither the learner nor the SCO indicates their navigation intentions, the LMS must wait for the learner to indicate a navigation event.


ADL Note: The Terminate() request is not a sufficient event to cause the currently experienced content from being taken away. The LMS must first successfully identify the next piece of content to be delivered through the Overall Sequencing Process. If this process fails in any way, the LMS should wait until the learner has invoked another navigation event that successfully completes the Overall Sequencing Process.

Consider the scenario where SCO A is launched and then calls Initialize(). While SCO A is running, the learner chooses another activity using a navigation user interface control provided by the LMS, for which the corresponding SCO, SCO B, is then launched in the same browser window, thereby forcing the unloading of the previous SCO, SCO A. In this case, SCO A must call Terminate() when it detects that it is being forcefully unloaded. The LMS implementation must terminate the communication session it had opened for SCO A, even if SCO A failed to call Terminate().

SCO A must implement a handler for the onUnload event that performs any needed communication with the LMS and then calls Terminate(). SCORM may introduce a communication mechanism that allows the LMS to notify the SCO before forcefully terminating the SCO in the future.

Navigation events triggered by the learner always take precedence over the navigation requests communicated by a SCO. For example, while it is possible in the scenario described above that SCO A communicated a navigation event to the LMS prior to being terminated, the LMS discarded that navigation event as soon as another navigation event was triggered by the learner through the LMS-provided user interface. In the above scenario, if SCO A communicates a Continue navigation request to the LMS and then is forced to terminate due to the Choose navigation event, because it was triggered by the learner, then the Choose navigation event would be acted upon and the Continue navigation request indicated by SCO A would be ignored.


ADL Note: Any all cases, processing of post condition sequencing rules may override any pending navigation request invoked by either the learner or the SCO. For example, if a Retry rule successfully evaluates, that sequencing request would override any pending navigation request.