block window.open

This commit is contained in:
Michael Zhang 2017-12-02 12:19:50 -06:00
parent cf6978693d
commit 90b2e60c71
No known key found for this signature in database
GPG key ID: A1B65B603268116B
2 changed files with 23 additions and 9 deletions

View file

@ -66,7 +66,7 @@
return undefined;
};
const keyPathToRefPath = function (keyPath) {
const keyPathToRefPath = function (keyPath, target) {
const keyParts = keyPath.split(".");
return keyParts.reduce(function (prev, cur) {
@ -76,7 +76,7 @@
const numNodes = prev.length;
const currentLeaf = (numNodes === 0)
? window
? target
: prev[numNodes - 1];
const nextLeaf = currentLeaf[cur];
@ -157,8 +157,10 @@
const defaultBlockingProxy = createBlockingProxy();
const blockFeatureAtKeyPath = function (keyPath) {
const propertyRefs = keyPathToRefPath(keyPath);
const blockFeatureAtKeyPath = function (keyPath, target) {
target = target || window;
const propertyRefs = keyPathToRefPath(keyPath, target);
// If we weren't able to turn the key path into an array of references,
// then it means that the property doesn't exist in this DOM /
@ -197,7 +199,20 @@
}
};
featuresToBlock.forEach(blockFeatureAtKeyPath);
const oldWindowOpen = window.open;
const windowOpenProxy = new Proxy(window.open, {
apply: function (target, thisArg, argumentsList) {
console.log("window.open =", oldWindowOpen);
const wnd = oldWindowOpen.apply(thisArg, argumentsList);
featuresToBlock.forEach((v) => blockFeatureAtKeyPath(v, wnd));
return wnd;
}
});
Object.defineProperty(window, "open", {
get: () => windowOpenProxy
});
featuresToBlock.forEach((v) => blockFeatureAtKeyPath(v));
// Next, delete the WEB_API_MANAGER_PAGE global property. Technically
// this never needed to be global, but doing so allows for easier

View file

@ -189,7 +189,6 @@
"window.onvolumechange",
"window.onwaiting",
"window.onwheel",
"window.open",
"window.opener",
"window.parent",
"window.self",