在GNOME Shell扩展'这是猴子的补丁,这是出乎意料的
After GNOME Shell extension's monkey-patching, this.parent is unexpected
对于提升激活的GNOME Shell 3.16扩展,我正在尝试对AppSwitcherPopup._finish
方法进行猴子补丁。与原始版本一样,修补版本调用this.parent
:
function _modifiedFinish(timestamp) {
// ...monkey-patched code...
this.parent(timestamp);
}
function enable() {
_originalFinish = AltTab.AppSwitcherPopup.prototype._finish;
AltTab.AppSwitcherPopup.prototype._finish = _modifiedFinish;
}
(完整代码)
但我在控制台中得到了这个堆栈跟踪(来自运行gnome-shell --replace
):
(gnome-shell:24452): Gjs-WARNING **: JS ERROR: TypeError: The method '_keyReleaseEvent' is not on the superclass
_parent@resource:///org/gnome/gjs/modules/lang.js:129
_modifiedFinish@/home/lastorset/.local/share/gnome-shell/extensions/Alt_Tab_Mod_Only_Raise_Activated_Window@dsboger.com.br/extension.js:34
SwitcherPopup<._keyReleaseEvent@resource:///org/gnome/shell/ui/switcherPopup.js:199
wrapper@resource:///org/gnome/gjs/modules/lang.js:169
在这种情况下,SwitcherPopup._keyReleaseEvent
正在调用this
,而this
应该是AppSwitcherPopup
子类的实例。我相信this.parent
在打补丁后应该是一样的——为什么它现在试图呼叫呼叫者?既然如此,为什么不成功呢?
我查找了生成this.parent
的GJS代码,但我找不到缺少什么。
经过进一步挖掘,我找到了一种修复方法。在GJS类模型中,parent
函数实际上是在寻找方法所有者的超类,以便调用同名方法。看起来每个GJS类都有一个设置_owner
的wrapFunction辅助对象。我用它来修补函数:
AltTab.AppSwitcherPopup.prototype._finish = AltTab.AppSwitcherPopup.wrapFunction('_finish', _modifiedFinish);
相关文章:
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 任何人都知道IE7设置或更新/补丁,它可以防止IE因为jquery错误而无法加载页面
- 了解Javascript中的猴子补丁
- tastypie和x-editable使用补丁
- 补丁'这'带有jQuery的变量
- 使用油脂猴子自动点击延迟
- 猴子补丁导出功能
- 如何在没有临时变量的情况下扩展方法(猴子补丁)
- 在篡改猴子中,变量urlm的行为不同
- 带有篡改猴子错误的 MomentJS
- 你能对YUI模块的猴子补丁方法吗?
- 猴子补丁 jquery 函数内容
- 什么是关于打字稿的猴子补丁
- 如何猴子补丁快速视图查找
- 在GNOME Shell扩展'这是猴子的补丁,这是出乎意料的
- 猴子补丁没有开火.(我猜这只猴子不会打鸭子.)
- 我该如何申报'猴子补丁'打字稿中的原型
- JavaScript猴子补丁
- 是“;猴子补丁”;真的那么糟糕
- 在编写TypeScript单元测试时,我可以对依赖进行猴子补丁吗?