press-plus
Version:
44 lines (37 loc) • 1.22 kB
text/typescript
/* eslint-disable @typescript-eslint/no-this-alias */
import type { PAGView } from './types';
// 定义拦截器方法的类型
interface InterceptorMethods {
makeSnapshot(this: PAGView): Promise<ImageBitmap>;
[key: string]: Function; // 添加索引签名以解决类型检查错误
}
const interceptor: InterceptorMethods = {
makeSnapshot(this: PAGView) {
const pagView = this;
return new Promise((resolve, reject) => {
pagView.makeSnapshot()
.then((bitmap: ImageBitmap) => {
console.log('[info]pag-web-api, 完成截图', bitmap);
resolve(bitmap);
})
.catch((err: any) => reject(err));
});
},
};
function createProxyPAGVIew(originPAGView: PAGView): any {
const proxyPAGView = new Proxy(originPAGView, {
get(target, prop, receiver) {
const value = interceptor[prop as keyof InterceptorMethods];
if (value instanceof Function) {
return function (this: any, ...args: any[]) {
return value.apply(this === receiver ? target : this, args); // 兼容this方式调用
};
}
return Reflect.get(target, prop, receiver);
},
});
return proxyPAGView;
}
export {
createProxyPAGVIew,
};