Question

Je le script suivant qui fonctionne bien dans Firefox et Chrome (pas sûr d'autres navigateurs), mais il ne fonctionne pas du tout dans IE. Il ouvre essentiellement une fenêtre qui ajoute un div pour mettre en évidence un élément dans l'ouverture de la fenêtre. Je veux travailler sur plusieurs pages sur le même site, donc je ne voulais pas ajouter une fonction pour créer la div dans la fenêtre principale (window.opener). Désolé, je ne pouvais pas poster une démo de travail - window.opener ne fonctionne pas dans un bac

.
<button>Open popup</button>
<script type="text/javascript">
$(document).ready(function(){
 $(':button').click(function(){
  var highlight = "" +
   "<button>Click to Add Highlight</button>" +
   "<scr"+"ipt type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js'></scr"+"ipt>" +
   " <scr"+"ipt type='text/javascript'>" +
   " $(':button').click(function(){" +
   "  $('<div/>', {" +
   "   'class': 'highlight'," +
   "   css: {" +
   "    position:   'absolute'," +
   "    height:     '50px'," +
   "    width:      '50px'," +
   "    left:       '200px'," +
   "    top:        '200px'," +
   "    background: '#fff'," +
   "    opacity:    0.5," +
   "    zIndex:     99" +
   "   }" +
   "  }).appendTo( $(window.opener.document.body) );" +
   " })" +
   " </scr"+"ipt>";
  var w = window.open('','highlighter','toolbar=0,location=0,status=0,width=200,height=100,scrollbars=1,resizable=1');
  w.document.write(highlight);
  w.document.close();
 })
})
</script>

J'ai aussi essayé d'utiliser appendChild sans succès. Je finalement trouvé que cette méthode fonctionne, mais il est une solution horrible et provoque la page à clignoter.

if ($.browser.msie){
 var d = '<div class="highlight" style="position:absolute;height:50px;' +
  'width:50px;left:200px;top:200px;background:#fff;opacity:0.5;' +
  'filter:alpha(opacity=50);zIndex:99;"></div>';
 window.opener.document.body.innerHTML = window.opener.document.body.innerHTML + d;
}

Quelqu'un sait d'une meilleure solution?

Était-ce utile?

La solution

Je pense avoir trouvé le problème. Il pourrait être un bug jQuery, mais je ne peux pas dire ... Je vais poster une autre question pour obtenir de l'aide.

Alors j'ai trouvé la solution à ce problème par une chaîne juste annexant. Pour une raison quelconque jQuery dans IE ne sera pas ajouter un objet. Donc, cela fonctionne:

if ($.browser.msie){
 var d = '<div class="highlight" style="position:absolute;height:50px;width:50px;left:200px;' + 
  'top:200px;background:#fff;opacity:0.5;filter:alpha(opacity=50);zIndex:99;"></div>';
 $(window.opener.document.body).append(d);
}

Modifier Pointy a résolu mon problème dans une autre question . Il se trouve qu'il est pas un bug, mais IE ne vous permet pas d'ajouter des un objet créé en dehors de la fenêtre. Ses solutions se présentent comme suit:

window.opener.$('<div/>', {
 'class': 'highlight',
 css: {
  position:   'absolute',
  height:     '50px',
  width:      '50px',
  left:       '200px',
  top:        '200px',
  background: '#fff',
  opacity:    0.5,
  zIndex:     99
 }
}

Mais assurez-vous que le window.opener utilise jQuery v1.4 ou plus.

Autres conseils

Vous ne l'ouvrez

var w = window.open(...);
w.document.open(); //Open the document up
w.document.write(highlight);
w.document.close();

Eric

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top