Backbone: استثناء DOM 18 عند التنقل () في Safari 9.1

تم إنشاؤها على ١٣ مايو ٢٠١٦  ·  11تعليقات  ·  مصدر: jashkenas/backbone

SecurityError: تم طرح استثناء DOM 18 بواسطة Safari (iOS و OSX) من لحظة استدعاء pushState() 100 مرة.

https://forums.developer.apple.com/thread/36650
كمان: https://jsfiddle.net/n3uxkyhr/5/

var TestRouter = Backbone.Router.extend( {
    initialize: function() {
        this.route("/test/:id", function( id ) { console.log("test" + id) });
    }
} );
var router = new TestRouter();
Backbone.history.start({pushState: true});

try {
  for(var i = 0; i < 200; i++ ) {
      router.navigate("/test/"+i);
    }
    alert("passed, i = " + i);
} catch( e ) {
    var msg = "failed on i " + i + " with error: " + e + "\nStack: " + e.stack;
  console.error( e, msg );
  alert(msg);
}

فشل مع:

failed on i 100 with error: Error: SecurityError: DOM Exception 18
Stack: pushState@[native code]
navigate<strong i="14">@https</strong>://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone.js:1823:69
navigate<strong i="15">@https</strong>://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone.js:1522:32
global code<strong i="16">@https</strong>://fiddle.jshell.net/n3uxkyhr/6/show/:63:22"
global code — show:68
wontfix

ال 11 كومينتر

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

يحتاج العمود الفقري إلى حل بديل لخلل المتصفح.

هل هناك حل بديل تعرفهzowers؟ هل يحدث هذا الخطأ فقط إذا تم استدعاء التنقل 100 مرة بشكل متزامن أم سيحدث إذا تم استدعاؤه 100 مرة بشكل عام؟

لحل هذه المشكلة ، كان علي أن أختتم التنقل بـ try/catch
في Safari 9.1 (أحدث إسطبل اعتبارًا من اليوم) - إجمالي 100 مرة
في معاينة مطور Safari 9.1.1 - 100 مرة في 30 ثانية

لماذا لا يصلح؟
هل تقول أنه من المقبول أن يكون لديك وظيفة لا تعمل؟

لقد وضعت ذلك هناك لأنني قرأت خطأ سفاري لم أجد حلاً مقبولاً. استخدام المحاولة / الالتقاط وعدم تغيير المسار بعد التغيير رقم 100 غير مقبول IMO

استخدام المحاولة / الالتقاط وعدم تغيير المسار بعد التغيير رقم 100 غير مقبول IMO

متفق. هذا فشل صامت ، وهو أسوأ من السلوك الحالي.

ربما يجب أن يتراجع التنقل إلى التجزئة في حالة حدوث خطأ

اليوم أطلق سراح سفاري 9.1.1 مع الإصلاح
في رحلات السفاري 9.1.1 history.pushState() يفشل فقط إذا استدعى 100 مرة في 30 ثانية

مغلق؟ تأمل أن يحصل الناس على التحديث قريبًا؟

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات