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):
"<script language=\"JavaScript\" type=\"text/javascript\">" + @NewLine +
" 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)