New List Subject but related to Eran’s note...
The approach in this note is motivated by Eran’s questions, but it’s also
motivated by a number of frame page communication issues that have come up as
folks move older pages to JSmol.
It’s quick and dirty, but it works (No parent.top… or should it have been
parent.top.top… or maybe just parent…).
I have not tried it on older frameset pages, but it should work.
The code is fairly simple:
if (window.addEventListener) { window.addEventListener("storage", talkToFriend,
false); } // false ensures event bubbling - not capture
if (window.attachEvent) { window.attachEvent("storage", talkToFriend, false); }
// keep i.e. happy - sigh
function talkToFriend(e) {
if (localStorage.getItem('talkToFriend')) {
var data = localStorage.getItem('talkToFriend');
localStorage.removeItem('talkToFriend’); // sending page will
get this message, but above “if" will kill action. Classic example of eat this
message!
Jmol.script(jmolApplet0, data);
}
return null;
}
If the above code is in two pages on the same browser (frames, tabs, or
windows) then they can exchange JmolScript commands independent of the DOM. The
command to make the change is:
localStorage.setItem('talkToFriend', 'select all:color red'); or
localStorage.setItem('talkToFriend', 'load $aspirin'); or Etc.
You can try it here:
http://chemagic.com/molecules/VMKMINInotes.htm
<http://chemagic.com/molecules/VMKMINInotes.htm>
The model kit is in an iFrame. Both pages have the above code. If you go to the
JS console of the browser - not the Jmol frame, then the containing page will
be the sender. This page does not even know what Jmol is. It’s a slide show
page, and it could even be in another tab or window. The DOMs of both pages are
irrelevant to the dialog. In the console, enter:
localStorage.setItem('talkToFriend', 'select all:color red')
or any other Jmol script. Note that the sending page does not get the event.
That’s by design. Note also that if the Jmol page were to send a script in this
case there would be an error. There is no Jmol on the sending page. Tweaking
the senders event function could prevent an inadvertent event error. For
example, if the sender never has to listen, the the event function could simply
return null;
I called this “talkToFriend” because it’s set up for 1 to 1 communication. With
a little thought, multi frame/window Jmol synchronization should be possible. I
have to think about this.
Otis
--
Otis Rothenberger
[email protected]
http://chemagic.com
------------------------------------------------------------------------------
_______________________________________________
Jmol-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-users