[oslc-core] Problem in Delegated UI Window Name protocol example
Dave
snoopdave at gmail.com
Tue Mar 1 15:52:14 EST 2011
On Thu, Feb 17, 2011 at 12:05 PM, Steve K Speicher <sspeiche at us.ibm.com> wrote:
> I believe there was some goal to keep the samples "clean" by just using
> standard HTML/JS/DOM and not put browser-specific checks in (hard to draw
> the line where to stop with this).
Yes, that is a valid concern. I think we can make some minor changes
and improve things a bit.
> I'm fine either way though, as the reality is people will snag these and
> want to use them. Perhaps it would be good to attach a more complete
> example to the spec (provide a reference to) or handle this with other
> supporting material, which we tried to do with IBM Developer Works
> articles, etc.
I have expanded the existing example to work on IE and have tested
successfully on Chrome, Firefox and Safari. I had to work around two
IE related issues:
The "use attachEvent on IE" issue
http://bugs.dojotoolkit.org/ticket/9609
The "can't set iframe name via JavaScript on IE" issue
http://stackoverflow.com/questions/2138564/dynamic-iframe-ie-name-issue
Here's the new example code:
var pickerURL = ... // URL of Provider's Delegated UI Dialog
var returnURL = ... // Consumer's Return URL
var frame = document.createElement('iframe');
function windowNameProtocol() {
// Step #1: create iframe with fragment to indicate protocol
// Step #2: set the iframe's window.name to indicate the Return URL
if (ie > 0) {
frame = document.createElement('<iframe name=\'' + returnURL + '\'>');
} else {
frame = document.createElement('iframe');
frame.name = returnURL;
}
frame.src = pickerURL + '#oslc-core-windowName-1.0';
frame.width = 450;
frame.height = 300;
displayFrame(frame);
// Step #3: listen for onload events on the iframe
var ie = window.navigator.userAgent.indexOf("MSIE");
if (ie > 0) {
frame.attachEvent("onLoad", onFrameLoaded);
} else {
frame.onload = onFrameLoaded;
}
}
function onFrameLoaded() {
try { // May throw an exception if the frame's location is still a
different origin
// Step #4: when frame's location is equal to the Return URL
// then read response and return.
if (frame.contentWindow.location == returnURL) {
var message = frame.contentWindow.name;
destroyFrame(frame);
handleMessage(message);
}
} catch (e) {
// ignore: access exception when trying to access window name
}
}
I plan to replace the existing example with the above this week.
As usual, feedback is most appreciated.
Thanks
- Dave
More information about the Oslc-Core
mailing list