与IE和附加到window.opener问题(Problems with IE and append

2019-10-19 18:03发布

我有以下脚本,在Firefox和Chrome(不知道其他浏览器)效果很好,但它不能在IE浏览器在所有的工作。 它基本上打开其追加一个div突出的开窗器的项目的弹出窗口。 我希望它横跨在同一个网站的多个页面的工作,所以我没有想添加一个函数来创建在主窗口(window.opener)的股利。 抱歉,我不能发布一个工作演示 - window.opener不会在箱工作。

<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>

我也尝试过使用的appendChild没有成功。 我最终发现这个方法的工作,但它是一个可怕的解决方案,使得页面闪烁。

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;
}

任何人都知道一个更好的解决方案?

Answer 1:

我想我找到了问题。 这可能是一个jQuery的错误,但我不能告诉...我会后一个问题来寻求帮助。

所以我发现在追加一个字符串解决这个问题。 对于IE某种原因,jQuery的不会追加一个对象。 所以这工作原理:

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);
}

编辑:尖尖的解决我的问题, 另外一个问题 。 事实证明,这是不是一个错误,但IE不会让你追加窗口之外创建的对象。 他的解决方案如下:

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

但要确保window.opener是使用jQuery 1.4版或更高版本。



Answer 2:

你没有打开它

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

埃里克



文章来源: Problems with IE and appending to the window.opener