يتصرف المتصفح مرة أخرى في متداخل IFRAME قبل الصفحة نفسها - هل هناك طريقة لتجنب ذلك؟

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

سؤال

لدي صفحة مع بيانات ديناميكية تحميلها بعض AJAX والكثير من جافا سكريبت.

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

واحدة من عناصر البيانات هذه هي عنوان URL الذي يتم توفيره إلى IFRAME.

أنا أستعمل JQuery BBQ: Back Button & Query Library لمحاكاة سلوك الظهر للمتصفح.

يعمل كل شيء جيدا إلى جانب حقيقة أنه عندما أقوم بالنقر فوق الزر الخلفي لأول مرة، يعود iFrame إلى موقعه السابق، ثم أحتاج إلى النقر مرة أخرى لإعادة الصفحة.

هل هناك طريقة لتعطيل سلوك الخلف iframe؟

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

المحلول

لقد وجدت الإجابة على مشكلتي تخمين أنه قد يكون مفيدا للآخرين هناك.

كانت المشكلة مع الطريقة التي قمت بتعيين عناوين URL جديدة لبلدي iFrame، استخدمت jQuery بحيث تبدو مثل هذا:

$('#myIFrame').attr('src',newUrl);

عند تعيين عنوان URL بهذه الطريقة، يضيف إدخال جديد إلى قائمة المستعرض من عناوين URL التي تمت زيارتها للعودة إليه.
لم يكن هذا السلوك المطلوب، لذلك بعد بعض googling، وجدت أنه يمكنك تعيين عنوان URL جديد لكائن IFRAME دون إضافة ذلك إلى "القائمة مرة أخرى"، يبدو الأمر كذلك:

var frame = $('#myIFrame')[0];  
frame.contentWindow.location.replace(newUrl);

بهذه الطريقة يتصرف زر الخلفي تماما كما هو متوقع.

راجع للشغل، حصلت على إجابتي من هنا.

آمل أن يكون هذا مفيدا لك كما كان لي.

نصائح أخرى

لا يبدو أن الإجابة المقبولة تعمل إذا حاولت تعيين عنوان URL عبر المجال الخاص ب IFRAME. كحل مؤقت، قمت بفصل iFrame من DOM قبل إعداد src (باستخدام jquery).

// remove IFrame from DOM before setting source, 
// to prevent adding entries to browser history
var newUrl = 'http://www.example.com';
var iFrame = $('#myIFrame');
var iFrameParent = iFrame.parent();

iFrame.remove();
iFrame.attr('src', newUrl);
iFrameParent.append(iFrame);

أقترح عليك إنشاء ارتباط تشعبي داخل iFrame الخاص بك. اتصل به 'back' ووضع href as javascript: history.back (-1) هذا هو أفضل ما يمكنك فعله.

أساسا تحتاج إلى منع إضافة إدخالات تاريخ جديدة في iFrame، history.replacestate. قدم في HTML5 يعمل في معظم الحالات.

history.pushState(state, title, url);

لا، هذا هو ما يصل تماما إلى المتصفح.

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