تصف هذه المقالة طريقة JS لمنع أن تكون صفحات الويب مضمنة في إطار IFRAME. شاركه للرجوع إليه ، على النحو التالي:
على سبيل المثال:
<script type = "text/javaScript"> if (window! = top) // حدد ما إذا كان كائن النافذة الحالي هو top.location.location.href = window.location.href ؛ // إذا لم يكن الأمر كذلك ، فقم بتوجيه عنوان URL تلقائيًا للكائن العلوي إلى عنوان URL الذي تم تضمينه في صفحة الويب <//script>
هذا الرمز صالح. ومع ذلك ، هناك مشكلة: بعد استخدامها ، لا يمكن لأحد تضمين صفحة الويب الخاصة بك في الإطار ، بما في ذلك نفسك.
لذا ، أنا أفكر اليوم ما إذا كانت هناك طريقة لجعل صفحات الويب الخاصة بي مضمنة فقط في إطاري الخاص ، وليس أطر الآخرين؟
على السطح ، هذا السؤال بسيط للغاية. ما عليك سوى إصدار حكم: ما إذا كانت أسماء المجال للإطار الحالي والإطار من المستوى الأعلى هي نفسها ، وإذا كانت الإجابة لا ، فسيتم إعادة توجيه عنوان URL.
if (top.location.hostname! = window.location.hostname) {top.location.href = window.location.href ؛}ومع ذلك ، بشكل غير متوقع ، هذه الكتابة خاطئة ولا يمكن تشغيلها على الإطلاق. هل يمكنك رؤية أين الخطأ؟
افترض أن top.location.hostname هو www.111.com ، و window.location.hostname هو www.222.com. وهذا يعني ، 111.com تضمين 222.com في صفحة الويب الخاصة به. في هذا الوقت ، ماذا سيحدث إذا قارنت top.location.hostname! = window.location.hostname؟
سيؤدي المتصفح إلى حث خطأ رمز!
نظرًا لأنها عبارة عن مجال عبر المجال ، فإن سياسة أمان المتصفح لا تسمح لصفحات الويب الخاصة بـ 222.com بتشغيل 111.com على الويب ، والعكس صحيح. أي يدعو هذا الخطأ "لا أذونات". علاوة على ذلك ، لا يسمح لك المتصفح بعرض Top.location.hostname. في الحالات المتقاطعة ، ستقوم بالإبلاغ مباشرة عن خطأ بمجرد رؤية هذا الكائن.
لذا ، كيف ينبغي تعديل الكود؟
في الواقع ، هذا يدفعنا إلى التحقق مما إذا كان top.location.hostname تم الإبلاغ عن خطأ. إذا تم الإبلاغ عن خطأ ، فهذا يشير إلى أن هناك مجالًا متقاطعًا ، وسيتم إعادة توجيه الكائن العلوي ؛ إذا تم الإبلاغ عن خطأ ، فهذا يشير إلى أنه لا يوجد مجال متقاطع (أو عدم استخدام الإطار) ، فلن يتم اتخاذ أي إجراء.
حاول {top.location.hostname ؛} catch (e) {top.location.href = window.location.href ؛}هذا مكتوب بشكل صحيح ويمكن تشغيله بشكل صحيح في IE و Firefox. ومع ذلك ، سيكون لدى Chrome خطأ. لسبب ما ، في حالات النطاق المتقاطع ، لا يبلغ Chrome عن خطأ في Top.location.hostname!
لا توجد طريقة ، لا يمكنني سوى إضافة قطعة أخرى من الكود التكميلي للكروم.
حاول {top.location.hostname ؛ if (top.location.hostname! = window.location.hostName) {top.location.href = window.location.href ؛ }} catch (e) {top.location.href = window.location.href ؛}حسنًا ، تم الانتهاء من رمز الإصدار الذي تمت ترقيته. باستثناء أسماء النطاق المحلي ، لا يمكن لأي أسماء مجال أخرى تضمين صفحة الويب الخاصة بك في الإطار.
لمزيد من المعلومات حول المحتوى المتعلق بـ JavaScript ، يرجى مراجعة موضوعات هذا الموقع: "ملخص لمهارات تشغيل JavaScript Iframe" ، "ملخص لمهارات تشغيل صفيف JavaScript" ، "ملخص لاستخدام JavaScript الرياضي" ، ملخص "Summary" ، ملخص ، "Summary of Javascript ،" ملخص ، "Summary Of Javascript ،" Summary of Javascript ، "Summary of JavaRcript ، "ملخص للمؤثرات والمهارات الخاصة بالرسوم المتحركة JavaScript" ، "ملخص أخطاء JavaScript ومهارات تصحيح الأخطاء" و "ملخص خوارزمية JavaScript Traversal والمهارات"
آمل أن تكون هذه المقالة مفيدة لبرمجة JavaScript للجميع.