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
يبدو أن رابط منتدى مطوري 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 خرج لمدة شهرين فقط ، أعتقد أننا آمنون بعدم القيام بأي شيء والسماح للأشخاص بالتحديث.