سؤال

لديّ البرنامج النصي التالي الذي يعمل بشكل جيد في Firefox و Chrome (لست متأكدًا من المتصفحات الأخرى) ، لكنه لا يعمل على الإطلاق في IE. إنه يفتح بشكل أساسي نافذة منبثقة تُؤسس DIV لتسليط الضوء على عنصر في فتاحة النافذة. أريد أن تعمل عبر صفحات متعددة على نفس الموقع ، لذلك لم أكن أرغب في إضافة وظيفة لإنشاء DIV في النافذة الرئيسية (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;
}

أي شخص يعرف حل أفضل؟

هل كانت مفيدة؟

المحلول

أعتقد أنني وجدت المشكلة. قد يكون هذا خطأ jQuery ، لكنني لا أستطيع أن أقول ... سأقوم بنشر سؤال آخر للحصول على المساعدة.

لذلك وجدت الحل لهذه المشكلة من خلال إلحاق سلسلة فقط. لسبب ما ، لن يقوم jQuery في IE بإلحاق كائن. لذلك هذا يعمل:

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

يحرر: حل POINTY مشكلتي في سؤال آخر. اتضح أنه ليس خطأ ، ولكن لا يسمح لك بإلحاق كائن تم إنشاؤه خارج النافذة. حلوله على النحو التالي:

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 v1.4 أو أكثر.

نصائح أخرى

أنت لم تفتحه

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

إريك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top