سؤال

لقد حصلت على الحالة التالية، ويمتد من مجال واحد:

ول A يستخدم window.open() لفتح نافذة المسماة (لاعب المنبثقة). window.open() يعطي الصفحة A إشارة إلى النافذة.

والعضو تعيد تحميل الآن الصفحة A. يتم فقدان الإشارة إلى الإطار المسمى. باستخدام window.open() إلى "العثور على" نافذة له تأثير الجانب المؤسف من إعادة تحميلها (غير مرغوب فيه). هل هناك أي طريقة أخرى للحصول على إشارة إلى هذا الإطار؟

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

المحلول

وجرب هذا:

var playerUrl = 'http://my.player...';
var popupPlayer= window.open('', 'popupPlayer', 'width=150,height=100') ;
if(popupPlayer.location.href == 'about:blank' ){
    popupPlayer.location = playerUrl ;
}
popupPlayer.focus();

ووسوف تفتح نافذة فارغة مع اسم فريد. منذ رابط فارغ، لن يتم إعادة تحميل المحتوى من النافذة.

نصائح أخرى

وAFAIK، لا ليس هناك ..

وهناك نوع من قذرة، ولكن ط-تخمين ذلك بنفسك، والعمل المأجور سيكون لإعادة دوري الإشارة على الإطار الأصل من داخل المنبثقة باستخدام window.opener، مع شيء من هذا القبيل هذا الرمز:

    setInterval(function() {
        if(window.opener) {
            window.opener.document.myPopupWindow = window
        }
    }, 100)

في الإطار الأصل، عليك أن تكون قادرا على الوصول document.myPopupWindow، حتى بعد إعادة تحميل (حسنا، 100MS بعد إعادة التحميل). هذا يجب أن تعمل عبر متصفح.

في الواقع ما فعلته هو تدمير الوالد (صفحة أ) من نافذة خلق (قافزة)، لذلك لا يوجد لديه المزيد من إشارة إلى الأصل الأصلي وبالتالي لا يمكنك الحصول على إشارة مباشرة.

والحل الوحيد الذي يمكنني أن أفكر من يستخدم متصفح العروض التي أضيفت القدرة جافا سكريبت للتنقل عبر النوافذ النشطة (علامات)، والعثور على واحد التي لديها ملكية خاصة (أي: لديك إعادة تحميل الصفحة أ) أن يحصل معترف بها من قبل منبثقة .

وفايرفوكس لسوء الحظ اعتقد فقط لديه بعض القدرة المضافة أو التمديد التي تمنحك هذه المرونة. (بل هو أيضا خطرا أمنيا على الرغم من)

وهذا يجب أن تعمل. إضافة هذا الرمز في المنبثقة:

function updateOpener() {
    if (window.opener)
        window.opener.document.myPopupWindow = window;
    else
        setTimeout(updateOpener, 100);
}

updateOpener(); 

وهذا في ONLOAD الإطار الأصل. للتأكد من myPopupWindow كانت مجموعة الانتظار 100 مللي ثانية قبل الوصول إليه.

setTimeout(function() {
    if (document.myPopupWindow) 
        document.myPopupWindow.focus();
}, 100);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top