Backbone: Safari 9.1의 navigation()에 λŒ€ν•œ DOM μ˜ˆμ™Έ 18

에 λ§Œλ“  2016λ…„ 05μ›” 13일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: jashkenas/backbone

SecurityError: pushState() κ°€ 100번 ν˜ΈμΆœλ˜λŠ” μˆœκ°„λΆ€ν„° Safari(iOS 및 OSX)μ—μ„œ DOM μ˜ˆμ™Έ 18이 λ°œμƒν•©λ‹ˆλ‹€.

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 μ—μ„œ 탐색을 λž˜ν•‘ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.
μ‚¬νŒŒλ¦¬ 9.1μ—μ„œ (μ΅œμ‹  μ•ˆμ • ν˜„μž¬) - 총 100λ°°
μ‚¬νŒŒλ¦¬ 9.1.1 개발자 ν”„λ¦¬λ·°μ—μ„œ - 30μ΄ˆμ— 100회

μ™œ μ•ˆ κ³ μ³μ§€λ‚˜μš”?
μž‘λ™ν•˜μ§€ μ•ŠλŠ” κΈ°λŠ₯을 κ°–λŠ” 것이 ν—ˆμš©λœλ‹€λŠ” λ§μž…λ‹ˆκΉŒ?

λ‚˜λŠ” μ‚¬νŒŒλ¦¬ 버그λ₯Ό 읽고 수용 κ°€λŠ₯ν•œ 해결책을 보지 λͺ»ν–ˆκΈ° λ•Œλ¬Έμ— 거기에 λ°°μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€. try/catchλ₯Ό μ‚¬μš©ν•˜κ³  100번째 λ³€κ²½ 이후 경둜λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ” 것은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

try/catchλ₯Ό μ‚¬μš©ν•˜κ³  100번째 λ³€κ²½ 이후 경둜λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ” 것은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ™μ˜. 그것은 ν˜„μž¬μ˜ 행동보닀 더 λ‚˜μœ μ†Œλ¦¬ μ—†λŠ” μ‹€νŒ¨μž…λ‹ˆλ‹€.

μ•„λ§ˆλ„ 였λ₯˜κ°€ λ°œμƒν•  경우 ν•΄μ‹œλ‘œ 폴백해야 ν•©λ‹ˆλ‹€.

였늘 μˆ˜μ • 사항이 ν¬ν•¨λœ Safari 9.1.1이 μΆœμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
in safari safari 9.1.1 history.pushState() λŠ” 30초 λ™μ•ˆ 100번 ν˜ΈμΆœν•œ κ²½μš°μ—λ§Œ μ‹€νŒ¨ν•©λ‹ˆλ‹€.

닫은? μ‚¬λžŒλ“€μ΄ 곧 μ—…λ°μ΄νŠΈλ₯Ό λ°›κΈ°λ₯Ό λ°”λΌμ‹­λ‹ˆκΉŒ?

이것은 μš°λ¦¬κ°€ ν•  수 μžˆλŠ” 것이 λ§Žμ§€ μ•Šμ€ Safari의 λ²„κ·Έμž…λ‹ˆλ‹€. 9.1이 λ‚˜μ˜¨ 지 2κ°œμ›” 밖에 μ•ˆ λ˜μ—ˆλ‹€λŠ” 점을 κ°μ•ˆν•  λ•Œ μš°λ¦¬λŠ” 아무 것도 ν•˜μ§€ μ•Šκ³  μ‚¬λžŒλ“€μ΄ μ—…λ°μ΄νŠΈν•˜λ„λ‘ ν•˜λŠ” 것이 μ•ˆμ „ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰