mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2025-01-08 12:44:48 +01:00
PDF canvas support
This commit is contained in:
parent
3eed0d67d3
commit
f185ad443b
Binary file not shown.
@ -1,38 +1,51 @@
|
|||||||
var getContext = unsafeWindow.HTMLCanvasElement.prototype.getContext;
|
var getContext = unsafeWindow.HTMLCanvasElement.prototype.getContext;
|
||||||
var askFunctionName = Math.random().toString(16);
|
var askFunctionName = Math.random().toString(16);
|
||||||
|
|
||||||
function block(){
|
function checkPDF(blocking){
|
||||||
// consoe.log("block");
|
if (unsafeWindow.document.contentType.match(/\/pdf$/i)){
|
||||||
delete unsafeWindow.HTMLCanvasElement.prototype[askFunctionName];
|
self.port.emit("isPDF", blocking);
|
||||||
unsafeWindow.HTMLCanvasElement.prototype.getContext = null;
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
function ask(){
|
|
||||||
// console.log("ask");
|
function block(force){
|
||||||
|
if (force || !checkPDF("block")){
|
||||||
Object.defineProperty(
|
// consoe.log("block");
|
||||||
unsafeWindow.HTMLCanvasElement.prototype,
|
delete unsafeWindow.HTMLCanvasElement.prototype[askFunctionName];
|
||||||
askFunctionName,
|
unsafeWindow.HTMLCanvasElement.prototype.getContext = null;
|
||||||
{
|
}
|
||||||
value: getContext,
|
}
|
||||||
enumerabe: false
|
function ask(force){
|
||||||
}
|
if (force || !checkPDF("ask")){
|
||||||
);
|
// console.log("ask");
|
||||||
unsafeWindow.HTMLCanvasElement.prototype.getContext = new unsafeWindow.Function(function(){
|
|
||||||
var oldBorder = this.style.border;
|
Object.defineProperty(
|
||||||
this.style.border = "2px dashed red";
|
unsafeWindow.HTMLCanvasElement.prototype,
|
||||||
var confirmText =
|
askFunctionName,
|
||||||
this.parentNode?
|
{
|
||||||
"Do you want to allow the red bordered <canvas>?":
|
value: getContext,
|
||||||
"Do you want to allow an invisibe <canvas>?";
|
enumerabe: false
|
||||||
var allow = confirm(confirmText);
|
}
|
||||||
this.style.border = oldBorder;
|
);
|
||||||
if (allow){
|
unsafeWindow.HTMLCanvasElement.prototype.getContext = new unsafeWindow.Function(function(){
|
||||||
return this["askFunctionName"].apply(this, arguments);
|
var oldBorder = this.style.border;
|
||||||
}
|
this.style.border = "2px dashed red";
|
||||||
else {
|
var confirmText =
|
||||||
return null;
|
this.parentNode?
|
||||||
}
|
"Do you want to allow the red bordered <canvas>?":
|
||||||
}.toString().replace(/^function\s*\(\)\s*\{|\}\s*$/g, "").replace("askFunctionName", askFunctionName));
|
"Do you want to allow an invisibe <canvas>?";
|
||||||
|
var allow = confirm(confirmText);
|
||||||
|
this.style.border = oldBorder;
|
||||||
|
if (allow){
|
||||||
|
this.getContext = this["askFunctionName"];
|
||||||
|
return this["askFunctionName"].apply(this, arguments);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}.toString().replace(/^function\s*\(\)\s*\{|\}\s*$/g, "").replace(/askFunctionName/g, askFunctionName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
function unblock(){
|
function unblock(){
|
||||||
// console.log("unblock");
|
// console.log("unblock");
|
||||||
|
12
lib/main.js
12
lib/main.js
@ -88,6 +88,10 @@ preferences.on("askPermission", function(){
|
|||||||
}
|
}
|
||||||
workers.forEach(checkWorker);
|
workers.forEach(checkWorker);
|
||||||
});
|
});
|
||||||
|
preferences.on("allowPDFCanvas", function(){
|
||||||
|
workers.forEach(checkWorker);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
pageMod.PageMod({
|
pageMod.PageMod({
|
||||||
include: "*",
|
include: "*",
|
||||||
@ -100,5 +104,13 @@ pageMod.PageMod({
|
|||||||
worker.on("detach", function(){
|
worker.on("detach", function(){
|
||||||
detachWorker(this, workers);
|
detachWorker(this, workers);
|
||||||
});
|
});
|
||||||
|
worker.port.on("isPDF", function(blocking){
|
||||||
|
if (prefs.allowPDFCanvas){
|
||||||
|
worker.port.emit("unblock");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
worker.port.emit(blocking, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
@ -31,6 +31,13 @@
|
|||||||
"description": "If you want to be asked if you want to block a canvas element if the domain is neither in the white or black list.",
|
"description": "If you want to be asked if you want to block a canvas element if the domain is neither in the white or black list.",
|
||||||
"type": "bool",
|
"type": "bool",
|
||||||
"value": true
|
"value": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "allowPDFCanvas",
|
||||||
|
"title": "Allow canvas in PDFs.",
|
||||||
|
"description": "The native pdf.js uses <canvas> to display the PDF content. If this is unchecked there will lots of annoying ask dialogs.",
|
||||||
|
"type": "bool",
|
||||||
|
"value": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"author": "Korbinian Kapsner",
|
"author": "Korbinian Kapsner",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user