SnTT: DocumentUniqueID is not unique enough for Dojo
Hurray, a Show and Tell Thursday posting. Long time no see. :)
I had the pleasure to integrate the Back-Button functionality provided by Dojo into an existing Lotus Notes/Domino Web-Application.
General - Documentation, Examples
Which is rather straight forward, if you read the documentation carefully and maybe take a look into the source code. A good place to start is also the test code for the functionality you need which you get if you download the „Non-obfuscated version for debugging”.Dojo settings
I pulled all the debugging and the settings for the back-functionality into a separate JavaScript section, to make it more readable. This gets inserted into the „HTML Head Content” of the form (the field PDojoDBH holds the path to the Dojo library):" var djConfig = {" + @NewLine +
" isDebug: true," + @NewLine +
" //debugAtAllCosts: true," + @NewLine +
" preventBackButtonFix: false, " + @NewLine +
" dojoIframeHistoryUrl: \"" + PDojoDBH + "dojo/resources/iframe_history.html\"" + @NewLine +
" }" + @NewLine +
"</script>" + @NewLine<
which outputs:
<script language="JavaScript" type="text/javascript"> var djConfig = { isDebug: false, //debugAtAllCosts: true, preventBackButtonFix: false, dojoIframeHistoryUrl: "/dojo.nsf$files/dojo/resources/iframe_history.html" } </script>
IE support
If you are, like me, using Firefox with the fabulous Firebug for web development, it is easy to forget about Microsofts Internet Explorer. Unfortunately, it still holds a major part of the market and we therefore have to support it. I spent a whole afternoon chasing a non-existent bug, as the Back-button worked in Firefox, but not in IE. I fixed it by taking a look at the source, which states (prominently):back.init = function(){ //summary: Initializes the undo stack. This must be called from a <script> // block that lives inside the <body> tag to prevent bugs on IE.
So if you add a
<script type="text/javascript"> dojo.back.init(); </script>
as „Pass-Through HTML” at the beginning of your form, the back-Button will also work in IE up to and including IE 7. IE 8 still has some problems.
Unique Identifier
In order for the Dojo back-button functionality to work, each entry in the browser history stack needs an unique fragment identifier. Now if you – like me – think, that the NotesDocumentID would be ideal for that, think again. If you navigate for example the sequence InitState, Doc3, Doc4, Doc3, Doc2 while using the DocID as a fragment identifier, you will never get back to the InitState, als the second and fourth entry in the history stack have the same fragment identifier/docID. So I switched from using the DocumentUniqueID to using the fragment identifiers, that Dojo automagically creates, if you set „changeUrl” to true.IDDojoState = function(id) { this.stateData = id; this.changeUrl = true;
See the Dojo test-code for details.
Tagged as: dojo, domino, lotus notes, SnTT, webdevelpment | Author: Martin Leyrer
[Donnerstag, 20081120, 16:32 | permanent link | 0 Kommentar(e)
Comments are closed for this story.