Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F946620
back-bookmark.html
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
back-bookmark.html
View Options
<
html
>
<
head
>
<
script
language
=
"JavaScript"
type
=
"text/javascript"
>
// Dojo configuration
djConfig
=
{
//debugAtAllCosts: true, //Don't normally need this in applications.
isDebug
:
true
,
dojoIframeHistoryUrl
:
"../../resources/iframe_history.html"
,
//for xdomain
preventBackButtonFix
:
false
};
</
script
>
<
script
language
=
"JavaScript"
type
=
"text/javascript"
src
=
"../../dojo.js"
></
script
>
<
script
language
=
"JavaScript"
type
=
"text/javascript"
src
=
"browser/ApplicationState.js"
></
script
>
<
script
language
=
"JavaScript"
type
=
"text/javascript"
>
dojo
.
require
(
"dojo.lang.common"
);
dojo
.
require
(
"dojo.undo.browser"
);
dojo
.
require
(
"dojo.io.*"
);
//dojo.hostenv.writeIncludes(); //Don't normally need this in applications.
//****************************************
function
goIoBind
(
id
){
doApplicationStateBind
(
"browser/"
+
id
+
".xml"
,
"output"
,
"dataOutput"
,
id
);
}
//****************************************
/*
This method illustrates using dojo.io.bind() that also saves an application
state via dojo.undo.browser (dojo.io.bind() will automatically use dojo.undo.browser
if the dojo.io.bind() request object contains a back for forward function).
*/
function
doApplicationStateBind
(
url
,
outputDivId
,
backForwardOutputDivId
,
bookmarkValue
){
dojo
.
io
.
bind
({
//Standard dojo.io.bind parameter
url
:
url
,
//Standard dojo.io.bind parameter.
//For this test, all of the bind requests are for text/xml documents.
mimetype
:
"text/xml"
,
//Standard dojo.io.bind parameter: if this is a value that evaluates
//to true, then the page URL will change (by adding a fragment identifier
//to the URL)
changeUrl
:
bookmarkValue
,
//Data for use once we have data for an ApplicationState object
outputDivId
:
outputDivId
,
backForwardOutputDivId
:
backForwardOutputDivId
,
//A holder for the application state object.
//It will be created once we have a response from the bind request.
appState
:
null
,
//Standard dojo.io.bind parameter. The ioRequest object is returned
//to the load function as the fourth parameter. The ioRequest object
//is the object we are creating and passing to this dojo.io.bind() call.
load
:
function
(
type
,
evaldObj
,
xhrObject
,
ioRequest
){
var
stateData
=
"XHR: "
+
evaldObj
.
getElementsByTagName
(
"data"
)[
0
].
childNodes
[
0
].
nodeValue
;
ioRequest
.
appState
=
new
ApplicationState
(
stateData
,
ioRequest
.
outputDivId
,
ioRequest
.
backForwardOutputDivId
);
ioRequest
.
appState
.
showStateData
();
},
back
:
function
(){
this
.
appState
.
back
();
},
forward
:
function
(){
this
.
appState
.
forward
();
}
});
}
//****************************************
dojo
.
addOnLoad
(
function
(){
//See if there is a bookmark hash on the page URL.
var
bookmarkId
=
location
.
hash
;
if
(
bookmarkId
){
bookmarkId
=
bookmarkId
.
substring
(
1
,
bookmarkId
.
length
);
}
//If we have a bookmark, load that as the initial state.
if
(
bookmarkId
&&
bookmarkId
.
indexOf
(
"xhr"
)
==
0
){
//Load the XHR data for the bookmarked URL
dojo
.
io
.
bind
({
url
:
"browser/"
+
bookmarkId
+
".xml"
,
mimetype
:
"text/xml"
,
dataId
:
bookmarkId
,
load
:
function
(
type
,
evaldObj
,
http
,
kwArgs
){
var
stateData
=
"(Initial State) XHR: "
+
evaldObj
.
getElementsByTagName
(
"data"
)[
0
].
childNodes
[
0
].
nodeValue
;
var
appState
=
new
ApplicationState
(
stateData
,
"output"
,
"dataOutput"
);
appState
.
showStateData
();
//Since this is the initial state, don't add it to the dojo.undo.browser
//history stack (notice that this dojo.io.bind() request does not define
//any back or forward functions). Instead, register the result of this bind
//as the initial state for the page.
dojo
.
undo
.
browser
.
setInitialState
(
appState
);
}
});
}
else
{
var
appState
=
new
ApplicationState
(
"This is the initial state (page first loaded, no dojo.io.bind() calls yet)"
,
"output"
,
"dataOutput"
);
appState
.
showStateData
();
dojo
.
undo
.
browser
.
setInitialState
(
appState
);
}
});
</
script
>
</
head
>
<
body
>
<
div
style
=
"padding-bottom: 20px; width: 100%; border-bottom: 1px solid gray"
>
<
h3
>
dojo.undo.browser test (dojo.io.bind() with bookmarking)
</
h3
>
See the Dojo Book entry for
<
a
href
=
"http://manual.dojotoolkit.org/WikiHome/DojoDotBook/DocFn1"
>
Back Button and Bookmarking
</
a
>
.
<
p
>
This page tests the dojo.undo.browser back/forward integration with dojo.io.bind(),
and dojo.undo.browser's bookmarking facility. For a back/forward test without bookmarking,
see
<
a
href
=
"test_browser.html"
>
test_browser.html
</
a
>
.
</
p
>
<
p
>
The buttons that start with "XHR" use
dojo.io.bind to do some XMLHTTPRequest calls for some test data, and they
also define back/forward handlers, so dojo.io should use dojo.undo.browser
add to history tracking.
</
p
>
<
p
>
To test the bookmarking facility:
</
p
>
<
ul
>
<
li
>
Click on one of the buttons below.
</
li
>
<
li
>
Save the resulting URL as a bookmark.
</
li
>
<
li
>
Close the browser window, or navigate to a different page.
</
li
>
<
li
>
Click on the bookmark to jump to that state in the page
</
li
>
</
ul
>
<
p
>
Other notes:
</
p
>
<
ul
>
<
li
>
Don't test this page using local disk for MSIE. MSIE will not
create a history list for iframe_history.html if served from a file:
URL. The XML served back from the XHR tests will also not be properly
created if served from local disk. Serve the test pages from a web
server to test in that browser.
</
li
>
<
li
>
Safari 2.0.3+ (and probably 1.3.2+): Only the back button works OK
(not the forward button), and only if changeUrl is NOT used (so it
<
b
>
will not
</
b
>
work for this test page, since it is using bookmarking -- changeUrl).
When changeUrl is used, Safari jumps all the way
back to whatever page was shown before the page that uses
dojo.undo.browser support.
</
li
>
<
li
>
Opera 8.5.3: Does not work.
</
li
>
<
li
>
Konqueror: Unknown. The latest may have Safari's behavior.
</
li
>
</
ul
>
</
div
>
<
div
style
=
"float:left; padding: 20px"
>
<
button
onclick
=
"goIoBind('xhr1')"
>
XHR 1
</
button
><
br
/>
<
button
onclick
=
"goIoBind('xhr2')"
>
XHR 2
</
button
><
br
/>
<
button
onclick
=
"goIoBind('xhr3')"
>
XHR 3
</
button
><
br
/>
<
button
onclick
=
"goIoBind('xhr4')"
>
XHR 4
</
button
><
br
/>
</
div
>
<
div
style
=
"float: left; padding: 20px"
>
<
b
>
Data Output:
</
b
><
br
/>
<
div
id
=
"output"
></
div
>
<
hr
/>
<
i
>
Back/Forward Info:
</
i
><
br
/>
<
div
id
=
"dataOutput"
></
div
>
</
div
>
</
body
>
</
html
>
File Metadata
Details
Attached
Mime Type
text/html
Expires
Sat, Apr 26, 08:09 (1 d, 10 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23861
Default Alt Text
back-bookmark.html (6 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment