Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5692607

Browse files
wKozaAndrewKushnir
authored andcommitted
fix(common): Prefer to use pageXOffset / pageYOffset instance of scrollX / scrollY (#28262)
This fix ensures a better cross-browser compatibility.This fix has been used for angular.io.PRClose#28262
1 parent2506c02 commit5692607

File tree

4 files changed

+13
-15
lines changed

4 files changed

+13
-15
lines changed

‎aio/src/app/shared/scroll.service.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export class ScrollService implements OnDestroy {
2424
poppedStateScrollPosition:ScrollPosition|null=null;
2525
// Whether the browser supports the necessary features for manual scroll restoration.
2626
supportManualScrollRestoration:boolean=!!window&&('scrollTo'inwindow)&&
27-
('scrollX'inwindow)&&('scrollY'inwindow)&&isScrollRestorationWritable();
27+
('pageXOffset'inwindow)&&isScrollRestorationWritable();
2828

2929
// Offset from the top of the document to bottom of any static elements
3030
// at the top (e.g. toolbar) + some margin

‎packages/common/src/viewport_scroller.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export class BrowserViewportScroller implements ViewportScroller {
8989
*/
9090
getScrollPosition():[number,number]{
9191
if(this.supportsScrolling()){
92-
return[this.window.scrollX,this.window.scrollY];
92+
return[this.window.pageXOffset,this.window.pageYOffset];
9393
}else{
9494
return[0,0];
9595
}
@@ -149,7 +149,7 @@ export class BrowserViewportScroller implements ViewportScroller {
149149
*/
150150
privatesupportScrollRestoration():boolean{
151151
try{
152-
if(!this.window||!this.window.scrollTo){
152+
if(!this.supportsScrolling()){
153153
returnfalse;
154154
}
155155
// The `scrollRestoration` property could be on the `history` instance or its prototype.
@@ -166,7 +166,7 @@ export class BrowserViewportScroller implements ViewportScroller {
166166

167167
privatesupportsScrolling():boolean{
168168
try{
169-
return!!this.window.scrollTo;
169+
return!!this.window&&!!this.window.scrollTo&&'pageXOffset'inthis.window;
170170
}catch{
171171
returnfalse;
172172
}

‎packages/common/test/viewport_scroller_spec.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ describe('BrowserViewportScroller', () => {
1515
letwindowSpy:any;
1616

1717
beforeEach(()=>{
18-
windowSpy=jasmine.createSpyObj('window',['history','scrollTo']);
18+
windowSpy=
19+
jasmine.createSpyObj('window',['history','scrollTo','pageXOffset','pageYOffset']);
1920
windowSpy.history.scrollRestoration='auto';
2021
documentSpy=jasmine.createSpyObj('document',['getElementById','getElementsByName']);
2122
scroller=newBrowserViewportScroller(documentSpy,windowSpy,null!);

‎packages/router/test/bootstrap.spec.ts‎

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -348,27 +348,24 @@ describe('bootstrap', () => {
348348
awaitrouter.navigateByUrl('/aa');
349349
window.scrollTo(0,5000);
350350

351-
// IE 11 uses non-standard pageYOffset instead of scrollY
352-
constgetScrollY=()=>window.scrollY!==undefined ?window.scrollY :window.pageYOffset;
353-
354351
awaitrouter.navigateByUrl('/fail');
355-
expect(getScrollY()).toEqual(5000);
352+
expect(window.pageYOffset).toEqual(5000);
356353

357354
awaitrouter.navigateByUrl('/bb');
358355
window.scrollTo(0,3000);
359356

360-
expect(getScrollY()).toEqual(3000);
357+
expect(window.pageYOffset).toEqual(3000);
361358

362359
awaitrouter.navigateByUrl('/cc');
363-
expect(getScrollY()).toEqual(0);
360+
expect(window.pageYOffset).toEqual(0);
364361

365362
awaitrouter.navigateByUrl('/aa#marker2');
366-
expect(getScrollY()).toBeGreaterThanOrEqual(5900);
367-
expect(getScrollY()).toBeLessThan(6000);// offset
363+
expect(window.pageYOffset).toBeGreaterThanOrEqual(5900);
364+
expect(window.pageYOffset).toBeLessThan(6000);// offset
368365

369366
awaitrouter.navigateByUrl('/aa#marker3');
370-
expect(getScrollY()).toBeGreaterThanOrEqual(8900);
371-
expect(getScrollY()).toBeLessThan(9000);
367+
expect(window.pageYOffset).toBeGreaterThanOrEqual(8900);
368+
expect(window.pageYOffset).toBeLessThan(9000);
372369
done();
373370
});
374371

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp