mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-23 10:57:58 +01:00
Make things not be broken on FF<29.
This commit is contained in:
@@ -111,7 +111,8 @@ var Modules = function Modules(window) {
|
|||||||
const BASES = [BASE, "resource://dactyl-local-content/"];
|
const BASES = [BASE, "resource://dactyl-local-content/"];
|
||||||
|
|
||||||
let proxyCache = {};
|
let proxyCache = {};
|
||||||
let proxy = new Proxy(window, {
|
if (config.haveGecko(29))
|
||||||
|
var proxy = new Proxy(window, {
|
||||||
get: function window_get(target, prop) {
|
get: function window_get(target, prop) {
|
||||||
// `in`, not `hasOwnProperty`, because we want to return
|
// `in`, not `hasOwnProperty`, because we want to return
|
||||||
// unbound methods in `Object.prototype`
|
// unbound methods in `Object.prototype`
|
||||||
@@ -129,6 +130,39 @@ var Modules = function Modules(window) {
|
|||||||
return target[prop] = val;
|
return target[prop] = val;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
else {
|
||||||
|
// Bug 814892
|
||||||
|
let o = {};
|
||||||
|
// Oh, the brokenness... See bug 793210
|
||||||
|
Object.preventExtensions(o);
|
||||||
|
proxy = new Proxy(o, {
|
||||||
|
get: function window_get(target, prop) {
|
||||||
|
// `in`, not `hasOwnProperty`, because we want to return
|
||||||
|
// unbound methods in `Object.prototype`
|
||||||
|
if (prop in proxyCache)
|
||||||
|
return proxyCache[prop];
|
||||||
|
|
||||||
|
let p = window[prop];
|
||||||
|
if (callable(p))
|
||||||
|
return proxyCache[prop] = p.bind(window);
|
||||||
|
|
||||||
|
return p;
|
||||||
|
},
|
||||||
|
|
||||||
|
set: function window_set(target, prop, val) {
|
||||||
|
return window[prop] = val;
|
||||||
|
},
|
||||||
|
|
||||||
|
getOwnPropertyDescriptor: function (target, prop) Object.getOwnPropertyDescriptor(window, prop),
|
||||||
|
getOwnPropertyNames: function (target, prop) Object.getOwnPropertyNames(window),
|
||||||
|
defineProperty: function (target, prop, desc) Object.defineProperty(window, prop, desc),
|
||||||
|
deleteProperty: function (target, prop) { delete window[prop]; },
|
||||||
|
has: function (target, prop) prop in window,
|
||||||
|
hasOwn: function (target, prop) hasOwnProperty(window, prop),
|
||||||
|
enumerate: function (target) (p for (p in window)),
|
||||||
|
iterate: function (target) (p for (p of window))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var jsmodules = newContext(proxy, false, "Dactyl `jsmodules`");
|
var jsmodules = newContext(proxy, false, "Dactyl `jsmodules`");
|
||||||
jsmodules.NAME = "jsmodules";
|
jsmodules.NAME = "jsmodules";
|
||||||
|
|||||||
Reference in New Issue
Block a user