#4057 closed defect (fixed)
Menu - 2 seconds delay to open submenu and showing hour glass (both IE6)
Reported by: | guest | Owned by: | bill |
---|---|---|---|
Priority: | high | Milestone: | 0.9 |
Component: | Dijit | Version: | 0.9 |
Keywords: | Cc: | ||
Blocked By: | Blocking: |
Description
see: http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/test_Menu.html
On IE6: When opening a submenu it takes about 2 seconds to open the new layer. It is also showing a hour glass when opening a menulayer.
A ugly workaround is to place the following code in dijit.BackgroundIframe?:
if (!dojo.byId("BackgroundIframe_Waiting_Preventer")) {
var tmp_link = document.createElement("a");
tmp_link.href = "javascript:";
tmp_link.id = "BackgroundIframe_Waiting_Preventer";
document.body.appendChild(tmp_link);
tmp_link.click();
tmp_link.style.display = "none";
}
so dijit.BackgroundIframe? looks like:
dijit.BackgroundIframe? = function(/* HTMLElement */node){
summary: For IE z-index schenanigans. id attribute is required. description: new dijit.BackgroundIframe?(node) Makes a background iframe as a child of node, that fills area (and position) of node
if(!node.id){ throw new Error("no id"); }
if((dojo.isIE && dojo.isIE < 7) (dojo.isFF && dojo.isFF < 3 && dojo.hasClass(dojo.body(), "dijit_a11y"))){ var iframe;
if(dojo.isIE){
if (!dojo.byId("BackgroundIframe_Waiting_Preventer")) {
var tmp_link = document.createElement("a");
tmp_link.href = "javascript:"; tmp_link.id = "BackgroundIframe_Waiting_Preventer"; document.body.appendChild(tmp_link); tmp_link.click(); tmp_link.style.display = "none";
}
var html="<iframe src='javascript:""'"
+ " style='position: absolute; left: 0px; top: 0px;" + " width: expression(document.getElementById("" + node.id + "").offsetWidth);" + " height: expression(document.getElementById("" + node.id + "").offsetHeight); " + "z-index: -1; filter:Alpha(Opacity="0");'>";
iframe = dojo.doc.createElement(html);
}else{
iframe = dojo.doc.createElement("iframe");
iframe.src = 'javascript:""'; iframe.className = "dijitBackgroundIframe";
} iframe.tabIndex = -1; Magic to prevent iframe from getting focus on tab keypress - as style didnt work. node.appendChild(iframe); this.iframe = iframe;
}
};
Change History (5)
comment:1 Changed 15 years ago by
Milestone: | → 0.9 |
---|---|
Owner: | set to bill |
comment:2 Changed 15 years ago by
I came up to this this solution by inserting a link with href="javascript:" in http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/test_Menu.html
If you first click the 'javascript:' link, there is no more delay. In dijit.BackgroundIframe? I create and click this link programmaticly.
The if(dojo.isIE){...}else{...} preexists in the dijit/_base/popup.js (from line 186)
comment:3 Changed 15 years ago by
Bill, you're right. Delay only occurs with installed IE Developer Toolbar. Just tested.
comment:4 Changed 15 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
(In [10099]) Fixes #4057: cache BackgroundIframes? to prevent 2s delay on IE6.
comment:5 Changed 13 years ago by
(In [16540]) Fixes #8561: Visible IFRAMEs when using Dijits on IE6
I removed the code to pre-create a background iframe on IE6 on page load. This code was added in [10099] (refs #4057) to prevent a 2s delay on IE6 showing the first popup, but I'm not seeing that problem anymore, and the code is questionable anyway since it slows down page load time.
Hmm, the backgroundIframe is causing the delay? I was supposing it was from IE Developer Toolbar. OK, thanks for the info. probably we can cache background iframes then... Not sure what your code above is doing exactly. if(dojo.isIE){...}else{...} There should be no else block because we don't create iframes except for IE6.