mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-22 13:32:54 +08:00
perf(tapclick): tapPolyfill is only used in UIWebView!
- improves drastically the responsiveness in WK and iOS Safari
This commit is contained in:
@ -32,7 +32,8 @@ export class TapClick {
|
||||
this.activator = new Activator(app, config);
|
||||
}
|
||||
|
||||
this.usePolyfill = (config.get('tapPolyfill') === true);
|
||||
this.usePolyfill = config.getBoolean('tapPolyfill');
|
||||
console.debug('Using usePolyfill:', this.usePolyfill);
|
||||
|
||||
this.events.listen(document, 'click', this.click.bind(this), true);
|
||||
this.pointerEvents = this.events.pointerEvents({
|
||||
@ -96,7 +97,7 @@ export class TapClick {
|
||||
if (!this.app.isEnabled()) {
|
||||
preventReason = 'appDisabled';
|
||||
|
||||
} else if (!ev.isIonicTap && this.isDisabledNativeClick()) {
|
||||
} else if (this.usePolyfill && !ev.isIonicTap && this.isDisabledNativeClick()) {
|
||||
preventReason = 'nativeClick';
|
||||
}
|
||||
|
||||
|
@ -101,17 +101,17 @@ export const PLATFORM_CONFIGS: {[key: string]: PlatformConfig} = {
|
||||
settings: {
|
||||
autoFocusAssist: 'delay',
|
||||
hoverCSS: false,
|
||||
inputBlurring: isIOSDevice,
|
||||
inputCloning: isIOSDevice,
|
||||
inputBlurring: isIOS,
|
||||
inputCloning: isIOS,
|
||||
keyboardHeight: 300,
|
||||
mode: 'ios',
|
||||
scrollAssist: isIOSDevice,
|
||||
scrollAssist: isIOS,
|
||||
statusbarPadding: !!((<any>window).cordova),
|
||||
swipeBackEnabled: isIOSDevice,
|
||||
swipeBackEnabled: isIOS,
|
||||
swipeBackThreshold: 40,
|
||||
tapPolyfill: isIOSDevice,
|
||||
virtualScrollEventAssist: !(window.indexedDB),
|
||||
disableScrollAssist: isIOSDevice,
|
||||
tapPolyfill: isIOSUI,
|
||||
virtualScrollEventAssist: isIOSUI,
|
||||
disableScrollAssist: isIOS,
|
||||
},
|
||||
isMatch(p: Platform) {
|
||||
return p.isPlatformMatch('ios', ['iphone', 'ipad', 'ipod'], ['windows phone']);
|
||||
@ -219,7 +219,7 @@ export const PLATFORM_CONFIGS: {[key: string]: PlatformConfig} = {
|
||||
};
|
||||
|
||||
|
||||
function isIOSDevice(p: Platform) {
|
||||
function isIOS(p: Platform): boolean {
|
||||
// shortcut function to be reused internally
|
||||
// checks navigator.platform to see if it's an actual iOS device
|
||||
// this does not use the user-agent string because it is often spoofed
|
||||
@ -227,6 +227,25 @@ function isIOSDevice(p: Platform) {
|
||||
return p.testNavigatorPlatform('iphone|ipad|ipod');
|
||||
}
|
||||
|
||||
function isSafari(p: Platform): boolean {
|
||||
return p.testUserAgent('Safari');
|
||||
}
|
||||
|
||||
|
||||
function isWK(): boolean {
|
||||
return !!window['webkit'];
|
||||
}
|
||||
|
||||
// Commented out becuase it is not used yet
|
||||
// function isIOSWK(p: Platform): boolean {
|
||||
// return isIOS(p) && isWK();
|
||||
// }
|
||||
|
||||
function isIOSUI(p: Platform): boolean {
|
||||
return isIOS(p) && !isWK() && !isSafari(p);
|
||||
}
|
||||
|
||||
|
||||
|
||||
export const PlatformConfigToken = new OpaqueToken('PLTCONFIG');
|
||||
|
||||
|
@ -560,6 +560,13 @@ export class Platform {
|
||||
}
|
||||
}
|
||||
|
||||
testUserAgent(expression: string): boolean {
|
||||
if (this._ua) {
|
||||
return this._ua.indexOf(expression) >= 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
|
Reference in New Issue
Block a user