JavaScript ، استدعاء وظيفة نافذة الطفل من الافتتاح لا يعمل

StackOverflow https://stackoverflow.com/questions/2117887

سؤال

أقوم بتطوير تطبيق ويب يفتح نافذة منبثقة باستخدام Windows.Open (..). أحتاج إلى استدعاء وظيفة على النافذة المفتوحة باستخدام المقبض الذي تم إرجاعه بواسطة "Window.Open" ، لكنني دائمًا أحصل على رسالة الخطأ "AddWindow.getMaskelements ليست وظيفة" ، كما لو لم تتمكن من الوصول إلى الوظيفة المعلنة على نافذة الطفل. هذا هو السلوك في كل من IE و FF. رمزتي تبدو هكذا:

function AddEmail(target,category)
{
    if(addWindow == null)
    {
        currentCategory = category;
        var left = getDialogPos(400,220)[0];
        var top =  getDialogPos(400,220)[1];
        addWindow = window.open("adicionar_email.htm",null,"height=220px, width=400px, status=no, resizable=no");
        addWindow.moveTo(left,top);
        addWindow.getMaskElements ();
    }
}

لقد غوغل وأقرأ من مصادر موثوقة مختلفة ويبدو أن هذا من المفترض أن يعمل ، ومع ذلك لا. شيء آخر ، يتم الإعلان عن الوظائف في نافذة الطفل في ملف .js منفصل يتم تضمينه في ملف AdicionAr_email.htm. هل هذا يحدث فرقا؟ لا ينبغي أن يكون ذلك .. لذا ، إذا واجه أي شخص مشكلة مماثلة ، أو لديه أي فكرة عما أفعله خطأ ، من فضلك ، الرد على هذه الرسالة. شكرا لك مقدما.

كينيا

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

المحلول

إنشاء النافذة ليس عملية حظر. يستمر البرنامج النصي في التنفيذ أثناء فتح تلك النافذة وتحميلها HTML & JavaScript وتحليلها.

إذا كنت تريد إضافة رابط على صفحتك الأصلية مثل هذا:

<a href="#" onclick="addWindow.getMaskElements();">Test</a>

سترى أنه يعمل. (حاولت ذلك فقط للتأكد.)

**تعديل **

قام شخص آخر بنشر حل بديل من خلال استدعاء onload في المستند المستهدف ، إليك نهج آخر:

function AddEmail()
{

        if(addWindow == null) {
        addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no");
        }

        if(!addWindow.myRemoteFunction) {
            setTimeout(AddEmail,1000);
        } else { addWindow.myRemoteFunction(); }
}

هذا يستمر في محاولة استدعاء addwindow.myremotefunction كل ثاني til تمكن من تسميته بشكل ناجح.

نصائح أخرى

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

وبالتالي فإن محاولة استدعاء هذه الطريقة في وقت مبكر سوف تفشل. يجب عليك إرفاق وظيفة بحدث تحميل النافذة المفتوحة ومحاولة تجعلك مكالمات من هذه الوظيفة.

المشكلة في أدناه هي:

عندما يتم تنفيذ JavaScript في النافذة الأصل ، لا يتم تحميل نافذة الطفل. وبالتالي ، فإن وظيفة الاستدعاء من النافذة الأصل هي في الحلقة اللانهائية وتؤدي إلى تعطل النافذة.

إنشاء النافذة ليس عملية حظر. يستمر البرنامج النصي في التنفيذ أثناء فتح تلك النافذة وتحميلها HTML & JavaScript وتحليلها.

إذا كنت تريد إضافة رابط على صفحتك الأصلية مثل هذا:

<a href="#" onclick="addWindow.getMaskElements();">Test</a>

سترى أنه يعمل. (حاولت ذلك فقط للتأكد.)

**تعديل **

قام شخص آخر بنشر حل بديل من خلال استدعاء onload في المستند المستهدف ، إليك نهج آخر:

function AddEmail()
{

        if(addWindow == null) {
        addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no");
        }

        if(!addWindow.myRemoteFunction) {
            setTimeout(AddEmail,1000);
        } else { addWindow.myRemoteFunction(); }
}

هذا يستمر في محاولة استدعاء addwindow.myremotefunction كل ثاني til تمكن من تسميته بشكل ناجح.

أنت تتصل بالوظيفة فور فتح النافذة ؛ قد لا يتم تحميل الصفحة الموجودة على نافذة المنبثقة بعد ، لذلك قد لا يتم تعريف الوظيفة في تلك المرحلة.

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