Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-1257

iframe get request done 2x after ajax change in IE

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.3.0-rc2, 1.3.0-final
    • 1.3.1
    • wicket
    • None
    • All platforms / Internet Explorer

    Description

      http://www.nabble.com/bug%3A-iframe-get-request-done-2x-after-ajax-change-in-IE-to14598132.html

      We have a page that has an iframe and an ajax button.
      When the ajax button is clicked, the iframe is replaced by a new iframe with specific src.

      We have encountered the phenomenon where the iframe src is requested
      two times to the server after the button gets clicked.

      After some debugging, the problem was pinned down and
      lies within the file org\apache\wicket\ajax\wicket-ajax.js

      The problem is within the function "replaceOuterHtmlIE".

      There is some kind of "hack" to read the <script> tags within the received html...

      First the content of the div is filled with a table containing received ajax component markup:

      tempDiv.innerHTML = '<table style="display:none">' + text + '</table>';

      This way script tags can be retrieved. Afterwards the innerHTML is replaced by a div containing received text.

      tempDiv.innerHTML = '<div style="display:none">' + text + '</div>';

      Both statements cause IE to fetch the urls within the contained text (in our case <iframe src="someurl"></iframe> tags).

      We patched this the following way ...

      The first occurence of tempDiv.innerHTML, The content of the div is filled with a table containing a div.

      tempDiv.innerHTML = '<table style="display:none"><div style="display:none">' + text + '</div></table>';

      After the script tags are retrieved, the table gets removed from the structure,
      and the div within the table is connected to tempDiv.

      var table=tempDiv.firstChild;
      var childDiv=table.firstChild.firstChild;
      tempDiv.removeChild(table);
      tempDiv.appendChild(childDiv);

      Would it be possible to apply this patch to the next wicket version?

      We experienced some problems with the patch, below is the updated version that we use.

      var table=tempDiv.firstChild;
      tempDiv.removeChild(table);
      if(tempDiv.childNodes.length==0) {
      var childDiv=table.firstChild.firstChild;
      table.firstChild.removeChild(childDiv);
      tempDiv.appendChild(childDiv);
      }
      else {
      tempDiv.removeChild(tempDiv.lastChild); // slash table
      tempDiv.removeChild(tempDiv.lastChild); // div
      var childDiv=document.createElement("div");
      childDiv.style.display="none";
      var child;
      while(tempDiv.childNodes.length>0)

      { child=tempDiv.firstChild; tempDiv.removeChild(child); childDiv.appendChild(child); }

      tempDiv.appendChild(childDiv);
      }

      Attachments

        Activity

          People

            knopp Matej Knopp
            tomdesmet Tom Desmet
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: