كيفية تعطيل مربع حوار تحذير إعادة النشر للمتصفح

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

سؤال

لدي تطبيق asp.net يعمل حصريًا على IE7 (موقع ويب داخلي).

عندما يحتاج المستخدم إلى إدخال البيانات، أقوم بفتح نافذة فرعية تحتوي على نموذج.عند إغلاق النموذج، فإنه يستدعي javascript:window.opener.location.reload(true) بحيث يتم عرض البيانات الجديدة على الصفحة الرئيسية.

المشكلة هي أن المتصفح يشتكي من ضرورة إعادة نشر الصفحة.هل هناك أي طريقة لإيقاف هذه الميزة؟

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

المحلول

ذلك لأن الصفحة الموجودة في Window.Opener تأتي من طلب منشور ، ربما يمكنك استخدام JavaScript: window.opener.location = window.opener.location ؛للقيام بطلب GET فقط إذا كان من الممكن جلب البيانات بدون POST.

نصائح أخرى

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

1) يقوم المستخدم بملء النموذج وإرسال البيانات عبر POST.

2) تتلقى الواجهة الخلفية البيانات وتتصرف بناءً عليها.

3) بدلاً من إعادة المحتوى إلى المستخدم، تصدر الواجهة الخلفية عملية إعادة توجيه 302 بمجرد الانتهاء من معالجة الصفحة (ربما إعادة توجيه المستخدم مرة أخرى إلى عنوان URL نفسه بالضبط، إذا لزم الأمر)

4) الصفحة التي سيراها المستخدم هي الصفحة التي طلبت من متصفحه إعادة التوجيه إليها.سيقومون بتحميل الصفحة المُعاد توجيهها بطلب GET القياسي.إذا حاولوا تحديث الصفحة، فلن يتم إعادة نشر البيانات.تم حل المشكلة.

هذه مشكلة في طريقة "إعادة النشر" المعتادة لـ ASP.NET.إذا كنت بحاجة إلى إعادة تحميل صفحة دون هذا التحذير، فيجب أن تأتي هذه الصفحة من GET، وليس من POST.يمكنك إجراء Response.Redirect("...") بنفسك.ولكن هذا سوف يدمر استخدام حالة العرض.

يعمل asp.net mvc على إصلاح هذه المشكلة، وهي ليست مشكلة IE7 فقط ولكنها ميزة أمان لمعظم المتصفحات.لا يوجد حل أعرفه إلا أنه يمكنك فقط تحديث المحتوى في النموذج الرئيسي باستخدام js بدلاً من إعادة تحميل الصفحة بأكملها

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

javascript:window.opener.location='عنوان URL الخاص بك'

AFAIK، وليس عن طريق البرامج النصية الخاصة بك.

قد تحاول:

window.opener.location = '#';

يجب أن يتحايل على إعادة نشر المتصفح.ويمكنك ضبط اسم التجزئة حسب الحاجة.

إذا انتقلت من الصفحة 1 إلى الصفحة 2، وأردت تعطيل المتصفح من العودة إلى الصفحة 1، فقم بإضافة ما يلي في أعلى الصفحة 1.

<script>
if(window.history.forward(1) != null)
                 window.history.forward(1);
</script>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top