GWT IFrame Javascript-fout

Ik heb een GWT-module die ik probeer te laden op mijn hostpagina. Het is een vrij standaard routine:

public class TimeFvHelper implements EntryPoint {

/**
 * This is the entry point method.
 */
public void onModuleLoad() {        
    ChargeToTreePresenter presenter = new ChargeToTreePresenterImpl(new ChargeToTree());        
    RootPanel.get("divPicker").add((Widget)presenter.getView());        

}

Meestal werkt het prima zonder problemen. Nochtans wanneer ik de webpagina met IE9 open, heb ik de eerste keer geen probleem. Nochtans als ik de pagina herlaad of terug uit toen kom terug in krijg ik de volgende fout:

Kan de waarde van de eigenschap 'locatie' niet verkrijgen: object is null of undefined

Dit is in het bestand nocache.js dat tijdens de compilatie is gegenereerd, met name in de methode misschienInjectFrame ():

  var frameInjected;
  function maybeInjectFrame(){
    if (!frameInjected) {
      frameInjected = true;
      var iframe = $doc.createElement($intern_36);
      iframe.src = $intern_37;
      iframe.id = $intern_1;
      iframe.style.cssText = $intern_38;
      iframe.tabIndex = -1;
      $doc.body.appendChild(iframe);
      $stats && $stats({moduleName:$intern_1, sessionId:$sessionId, subSystem:$intern_2, evtGroup:$intern_8, millis:(new Date).getTime(), type:$intern_39});
      iframe.contentWindow.location.replace(base + initialHtml);   //<-- Here
    }
  }

Ik heb de afgelopen twee dagen veel berichten gelezen waarin wordt gesteld dat IE9 problemen heeft met iframes. Is dat wat hier aan de hand is? Om het even welke ideeën van een alternerende actie?

-Ian

1
IE9-ondersteuning is toegevoegd in GWT 2.3. Als u een versie minder gebruikt, moet u een metatag toevoegen om IE9 te laten weten dat het zich gedraagt ​​als IE8: <meta http-equiv = "X-UA-Compatible" content = "IE = 8" />
toegevoegd de auteur Strelok, de bron
Ik gebruik GWT 2.3, maar ik heb dat toch geprobeerd en de fout blijft bestaan.
toegevoegd de auteur Ian Jacobs, de bron

2 antwoord

Probeer de xsiframe linker te gebruiken in plaats van de standaard std .

It still uses an iframe for sandboxing (so that scripts loaded in the page have no impact on GWT's code) but do not change the iframe's location (it instead writes into the iframe); and it has many more features: http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=xsiframe+status%3AFixed

0
toegevoegd
Goed idee, maar dezelfde basisfout. Het bestand nocache.js probeert het iframe te maken en krijgt een JavaScript-foutmelding Kan de waarde van de eigenschap 'document' niet krijgen: object is null of undefined . Het lijkt erop dat wanneer IE het iframe-element (de tweede keer) maakt, de eigenschap contentWindow null is.
toegevoegd de auteur Ian Jacobs, de bron

Ik zie hetzelfde probleem en ik heb geen oplossing.

Maar hier is de code inclusief de waarden van de intern'ed-reeksen.

function maybeInjectFrame(){
if (!frameInjected) {
  frameInjected = true;
  var iframe = $doc.createElement('iframe');
  iframe.src = "javascript:''";
  iframe.id = 'application';
  iframe.style.cssText = 'position:absolute;width:0;height:0;border:none';
  iframe.tabIndex = -1;
  $doc.body.appendChild(iframe);
  $stats && $stats({moduleName:'application', sessionId:$sessionId, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date).getTime(), type:'moduleRequested'});
  iframe.contentWindow.location.replace(base + initialHtml);
}

}

0
toegevoegd