الفرق بين window.parent وwindow.opener تستدعي JavaScript طريقة النافذة الرئيسية
1: window.parent هو مثال لصفحة iframe التي تستدعي كائن الصفحة الأصل:
a.html
كود HTML<html>
<head><title>الصفحة الرئيسية</title></head>
<الجسم>
<اسم النموذج = "form1" معرف = "form1">
<نوع الإدخال = "نص" اسم = "اسم المستخدم" معرف = "اسم المستخدم"/>
</النموذج>
<iframe src="b.html" width=100%></iframe>
</الجسم>
</html>
إذا كنا بحاجة إلى تعيين قيمة لمربع نص اسم المستخدم في a.htm في b.htm، تمامًا مثل العديد من وظائف التحميل، فإن صفحة وظيفة التحميل موجودة في Ifrmae. بعد نجاح التحميل، نضع المسار الذي تم تحميله في مربع النص يجب كتابة
كود HTML
للصفحة الرئيسية بصيغة b.html
<نوع البرنامج النصي = "نص/جافا سكريبت">
var _parentWin = window.parent;
_parentWin.form1.username.value = "xxxx" ؛
</script>
عنوان المثيل: http://www.cnspry.cn/blog/attachments/window.parent مثيل/a.html
كود المصدر:
1.a.html
كود اتش تي ام ال
<أتش تي أم أل>
<الرأس>
<title>الصفحة الرئيسية</title>
<النص البرمجي>
/** تمت إضافة متغيرات الاختبار لاختبار نافذة IFrame الفرعية التي تستدعي المتغيرات العامة للنافذة الرئيسية*/
varparentVairous = "تمت إضافة متغير اختبار لاختبار نافذة IFrame الفرعية التي تستدعي المتغير العام للنافذة الرئيسية";
الدالةparentInvociFrame()
{
var iframeTest = document.frames["iframeTest"]; // يمكن أيضًا استخدام document.getElementById("iframeTest");
تنبيه (iframeTest.document.body.innerHTML)؛
تنبيه (iframeTest.iFrameVair)؛
}
</script>
</الرأس>
<الجسم>
<اسم النموذج = "form1" معرف = "form1">
<نوع الإدخال = "نص" اسم = "اسم المستخدم" معرف = "اسم المستخدم"/>
<input type = "button" value = "تقوم النافذة الرئيسية باستدعاء المحتوى الموجود في نافذة IFrame الفرعية" عند النقر = 'parentInvocIFrame()'/>
</النموذج>
<iframe src="b.html" width = '100%' id = 'iframeTest'></iframe>
</الجسم>
</html>
1.ب.أتش تي أم أل
كود اتش تي ام ال
<أتش تي أم أل>
<الرأس>
<العنوان></العنوان>
<نوع البرنامج النصي = "نص/جافا سكريبت">
/** تمت إضافة الوظيفة العامة للنافذة الفرعية لاختبار النموذج الأصلي الذي يستدعي الوظيفة العامة لنموذج IFrame الفرعي*/
var iFrameVair = "اختبر النموذج الأصلي لاستدعاء الوظيفة العامة لنموذج IFrame الفرعي";
وظيفةUpdateParent()
{
var _parentWin = window.parent;
_parentWin.form1.username.value = "xxxx" ؛
}
الدالة ChildInvoceParent()
{
varparentVairous = window.parent.window.parentVairous;
تنبيه(parentVairous);
}
</script>
</الرأس>
<الجسم>
<اسم النموذج = "form1" معرف = "form1">
<ص> </ص>
<p align="center">
<نوع الإدخال = "زر"
الاسم = "زر"
معرف = "زر"
القيمة = "تحديث محتوى اسم المستخدم للصفحة الرئيسية"
عند النقر = "UpdateParent()">
<نوع الإدخال = "زر"
الاسم = "الزر 2"
معرف = "زر2"
value = "اختبر نافذة IFrame الفرعية لاستدعاء المتغير العام للنافذة الرئيسية"
onclick = "childInvoceParent();"/>
</ص>
<ص> </ص>
</النموذج>
</الجسم>
</html>
ملاحظة: لا يمكن الحصول عليه عبر المجالات، على سبيل المثال، إذا كان src لإطار iframe هو "http://www.xxx.ccc/"، فلا يمكن الحصول عليه.
2: window.opener هي الصفحة الفرعية المفتوحة بواسطة window.open والتي تستدعي عنوان مثيل كائن الصفحة الأصل: http://www.cnspry.cn/blog/attachments/window.opener مثيل/a.html
كود المصدر:
2.a.html
كود اتش تي ام ال
<أتش تي أم أل>
<الرأس>
<title>الصفحة الرئيسية</title>
<نوع البرنامج النصي = "نص/جافا سكريبت">
/** تمت إضافة متغيرات الاختبار لاختبار نافذة IFrame الفرعية التي تستدعي المتغيرات العامة للنافذة الرئيسية*/
varparentVairous = "تمت إضافة متغير اختبار لاختبار نافذة IFrame الفرعية التي تستدعي المتغير العام للنافذة الرئيسية";
/**
* لأنه مختلف عن IFrame (IFrame له معرف، window.open() له أوضاع مختلفة عن النافذة الأصلية والفرعية لـ IFrame)،
* لذلك عند فتح نافذة جديدة من خلال طريقة window.open()، يجب أن يكون هناك كائن في النافذة الجديدة
* بالطبع، يجب أن تظهر النافذة الفرعية أولاً قبل أن يتم استدعاء المتغيرات الموجودة في النافذة الفرعية، وإلا سيتم طرح استثناء
*/
varOpenWindow;
الدالة openSubWin()
{
OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, Toolbar=no, Menubar=yes,scrollbars=yes,resizable=yes,location =لا، الحالة=لا');
}
الدالةparentInvoceChild()
{
if(OpenWindow)//بالطبع يجب أن تنبثق النافذة الفرعية أولاً قبل أن يتم استدعاء المتغيرات الموجودة في النافذة الفرعية، وإلا سيتم طرح استثناء
{
تنبيه (OpenWindow.iFrameVair)؛
}
}
</script>
</الرأس>
<الجسم>
<اسم النموذج = "form1" معرف = "form1">
<نوع الإدخال = "نص" اسم = "اسم المستخدم" معرف = "اسم المستخدم"/>
<input type = "button" value = "صفحة فرعية منبثقة" عند النقر = "openSubWin ()">
<input type = "button" value = "اختبار استدعاء المتغيرات العامة في النافذة المنبثقة" عند النقر = "parentInspokeChild ()">
</النموذج>
</الجسم>
</html>
2.ب.أتش تي أم أل
كود اتش تي ام ال
<أتش تي أم أل>
<الرأس>
<title>الصفحة الفرعية</title>
<نوع البرنامج النصي = "نص/جافا سكريبت">
/** تمت إضافة الوظيفة العامة للنافذة الفرعية لاختبار النموذج الأصلي الذي يستدعي الوظيفة العامة لنموذج IFrame الفرعي*/
var iFrameVair = "اختبر النموذج الأصلي لاستدعاء الوظيفة العامة لنموذج IFrame الفرعي";
وظيفةUpdateParent()
{
var _parentWin = window.opener;
_parentWin.form1.username.value = "xxxx" ؛
}
الدالة ChildInvoceParent()
{
varparentVairous = window.opener.window.parentVairous;
تنبيه(parentVairous);
}
</script>
</الرأس>
<الجسم>
<اسم النموذج = "form1" معرف = "form1">
<ص> </ص>
<p align="center">
<نوع الإدخال = "زر"
عند النقر = "UpdateParent();"
الاسم = "زر"
معرف = "زر"
value="تحديث محتوى اسم المستخدم للصفحة الرئيسية">
<نوع الإدخال = "زر"
الاسم = "الزر 2"
معرف = "زر2"
value = "اختبر نافذة IFrame الفرعية لاستدعاء المتغير العام للنافذة الرئيسية"
onclick = "childInvoceParent();"/>
</ص>
<ص> </ص>
</النموذج>
</الجسم>
بعد أن تم تذكيرك بواسطة hanjs، من المهم حقًا ملاحظة أن النافذة الفرعية للنافذة المشروطة لا يمكنها تعديل أي محتوى في صفحة النافذة الأصلية.
على سبيل المثال، قم بتعديل: OpenWindow = window.open('b.html', 'newwindow', 'height=1024, width=1300, top=0, left=0, toolbar=no, Menubar=yes,scrollbars=yes, resizable= Yes,location=no,status=no');
For: OpenWindow = window.showModalDialog("b.html",'newwindow',"dialogHeight:100px,center:yes,resizable:no,status:no");
عندما تريد تعديل المحتوى في النافذة الرئيسية في النافذة الفرعية، سيظهر خطأ مفاده أن "XX" فارغ أو ليس كائنًا، و"XX" هنا هو المحتوى الموجود في النافذة الرئيسية التي تريد تعديلها.