Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-1.8.2.GA_P04
    • Fix Version/s: EE-1.8.2.GA_P05
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      Internet Explorer 8/9, Tomcat 7

      Description


      To reproduce use the attached source code. Once deployed make a selection in the drop down list.
      You will notice a non stop spinning icon in the URL section of the IE8. The icon will spin around mouse pointer in IE9. To see it in IE9 open developer tools (F12) and point to any tabs in it.

      Screenshot attached

        Activity

        Hide
        Evgheni Sadovoi added a comment - - edited

        This seems like a regression in P04&P03. The problem was not reproducible with ICEfaces 1.8.2 EE P02.

        Show
        Evgheni Sadovoi added a comment - - edited This seems like a regression in P04&P03. The problem was not reproducible with ICEfaces 1.8.2 EE P02.
        Hide
        Deryk Sinotte added a comment - - edited

        Good to know. Sounds like trying P03 might be worthwhile.

        Show
        Deryk Sinotte added a comment - - edited Good to know. Sounds like trying P03 might be worthwhile.
        Hide
        Deryk Sinotte added a comment - - edited

        So I tried leaving in the pseudo URLs (i.e. 'javascript:...') but removed the part where the body style is set to cursor: wait. However the problem still occurs so it seems like it's more related to using the pseudo URLs than it is to setting the cursor style specifically. This is based on the fact that, if we go back to the old style of "real" URLs for the iframes, the problem doesn't occur.
        That little clue triggered a faint memory and I found ICE-7085. With IE, if you use document.write() in an event handler (or presumably as we are doing here as well), you need to call document.close() when you are done to help IE know when the document is fully "loaded". Otherwise IE helpfully leaves up the wait cursor indicating that there might be more content to come. Even if the iframe is replaced/removed. In ICE-7085, the code already had the document.close() code. But somewhere along the way, it was lost.
        In the latest version of status.js, the off function of the overlay has the document.close():

        off: function() {
            if (this.overlay) {
                if (/MSIE/.test(navigator.userAgent)) {
                    var overlay = document.createElement('iframe');
                    overlay.setAttribute('src', 'javascript:document.write("<html></html>");document.close();');
        

        but the on function did not (lost in a previous refactor I guess):

        on: function() {
            if (/MSIE/.test(navigator.userAgent)) {
                this.overlay = document.createElement('iframe');
                this.overlay.setAttribute('src', 'javascript:try{document.write(\'<html><body style="cursor: wait;"></body><html>\');}catch(e){};');
        

        Adding a "document.close()" call after the document.write() appears to do the trick as I no longer see the wait icon in IE 8 or 9 using the test app. Resolving as fixed.

        Show
        Deryk Sinotte added a comment - - edited So I tried leaving in the pseudo URLs (i.e. 'javascript:...') but removed the part where the body style is set to cursor: wait. However the problem still occurs so it seems like it's more related to using the pseudo URLs than it is to setting the cursor style specifically. This is based on the fact that, if we go back to the old style of "real" URLs for the iframes, the problem doesn't occur. That little clue triggered a faint memory and I found ICE-7085 . With IE, if you use document.write() in an event handler (or presumably as we are doing here as well), you need to call document.close() when you are done to help IE know when the document is fully "loaded". Otherwise IE helpfully leaves up the wait cursor indicating that there might be more content to come. Even if the iframe is replaced/removed. In ICE-7085 , the code already had the document.close() code. But somewhere along the way, it was lost. In the latest version of status.js, the off function of the overlay has the document.close(): off: function() { if ( this .overlay) { if (/MSIE/.test(navigator.userAgent)) { var overlay = document.createElement('iframe'); overlay.setAttribute('src', 'javascript:document.write( "<html></html>" );document.close();'); but the on function did not (lost in a previous refactor I guess): on: function() { if (/MSIE/.test(navigator.userAgent)) { this .overlay = document.createElement('iframe'); this .overlay.setAttribute('src', 'javascript: try {document.write(\'<html><body style= "cursor: wait;" ></body><html>\');} catch (e){};'); Adding a "document.close()" call after the document.write() appears to do the trick as I no longer see the wait icon in IE 8 or 9 using the test app. Resolving as fixed.

          People

          • Assignee:
            Evgheni Sadovoi
            Reporter:
            Evgheni Sadovoi
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: