mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2024-11-11 07:38:58 +01:00
Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5a1a318b91 | ||
|
e549267085 | ||
|
cee0f75293 | ||
|
91dd283b9a | ||
|
af5365b4eb | ||
|
1b76df7cbc | ||
|
474e929638 | ||
|
642d518110 | ||
|
4f366ed86c | ||
|
00e60074c3 | ||
|
3eedc7b7dc | ||
|
bebcec2139 | ||
|
5181a55071 | ||
|
a8e192fa9b | ||
|
0f3141ee12 | ||
|
e9ce4668fe | ||
|
acce01bfeb | ||
|
d159769997 | ||
|
56401048d1 | ||
|
54c625cd26 | ||
|
7bb3f00b45 | ||
|
b8c6115603 | ||
|
dacc578e12 | ||
|
825fa42141 | ||
|
40a8012ab0 |
@ -46,7 +46,11 @@ async function getAlphaVersion(manifest){
|
|||||||
}
|
}
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const date = `${now.getFullYear()}${f(now.getMonth() + 1)}${f(now.getDate())}`;
|
const date = `${now.getFullYear()}${f(now.getMonth() + 1)}${f(now.getDate())}`;
|
||||||
const baseVersion = `${manifest.version}.${date}`;
|
const versionParts = manifest.version.split(".");
|
||||||
|
while (versionParts.length > 2){
|
||||||
|
versionParts.pop();
|
||||||
|
}
|
||||||
|
const baseVersion = `${versionParts.join(".")}.${date}`;
|
||||||
if (!fs.existsSync(path.join(versionsPath, getXPIFileName("canvasblocker_beta", baseVersion)))){
|
if (!fs.existsSync(path.join(versionsPath, getXPIFileName("canvasblocker_beta", baseVersion)))){
|
||||||
return baseVersion;
|
return baseVersion;
|
||||||
}
|
}
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Otevřít v samostatném panelu",
|
"message": "Otevřít v samostatném panelu",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (výchozí)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "Obecné",
|
"message": "Obecné",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -224,7 +228,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForInvisiblePermission": {
|
"askForInvisiblePermission": {
|
||||||
"message": "Do you want to allow invisible <canvas>?",
|
"message": "Chcete povolit neviditelný <canvas>?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForInvisibleInputPermission": {
|
"askForInvisibleInputPermission": {
|
||||||
@ -232,7 +236,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForInvisibleReadoutPermission": {
|
"askForInvisibleReadoutPermission": {
|
||||||
"message": "Do you want to allow invisible <canvas> readout?",
|
"message": "Chcete povolit čtení neviditelného <canvas>?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForPermission": {
|
"askForPermission": {
|
||||||
@ -244,11 +248,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForReadoutPermission": {
|
"askForReadoutPermission": {
|
||||||
"message": "Do you want to allow <canvas> readout?",
|
"message": "Chcete povolit čtení <canvas>?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForVisiblePermission": {
|
"askForVisiblePermission": {
|
||||||
"message": "Do you want to allow the red bordered <canvas>?",
|
"message": "Chcete povolit červeně ohraničený <canvas>?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForVisibleInputPermission": {
|
"askForVisibleInputPermission": {
|
||||||
@ -256,7 +260,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForVisibleReadoutPermission": {
|
"askForVisibleReadoutPermission": {
|
||||||
"message": "Do you want to allow the readout of the red bordered <canvas>?",
|
"message": "Chcete povolit čtení červeně ohraničeného <canvas>?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForAudioPermission": {
|
"askForAudioPermission": {
|
||||||
@ -268,7 +272,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForAudioReadoutPermission": {
|
"askForAudioReadoutPermission": {
|
||||||
"message": "Do you want to allow audio API readout?",
|
"message": "Chcete povolit čtení audio API?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForHistoryPermission": {
|
"askForHistoryPermission": {
|
||||||
@ -280,7 +284,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForHistoryReadoutPermission": {
|
"askForHistoryReadoutPermission": {
|
||||||
"message": "Do you want to allow history API readout?",
|
"message": "Chcete povolit čtení API historie?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForWindowPermission": {
|
"askForWindowPermission": {
|
||||||
@ -292,7 +296,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForWindowReadoutPermission": {
|
"askForWindowReadoutPermission": {
|
||||||
"message": "Do you want to allow window API readout?",
|
"message": "Chcete povolit čtení API okna?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForDOMRectPermission": {
|
"askForDOMRectPermission": {
|
||||||
@ -304,7 +308,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForDOMRectReadoutPermission": {
|
"askForDOMRectReadoutPermission": {
|
||||||
"message": "Do you want to allow DOMRect API readout?",
|
"message": "Chcete povolit čtení DOMRect API?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForSVGPermission": {
|
"askForSVGPermission": {
|
||||||
@ -316,31 +320,31 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForSVGReadoutPermission": {
|
"askForSVGReadoutPermission": {
|
||||||
"message": "Do you want to allow SVG API readout?",
|
"message": "Chcete povolit čtení API SVG?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForTextMetricsPermission": {
|
"askForTextMetricsPermission": {
|
||||||
"message": "Do you want to allow the TextMetrics API?",
|
"message": "Chcete povolit TextMetrics API?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForTextMetricsInputPermission": {
|
"askForTextMetricsInputPermission": {
|
||||||
"message": "Do you want to allow TextMetrics API input?",
|
"message": "Chcete povolit vstup TextMetrics API?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForTextMetricsReadoutPermission": {
|
"askForTextMetricsReadoutPermission": {
|
||||||
"message": "Do you want to allow TextMetrics API readout?",
|
"message": "Chcete povolit čtení TextMetrics API?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForNavigatorPermission": {
|
"askForNavigatorPermission": {
|
||||||
"message": "Do you want to allow the navigator API?",
|
"message": "Chcete povolit navigator API?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForNavigatorInputPermission": {
|
"askForNavigatorInputPermission": {
|
||||||
"message": "Do you want to allow navigator API input?",
|
"message": "Chcete povolit vstup navigator API?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForNavigatorReadoutPermission": {
|
"askForNavigatorReadoutPermission": {
|
||||||
"message": "Do you want to allow navigator API readout?",
|
"message": "Chcete povolit čtení navigator API?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForScreenPermission": {
|
"askForScreenPermission": {
|
||||||
@ -352,7 +356,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForScreenReadoutPermission": {
|
"askForScreenReadoutPermission": {
|
||||||
"message": "Do you want to allow screen API readout?",
|
"message": "Chcete povolit čtení API obrazovky?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askOnlyOnce_title": {
|
"askOnlyOnce_title": {
|
||||||
@ -408,7 +412,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blackList_title": {
|
"blackList_title": {
|
||||||
"message": "Blacklist",
|
"message": "Seznam zakázaných",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockMode_description": {
|
"blockMode_description": {
|
||||||
@ -424,7 +428,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockMode_options.block": {
|
"blockMode_options.block": {
|
||||||
"message": "allow only whitelist",
|
"message": "povolit pouze seznam povolených",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockMode_options.ask": {
|
"blockMode_options.ask": {
|
||||||
@ -436,11 +440,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockMode_options.allow": {
|
"blockMode_options.allow": {
|
||||||
"message": "block only blacklist",
|
"message": "blokovat pouze seznam zakázaných",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockMode_options.fake": {
|
"blockMode_options.fake": {
|
||||||
"message": "fake",
|
"message": "zkreslit",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockMode_title": {
|
"blockMode_title": {
|
||||||
@ -448,11 +452,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectedCanvasPart_title": {
|
"protectedCanvasPart_title": {
|
||||||
"message": "Protected part of the canvas API",
|
"message": "Chráněna část canvas API",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectedCanvasPart_description": {
|
"protectedCanvasPart_description": {
|
||||||
"message": "nothing: no features of the canvas API are protected.\n\nreadout: the readout features of the canvas API are protected.\n\ninput: the input features of the canvas API are protected. With blocking mode \"fake\" the drawn pixels get modified slightly when displaying text. This makes the detection of the add-on harder but is less secure. With WebGL canvases the behaviour is identical to \"readout\".\n\neverything: both the readout and input features are protected. It's not recommended to use this with \"fake\" block mode as it increases the probability to be detected.",
|
"message": "nic: nejsou chráněny žádné funkce canvas API.\n\nčtení: funkce čtení canvas API jsou chráněny.\n\nvstup: vstupní funkce canvas API jsou chráněny. V režimu blokování \"zkreslit\" se nakreslené pixely při zobrazení textu mírně upraví. Díky tomu je detekce doplňku složitější, ale je to méně bezpečné. S WebGL canvasy je chování totožné s \"čtením\".\n\nvše: jak čtení, tak vstupní funkce jsou chráněny. Není doporučeno použít toto s režimem blokování nastaveným na \"zkreslit\", protože se zvyšuje pravděpodobnost detekce.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectedCanvasPart_urlSpecific": {
|
"protectedCanvasPart_urlSpecific": {
|
||||||
@ -460,7 +464,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectedCanvasPart_options.nothing": {
|
"protectedCanvasPart_options.nothing": {
|
||||||
"message": "nothing",
|
"message": "nic",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectedCanvasPart_options.input": {
|
"protectedCanvasPart_options.input": {
|
||||||
@ -468,7 +472,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectedCanvasPart_options.readout": {
|
"protectedCanvasPart_options.readout": {
|
||||||
"message": "readout",
|
"message": "čtení",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectedCanvasPart_options.everything": {
|
"protectedCanvasPart_options.everything": {
|
||||||
@ -484,7 +488,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputURL": {
|
"inputURL": {
|
||||||
"message": "Input domain or URL \"RegExp\":",
|
"message": "Zadejte doménu nebo URL \"RegExp\":",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"minFakeSize_description": {
|
"minFakeSize_description": {
|
||||||
@ -636,35 +640,35 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLVendor_title": {
|
"webGLVendor_title": {
|
||||||
"message": "Reported webGL vendor",
|
"message": "Nahlášený webGL dodavatel",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLVendor_description": {
|
"webGLVendor_description": {
|
||||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"vendor\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
"message": "Hodnota, která má být hlášena ve funkci webGL \"getParameter\" pro \"vendor\". Speciální hodnoty:\nPro použití původní hodnoty nechte prázdné.\n\n{undefined}: vrací nedefinovanou hodnotu (#508)\n\n{false}: vrací logickou hodnotu false (#508).\n\n{empty}: vrací prázdný řetězec (#508)\n\n{disabled}: vrací null (#508)\n\n{random vendor}: vrací náhodného dodavatele z vestavěného seznamu (#493).\n\n{random renderer}: vrací náhodný renderer z vestavěného seznamu (#493)\n\n<xxx|yyy|zzz>: náhodně vybere jednu ze zadaných možností xxx, yyy nebo zzz (libovolný počet možností) (#493)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLRenderer_title": {
|
"webGLRenderer_title": {
|
||||||
"message": "Reported webGL renderer",
|
"message": "Nahlášené vykreslování webGL",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLRenderer_description": {
|
"webGLRenderer_description": {
|
||||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"renderer\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
"message": "Hodnota, která má být hlášena ve funkci webGL \"getParameter\" pro \"vykreslování\". Speciální hodnoty:\nPro použití původní hodnoty nechte prázdné.\n\n{undefined}: vrací nedefinovanou hodnotu (#508)\n\n{false}: vrací logickou hodnotu false (#508).\n\n{empty}: vrací prázdný řetězec (#508)\n\n{disabled}: vrací null (#508)\n\n{random vendor}: vrací náhodného dodavatele z vestavěného seznamu (#493).\n\n{random renderer}: vrací náhodný renderer z vestavěného seznamu (#493)\n\n<xxx|yyy|zzz>: náhodně vybere jednu ze zadaných možností xxx, yyy nebo zzz (libovolný počet možností) (#493)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLUnmaskedVendor_title": {
|
"webGLUnmaskedVendor_title": {
|
||||||
"message": "Reported webGL unmasked vendor",
|
"message": "Nahlášen webGL nezamaskovaný dodavatel",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLUnmaskedVendor_description": {
|
"webGLUnmaskedVendor_description": {
|
||||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"unmasked vendor\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
"message": "Hodnota, která má být hlášena ve funkci webGL \"getParameter\" pro \"nezamaskovaného dodavatele\". Speciální hodnoty:\nPro použití původní hodnoty nechte prázdné.\n\n{undefined}: vrací nedefinovanou hodnotu (#508)\n\n{false}: vrací logickou hodnotu false (#508).\n\n{empty}: vrací prázdný řetězec (#508)\n\n{disabled}: vrací null (#508)\n\n{random vendor}: vrací náhodného dodavatele z vestavěného seznamu (#493).\n\n{random renderer}: vrací náhodný renderer z vestavěného seznamu (#493)\n\n<xxx|yyy|zzz>: náhodně vybere jednu ze zadaných možností xxx, yyy nebo zzz (libovolný počet možností) (#493)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLUnmaskedRenderer_title": {
|
"webGLUnmaskedRenderer_title": {
|
||||||
"message": "Reported webGL unmasked renderer",
|
"message": "Nahlášeno webGL nezamaskované vykreslování",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLUnmaskedRenderer_description": {
|
"webGLUnmaskedRenderer_description": {
|
||||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"unmasked renderer\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
"message": "Hodnota, která má být hlášena ve funkci webGL \"getParameter\" pro \"nezamaskované vykreslování\". Speciální hodnoty:\nPro použití původní hodnoty nechte prázdné.\n\n{undefined}: vrací nedefinovanou hodnotu (#508)\n\n{false}: vrací logickou hodnotu false (#508).\n\n{empty}: vrací prázdný řetězec (#508)\n\n{disabled}: vrací null (#508)\n\n{random vendor}: vrací náhodného dodavatele z vestavěného seznamu (#493).\n\n{random renderer}: vrací náhodný renderer z vestavěného seznamu (#493)\n\n<xxx|yyy|zzz>: náhodně vybere jednu ze zadaných možností xxx, yyy nebo zzz (libovolný počet možností) (#493)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"useCanvasCache_title": {
|
"useCanvasCache_title": {
|
||||||
@ -692,7 +696,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"displayCallingStack": {
|
"displayCallingStack": {
|
||||||
"message": "display calling stack",
|
"message": "zobrazit zásobník volání",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"displayFullURL": {
|
"displayFullURL": {
|
||||||
@ -704,7 +708,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"enableStackList_title": {
|
"enableStackList_title": {
|
||||||
"message": "Use file specific whitelist",
|
"message": "Použít seznam povolených s ohledem na soubor",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"preBlock": {
|
"preBlock": {
|
||||||
@ -716,39 +720,39 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedReadout": {
|
"fakedReadout": {
|
||||||
"message": "Faked canvas readout on {url}",
|
"message": "Zkresleno čtení canvasu na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedAudioReadout": {
|
"fakedAudioReadout": {
|
||||||
"message": "Faked audio readout on {url}",
|
"message": "Zkresleno čtení audia na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedHistoryReadout": {
|
"fakedHistoryReadout": {
|
||||||
"message": "Faked history readout on {url}",
|
"message": "Zkresleno čtení historie na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedWindowReadout": {
|
"fakedWindowReadout": {
|
||||||
"message": "Faked window readout on {url}",
|
"message": "Zkresleno čtení okna na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedDOMRectReadout": {
|
"fakedDOMRectReadout": {
|
||||||
"message": "Faked DOMRect readout on {url}",
|
"message": "Zkresleno čtení DOMRect na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedSVGReadout": {
|
"fakedSVGReadout": {
|
||||||
"message": "Faked SVG readout on {url}",
|
"message": "Zkresleno čtení SVG na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedTextMetricsReadout": {
|
"fakedTextMetricsReadout": {
|
||||||
"message": "Faked TextMetrics readout on {url}",
|
"message": "Zkresleno čtení TextMetrics na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedNavigatorReadout": {
|
"fakedNavigatorReadout": {
|
||||||
"message": "Faked navigator readout on {url}",
|
"message": "Zkresleno čtení navigator na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedScreenReadout": {
|
"fakedScreenReadout": {
|
||||||
"message": "Faked screen readout on {url}",
|
"message": "Zkresleno čtení obrazovky na {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedInput": {
|
"fakedInput": {
|
||||||
@ -776,7 +780,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"ignorelistDomain": {
|
"ignorelistDomain": {
|
||||||
"message": "silence domain",
|
"message": "umlčet doménu",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"ignorelistURL": {
|
"ignorelistURL": {
|
||||||
@ -788,7 +792,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputIgnore": {
|
"inputIgnore": {
|
||||||
"message": "Input domain or URL \"RegExp\" to add to ignore list:",
|
"message": "Vložte doménu nebo URL \"RegExp\" pro přidání do seznamu ignorovaných:",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputIgnoreDomain": {
|
"inputIgnoreDomain": {
|
||||||
@ -796,7 +800,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputIgnoreURL": {
|
"inputIgnoreURL": {
|
||||||
"message": "Input URL \"RegExp\" to add to ignore list:",
|
"message": "Zadejte URL \"RegExp\" pro přidání do seznamu ignorovaných:",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"selectWhitelist": {
|
"selectWhitelist": {
|
||||||
@ -804,7 +808,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputWhitelist": {
|
"inputWhitelist": {
|
||||||
"message": "Input domain or URL \"RegExp\" to add to whitelist:",
|
"message": "Zadejte doménu nebo URL \"RegExp\" pro přidání do seznamu povolených:",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputWhitelistDomain": {
|
"inputWhitelistDomain": {
|
||||||
@ -812,7 +816,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputWhitelistURL": {
|
"inputWhitelistURL": {
|
||||||
"message": "Input URL \"RegExp\" to add to whitelist:",
|
"message": "Zadejte URL \"RegExp\" pro přidání do seznamu povolených:",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"selectSessionWhitelist": {
|
"selectSessionWhitelist": {
|
||||||
@ -820,7 +824,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputSessionWhitelist": {
|
"inputSessionWhitelist": {
|
||||||
"message": "Input domain or URL \"RegExp\" to add to the session whitelist:",
|
"message": "Zadejte doménu nebo URL \"RegExp\" pro přidání do seznamu povolených v rámci relace:",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputSessionWhitelistDomain": {
|
"inputSessionWhitelistDomain": {
|
||||||
@ -828,7 +832,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"inputSessionWhitelistURL": {
|
"inputSessionWhitelistURL": {
|
||||||
"message": "Input URL \"RegExp\" to add to the session whitelist:",
|
"message": "Zadejte URL \"RegExp\" pro přidání do seznamu povolených v rámci relace:",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"selectWhitelistScope": {
|
"selectWhitelistScope": {
|
||||||
@ -856,7 +860,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"showCallingFile_title": {
|
"showCallingFile_title": {
|
||||||
"message": "Show calling file",
|
"message": "Zobrazit soubor volání",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"showCompleteCallingStack_description": {
|
"showCompleteCallingStack_description": {
|
||||||
@ -864,7 +868,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"showCompleteCallingStack_title": {
|
"showCompleteCallingStack_title": {
|
||||||
"message": "Display complete calling stack",
|
"message": "Zobrazit celý zásobník volání",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"showNotifications_description": {
|
"showNotifications_description": {
|
||||||
@ -936,11 +940,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sourceOutput": {
|
"sourceOutput": {
|
||||||
"message": "Calling file",
|
"message": "Soubor volání",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"stackEntryOutput": {
|
"stackEntryOutput": {
|
||||||
"message": "{url} line {line} column {column}",
|
"message": "{url} řádek {line} sloupec {column}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"stackList_description": {
|
"stackList_description": {
|
||||||
@ -948,11 +952,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"stackList_title": {
|
"stackList_title": {
|
||||||
"message": "File specific whitelist",
|
"message": "Seznam povolených s ohledem na soubor",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"whiteList_title": {
|
"whiteList_title": {
|
||||||
"message": "Whitelist",
|
"message": "Seznam povolených",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"whiteList_description": {
|
"whiteList_description": {
|
||||||
@ -984,7 +988,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sessionWhiteList_title": {
|
"sessionWhiteList_title": {
|
||||||
"message": "Session whitelist",
|
"message": "Seznam povolených v rámci relace",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sessionWhiteList_description": {
|
"sessionWhiteList_description": {
|
||||||
@ -1140,7 +1144,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectWindow_description": {
|
"protectWindow_description": {
|
||||||
"message": "window.opener and window.name will be protected. This can render some webpages unusable.",
|
"message": "window.opener a window.name budou chráněny. To může způsobit nefunkčnost některých stránek.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectWindow_urlSpecific": {
|
"protectWindow_urlSpecific": {
|
||||||
@ -1152,7 +1156,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"allowWindowNameInFrames_title": {
|
"allowWindowNameInFrames_title": {
|
||||||
"message": "Allow window.name in frames",
|
"message": "Povolit window.name v rámech",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"allowWindowNameInFrames_description": {
|
"allowWindowNameInFrames_description": {
|
||||||
@ -1196,11 +1200,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectTextMetrics_title": {
|
"protectTextMetrics_title": {
|
||||||
"message": "Protect TextMetrics API",
|
"message": "Chránit TextMetrics API",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectTextMetrics_description": {
|
"protectTextMetrics_description": {
|
||||||
"message": "This protects against the \"measureText()\" fingerprinting which can be used to cross validate DOMRect values.",
|
"message": "Toto chrání před sběrem otisků \"measureText()\", který lze použít ke křížovému ověření hodnot DOMRect.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectTextMetrics_urlSpecific": {
|
"protectTextMetrics_urlSpecific": {
|
||||||
@ -1208,11 +1212,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectNavigator_title": {
|
"protectNavigator_title": {
|
||||||
"message": "Protect navigator API",
|
"message": "Chránit navigator API",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectNavigator_description": {
|
"protectNavigator_description": {
|
||||||
"message": "This page allows for changes in the navigator API. Enabling this protection does not change anything by default. Open the navigator settings to specify the changes you want to have there.",
|
"message": "Tato stránka umožňuje změny v navigator API. Povolení této ochrany ve výchozím nastavení nic nemění. Otevřete nastavení navigátora pro stanovení změn, které zde chcete provést.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectNavigator_urlSpecific": {
|
"protectNavigator_urlSpecific": {
|
||||||
@ -1220,7 +1224,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"openNavigatorSettings_title": {
|
"openNavigatorSettings_title": {
|
||||||
"message": "Navigator settings",
|
"message": "Nastavení navigator",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"openNavigatorSettings_description": {
|
"openNavigatorSettings_description": {
|
||||||
@ -1232,11 +1236,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"navigatorSettings_title": {
|
"navigatorSettings_title": {
|
||||||
"message": "CanvasBlocker navigator settings",
|
"message": "CanvasBlocker navigator nastavení",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"navigatorSettings_description": {
|
"navigatorSettings_description": {
|
||||||
"message": "On this page you can set the navigator settings. If using a preset you should always use an operating system and browser preset. After selecting these you can still make modifications.",
|
"message": "Na této stránce můžete zvolit nastavení navigator. Pokud používáte přednastavení, měli byste vždy použít předvolbu operačního systému a prohlížeče. Po jejich výběru stále můžete provést úpravy.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"navigatorSettings_disclaimer": {
|
"navigatorSettings_disclaimer": {
|
||||||
@ -1256,7 +1260,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"navigatorSettings_values": {
|
"navigatorSettings_values": {
|
||||||
"message": "Navigator values",
|
"message": "Navigator hodnoty",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"navigatorSettings_reset": {
|
"navigatorSettings_reset": {
|
||||||
@ -1328,15 +1332,15 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"theme_options.none": {
|
"theme_options.none": {
|
||||||
"message": "none",
|
"message": "nic",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockDataURLs_title": {
|
"blockDataURLs_title": {
|
||||||
"message": "Block data URL pages",
|
"message": "Blokovat stránky data URL",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockDataURLs_description": {
|
"blockDataURLs_description": {
|
||||||
"message": "Data URL pages cannot be protected against fingerprinting (see https://bugzilla.mozilla.org/show_bug.cgi?id=1475831). Blocking them prevents the real fingerprint to reach any server.",
|
"message": "Data URL stránky nelze chránit před otisky (viz https://bugzilla.mozilla.org/show_bug.cgi?id=1475831). Jejich blokování brání skutečnému otisku dosáhnout jakéhokoli serveru.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"blockDataURLs_urlSpecific": {
|
"blockDataURLs_urlSpecific": {
|
||||||
@ -1524,7 +1528,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.disableMainFlag": {
|
"sanitation_resolution.disableMainFlag": {
|
||||||
"message": "disable main flag",
|
"message": "zakázat hlavní vlajku",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.enableFeatures": {
|
"sanitation_resolution.enableFeatures": {
|
||||||
@ -1532,11 +1536,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.badBlockMode": {
|
"sanitation_error.badBlockMode": {
|
||||||
"message": "It is recommended to use the \"fake\" or \"ask\" blocking modes.",
|
"message": "Doporučuje se používat režimy blokování \"zkreslit\" nebo \"zeptat se\".",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToFake": {
|
"sanitation_resolution.switchToFake": {
|
||||||
"message": "switch to \"fake\"",
|
"message": "přepněte na \"zkreslit\"",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.blockModeVsProtection": {
|
"sanitation_error.blockModeVsProtection": {
|
||||||
@ -1544,7 +1548,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.disableFlag": {
|
"sanitation_resolution.disableFlag": {
|
||||||
"message": "disable \"{flag}\"",
|
"message": "zakázat \"{flag}\"",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeInputWithWhiteRng": {
|
"sanitation_error.fakeInputWithWhiteRng": {
|
||||||
@ -1552,11 +1556,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToProtectReadout": {
|
"sanitation_resolution.switchToProtectReadout": {
|
||||||
"message": "switch to protect readout",
|
"message": "přepněte na ochranu čtení",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "switch to \"non persistent\" rng",
|
"message": "přepněte na \"nonpersistent\" rng",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
@ -1564,7 +1568,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToProtectInput": {
|
"sanitation_resolution.switchToProtectInput": {
|
||||||
"message": "switch to protect input",
|
"message": "přepněte na ochranu vstupu",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.valueTooLow": {
|
"sanitation_error.valueTooLow": {
|
||||||
@ -1596,7 +1600,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"whitelist_inspection_title": {
|
"whitelist_inspection_title": {
|
||||||
"message": "CanvasBlocker whitelist inspection",
|
"message": "CanvasBlocker inspekce seznamu povolených",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"whitelist_inspection_description": {
|
"whitelist_inspection_description": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "In separatem Tab öffnen",
|
"message": "In separatem Tab öffnen",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (Standard)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "Allgemein",
|
"message": "Allgemein",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "nichts (komplett weiß): es wird immer ein weißes Bild zurückgegeben. Hierbei sollte die Option \"Alpha-Kanal auch vortäuschen\" aktiviert werden. ACHTUNG: Nicht im Modus \"Bei Ausgabe vortäuschen\" verwenden.\n\nnicht persistent: die Zufallszahlen werden bei jeder Vortäuschaktion neu bestimmt. Beachten Sie, dass für viele APIs ein Zwischenspeicher verwendet wird, um eine Detektion zu verhindern.\n\nkonstant: Variante von nicht persistent. Wenn die Daten eines Canvas verändert werden, haben gleichfarbige Pixel danach auch die gleiche Farbe.\n\npersistent: für jede Domain werden die Zufallszahlen nur einmal bestimmt.",
|
"message": "nichts (komplett weiß): es wird immer ein weißes Bild zurückgegeben. Hierbei sollte die Option \"Alpha-Kanal auch vortäuschen\" aktiviert werden. ACHTUNG: Nicht im Modus \"Bei Ausgabe vortäuschen\" verwenden.\n\nnichtpersistent: die Zufallszahlen werden bei jeder Vortäuschaktion neu bestimmt. Beachten Sie, dass für viele APIs ein Zwischenspeicher verwendet wird, um eine Detektion zu verhindern.\n\nkonstant: Variante von nichtpersistent. Wenn die Daten eines Canvas verändert werden, haben gleichfarbige Pixel danach auch die gleiche Farbe.\n\npersistent: für jede Domain werden die Zufallszahlen nur einmal bestimmt.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -516,7 +520,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.nonPersistent": {
|
"rng_options.nonPersistent": {
|
||||||
"message": "nicht persistent",
|
"message": "nichtpersistent",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.white": {
|
"rng_options.white": {
|
||||||
@ -1556,7 +1560,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "wechsle zu \"nicht persistent\"",
|
"message": "wechsle zu \"nichtpersistent\"",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
|
@ -109,6 +109,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "General",
|
"message": "General",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -495,7 +500,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"urlSettings_title": {
|
"urlSettings_title": {
|
||||||
"message": "Site specific values",
|
"message": "Site-specific values",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_description": {
|
"urlSettings_description": {
|
||||||
@ -527,7 +532,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -539,7 +544,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.nonPersistent": {
|
"rng_options.nonPersistent": {
|
||||||
"message": "non persistent",
|
"message": "nonpersistent",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.white": {
|
"rng_options.white": {
|
||||||
@ -1621,7 +1626,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "switch to \"non persistent\" rng",
|
"message": "switch to \"nonpersistent\" rng",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Abrir en una pestaña separada",
|
"message": "Abrir en una pestaña separada",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "General",
|
"message": "General",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Ouvrir dans un onglet séparé",
|
"message": "Ouvrir dans un onglet séparé",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "Général",
|
"message": "Général",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "अलग टैब में खोलें",
|
"message": "अलग टैब में खोलें",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "जनरल",
|
"message": "जनरल",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -476,7 +480,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_title": {
|
"urlSettings_title": {
|
||||||
"message": "Site specific values",
|
"message": "Site-specific values",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_description": {
|
"urlSettings_description": {
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -516,7 +520,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.nonPersistent": {
|
"rng_options.nonPersistent": {
|
||||||
"message": "non persistent",
|
"message": "nonpersistent",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.white": {
|
"rng_options.white": {
|
||||||
@ -1556,7 +1560,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "switch to \"non persistent\" rng",
|
"message": "switch to \"nonpersistent\" rng",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Apri in una nuova scheda",
|
"message": "Apri in una nuova scheda",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "Generale",
|
"message": "Generale",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
1670
_locales/ja/messages.json
Normal file
1670
_locales/ja/messages.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -103,6 +103,10 @@
|
|||||||
"message": "별도의 탭에서 열기",
|
"message": "별도의 탭에서 열기",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "일반 설정",
|
"message": "일반 설정",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -476,7 +480,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_title": {
|
"urlSettings_title": {
|
||||||
"message": "Site specific values",
|
"message": "Site-specific values",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_description": {
|
"urlSettings_description": {
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -516,7 +520,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.nonPersistent": {
|
"rng_options.nonPersistent": {
|
||||||
"message": "non persistent",
|
"message": "nonpersistent",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.white": {
|
"rng_options.white": {
|
||||||
@ -1556,7 +1560,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "switch to \"non persistent\" rng",
|
"message": "switch to \"nonpersistent\" rng",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Open in separate tab",
|
"message": "Open in separate tab",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "General",
|
"message": "General",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -476,7 +480,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_title": {
|
"urlSettings_title": {
|
||||||
"message": "Site specific values",
|
"message": "Site-specific values",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_description": {
|
"urlSettings_description": {
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -516,7 +520,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.nonPersistent": {
|
"rng_options.nonPersistent": {
|
||||||
"message": "non persistent",
|
"message": "nonpersistent",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.white": {
|
"rng_options.white": {
|
||||||
@ -1556,7 +1560,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "switch to \"non persistent\" rng",
|
"message": "switch to \"nonpersistent\" rng",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Åpne i egen fane",
|
"message": "Åpne i egen fane",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "Generelt",
|
"message": "Generelt",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -476,7 +480,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_title": {
|
"urlSettings_title": {
|
||||||
"message": "Site specific values",
|
"message": "Site-specific values",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"urlSettings_description": {
|
"urlSettings_description": {
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -516,7 +520,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.nonPersistent": {
|
"rng_options.nonPersistent": {
|
||||||
"message": "non persistent",
|
"message": "nonpersistent",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.white": {
|
"rng_options.white": {
|
||||||
@ -1556,7 +1560,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "switch to \"non persistent\" rng",
|
"message": "switch to \"nonpersistent\" rng",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Otwórz w nowej karcie",
|
"message": "Otwórz w nowej karcie",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "Ogólne",
|
"message": "Ogólne",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -1556,7 +1560,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "switch to \"non persistent\" rng",
|
"message": "switch to \"nonpersistent\" rng",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
|
@ -76,15 +76,15 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"optionsIntroduction": {
|
"optionsIntroduction": {
|
||||||
"message": "Nesta página você pode ajustar as configurações do CanvasBlocker.",
|
"message": "Nesta página pode ajustar as configurações do CanvasBlocker.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"installNotice": {
|
"installNotice": {
|
||||||
"message": "CanvasBlocker foi instalado. Se quiser aceder esta página futuramente, por favor, adicione-a aos marcadores.",
|
"message": "CanvasBlocker foi instalado. Se quiser aceder esta página no futuro, por favor, adicione-a aos marcadores.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"updateNotice": {
|
"updateNotice": {
|
||||||
"message": "CanvasBlocker foi atualizado. Se quiser ser aceder esta página futuramente e ainda não a adicionou aos marcadores, por favor adicione-a.",
|
"message": "CanvasBlocker foi atualizado. Se quiser aceder a esta página no futuro e ainda não a adicionou aos marcadores, por favor adicione-a.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"dontShowOptionsOnUpdate": {
|
"dontShowOptionsOnUpdate": {
|
||||||
@ -100,7 +100,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"openInTab": {
|
"openInTab": {
|
||||||
"message": "Abrir num noutro separador",
|
"message": "Abrir noutro separador",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (padrão)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
@ -312,11 +316,11 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForSVGInputPermission": {
|
"askForSVGInputPermission": {
|
||||||
"message": "Do you want to allow SVG API input?",
|
"message": "Quer permitir a entrada da API de SVG?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForSVGReadoutPermission": {
|
"askForSVGReadoutPermission": {
|
||||||
"message": "Do you want to allow SVG API readout?",
|
"message": "Quer permitir a leitura da API de SVG?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"askForTextMetricsPermission": {
|
"askForTextMetricsPermission": {
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "nenhum (completamente branco): uma imagem completamente branca é devolvida. A opção “Falsifique o canal alfa” deve ser ativada com isso. CUIDADO: Não use isso com o modo \"falsificar na entrada\".\n\nnão persistente: os números aleatórios serão determinados no momento para cada ação de falsificação. Lembre-se de que muitas proteções de API possuem caches para evitar detecção.\n\nconstante: variação de não persistente. Mas ao alterar os dados do ecrã, os pixels da mesma cor também compartilham a mesma cor posteriormente.\n\npersistente: o número aleatório será determinado apenas uma vez para cada domínio.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -640,7 +644,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLVendor_description": {
|
"webGLVendor_description": {
|
||||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"vendor\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
"message": "Valor a ser informado na função webGL \"getParameter\" para o \"fornecedor\". Valores especiais:\nDeixe em branco para usar o valor original\n\n{undefined}: devolve indefinido (#508)\n\n{false}: devolve o valor booleano falso (#508)\n\n{empty}: devolve uma string vazia (#508)\n\n{disabled}: devolve nulo (#508)\n\n{random vendor}: devolve um fornecedor aleatório da lista interna (#493)\n\n{random renderer}: devolve um renderizador aleatório da lista interna (#493)\n\n<xxx|yyy|zzz>: escolhe uma das opções fornecidas xxx, yyy ou zzz aleatoriamente (número arbitrário de opções) (#493)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLRenderer_title": {
|
"webGLRenderer_title": {
|
||||||
@ -648,7 +652,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLRenderer_description": {
|
"webGLRenderer_description": {
|
||||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"renderer\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
"message": "Valor a ser informado na função webGL \"getParameter\" para o \"renderer\". Valores especiais:\nDeixe em branco para usar o valor original\n\n{undefined}: devolve indefinido (#508)\n\n{false}: devolve o valor booleano falso (#508)\n\n{empty}: devolve uma string vazia (#508)\n\n{disabled}: devolve nulo (#508)\n\n{random vendor}: devolve um fornecedor aleatório da lista interna (#493)\n\n{random renderer}: devolve um renderizador aleatório da lista interna (#493)\n\n<xxx|yyy|zzz>: escolhe uma das opções fornecidas xxx, yyy ou zzz aleatoriamente (número arbitrário de opções) (#493)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLUnmaskedVendor_title": {
|
"webGLUnmaskedVendor_title": {
|
||||||
@ -656,7 +660,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLUnmaskedVendor_description": {
|
"webGLUnmaskedVendor_description": {
|
||||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"unmasked vendor\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
"message": "Valor a ser informado na função webGL \"getParameter\" para o \"fornecedor desmascarado\". Valores especiais:\nDeixe em branco para usar o valor original\n\n{undefined}: devolve indefinido (#508)\n\n{false}: devolve o valor booleano falso (#508)\n\n{empty}: devolve uma string vazia (#508)\n\n{disabled}: devolve nulo (#508)\n\n{random vendor}: devolve um fornecedor aleatório da lista interna (#493)\n\n{random renderer}: devolve um renderizador aleatório da lista interna (#493)\n\n<xxx|yyy|zzz>: escolhe uma das opções fornecidas xxx, yyy ou zzz aleatoriamente (número arbitrário de opções) (#493)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLUnmaskedRenderer_title": {
|
"webGLUnmaskedRenderer_title": {
|
||||||
@ -664,7 +668,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"webGLUnmaskedRenderer_description": {
|
"webGLUnmaskedRenderer_description": {
|
||||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"unmasked renderer\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
"message": "Valor a ser informado na função webGL \"getParameter\" para o \"renderizador desmascarado\". Valores especiais:\nDeixe em branco para usar o valor original\n\n{undefined}: devolve indefinido (#508)\n\n{false}: devolve o valor booleano falso (#508)\n\n{empty}: devolve uma string vazia (#508)\n\n{disabled}: devolve nulo (#508)\n\n{random vendor}: devolve um fornecedor aleatório da lista interna (#493)\n\n{random renderer}: devolve um renderizador aleatório da lista interna (#493)\n\n<xxx|yyy|zzz>: escolhe uma das opções fornecidas xxx, yyy ou zzz aleatoriamente (número arbitrário de opções) (#493)",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"useCanvasCache_title": {
|
"useCanvasCache_title": {
|
||||||
@ -736,7 +740,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedSVGReadout": {
|
"fakedSVGReadout": {
|
||||||
"message": "Faked SVG readout on {url}",
|
"message": "Leitura falsa de SVG em {url}",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"fakedTextMetricsReadout": {
|
"fakedTextMetricsReadout": {
|
||||||
@ -836,7 +840,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"selectWhitelistType": {
|
"selectWhitelistType": {
|
||||||
"message": "What is the type of the whitelisting?",
|
"message": "Qual é o tipo de lista branca?",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"whitelistOnlyAPI": {
|
"whitelistOnlyAPI": {
|
||||||
@ -1184,15 +1188,15 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectSVG_title": {
|
"protectSVG_title": {
|
||||||
"message": "Protect SVG API",
|
"message": "Proteger a API de SVG",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectSVG_description": {
|
"protectSVG_description": {
|
||||||
"message": "This protects against fingerprinting using SVGs.",
|
"message": "Isso protege contra o fingerprinting usando SVGs.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectSVG_urlSpecific": {
|
"protectSVG_urlSpecific": {
|
||||||
"message": "To exclude specific websites from this protection, click on the black arrow to open the menu, add the domain or URL by clicking on \"+\" and remove its checkmark.",
|
"message": "Para excluir sites específicos desta proteção, clique na seta preta para abrir o menu, adicione o domínio ou URL clicando em \"+\" e remova sua caixa de seleção.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"protectTextMetrics_title": {
|
"protectTextMetrics_title": {
|
||||||
@ -1600,7 +1604,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"whitelist_inspection_description": {
|
"whitelist_inspection_description": {
|
||||||
"message": "Shows which API protections are active for a given site. If you remove a checkmark for an API this API will be not protected for the selected site.",
|
"message": "Mostra que proteções de API estão ativas para um determinado site. Se remover uma marca de seleção para uma API, esta API não será protegida para o site selecionado.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"whitelist_all_apis": {
|
"whitelist_all_apis": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Abrir numa aba separada",
|
"message": "Abrir numa aba separada",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "Geral",
|
"message": "Geral",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "Открыть в отдельной вкладке",
|
"message": "Открыть в отдельной вкладке",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "Основные",
|
"message": "Основные",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "在新标签页中打开",
|
"message": "在新标签页中打开",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "一般",
|
"message": "一般",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
|
@ -103,6 +103,10 @@
|
|||||||
"message": "在新的隱身標籤頁中打開",
|
"message": "在新的隱身標籤頁中打開",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"labelForDefaultOption": {
|
||||||
|
"message": " (default)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"group_general": {
|
"group_general": {
|
||||||
"message": "一般設定",
|
"message": "一般設定",
|
||||||
"description": ""
|
"description": ""
|
||||||
@ -504,7 +508,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_description": {
|
"rng_description": {
|
||||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"rng_options.persistent": {
|
"rng_options.persistent": {
|
||||||
@ -1556,7 +1560,7 @@
|
|||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_resolution.switchToNonPersistentRng": {
|
"sanitation_resolution.switchToNonPersistentRng": {
|
||||||
"message": "switch to \"non persistent\" rng",
|
"message": "switch to \"nonpersistent\" rng",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"sanitation_error.fakeEverythingInCanvas": {
|
"sanitation_error.fakeEverythingInCanvas": {
|
||||||
|
101
lib/extension.js
101
lib/extension.js
@ -141,41 +141,110 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
const proxies = new Map();
|
const proxies = new Map();
|
||||||
const changedToStrings = new WeakMap();
|
const changedWindowsForProxies = new WeakMap();
|
||||||
scope.createProxyFunction = function createProxyFunction(window, original, replacement){
|
function setupWindowForProxies(window){
|
||||||
if (!changedToStrings.get(window)){
|
if (changedWindowsForProxies.get(window)){
|
||||||
const functionPrototype = scope.getWrapped(window).Function.prototype;
|
return;
|
||||||
|
}
|
||||||
|
const wrappedWindow = scope.getWrapped(window);
|
||||||
|
|
||||||
|
const functionPrototype = wrappedWindow.Function.prototype;
|
||||||
const originalToString = functionPrototype.toString;
|
const originalToString = functionPrototype.toString;
|
||||||
changedToStrings.set(window, originalToString);
|
changedWindowsForProxies.set(window, originalToString);
|
||||||
const alteredToString = scope.exportFunctionWithName(function toString(){
|
const alteredToString = scope.createProxyFunction(
|
||||||
return proxies.get(this) || originalToString.call(this);
|
window,
|
||||||
}, window, "toString");
|
originalToString,
|
||||||
proxies.set(alteredToString, originalToString.call(originalToString));
|
function toString(){
|
||||||
|
if (proxies.has(this)){
|
||||||
|
return proxies.get(this).string;
|
||||||
|
}
|
||||||
|
return originalToString.call(scope.getWrapped(this));
|
||||||
|
}
|
||||||
|
);
|
||||||
scope.changeProperty(window, "toString", {
|
scope.changeProperty(window, "toString", {
|
||||||
object: functionPrototype,
|
object: functionPrototype,
|
||||||
name: "toString",
|
name: "toString",
|
||||||
type: "value",
|
type: "value",
|
||||||
changed: alteredToString
|
changed: alteredToString
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const wrappedReflect = wrappedWindow.Reflect;
|
||||||
|
const originalReflectSetPrototypeOf = wrappedReflect.setPrototypeOf;
|
||||||
|
const alteredReflectSetPrototypeOf = scope.exportFunctionWithName(
|
||||||
|
function setPrototypeOf(target, prototype){
|
||||||
|
target = scope.getWrapped(target);
|
||||||
|
if (proxies.has(target)){
|
||||||
|
target = proxies.get(target).wrappedOriginal;
|
||||||
}
|
}
|
||||||
const handler = scope.getWrapped(window).Object.create(null);
|
if (proxies.has(prototype)){
|
||||||
handler.apply = scope.exportFunctionWithName(function(target, thisArgs, args){
|
prototype = proxies.get(prototype).wrappedOriginal;
|
||||||
|
}
|
||||||
|
if (prototype){
|
||||||
|
const grandPrototype = wrappedReflect.getPrototypeOf(prototype);
|
||||||
|
if (proxies.has(grandPrototype)){
|
||||||
|
const testPrototype = wrappedWindow.Object.create(proxies.get(grandPrototype).wrappedOriginal);
|
||||||
|
const value = originalReflectSetPrototypeOf.call(wrappedReflect, target, testPrototype);
|
||||||
|
if (!value){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const value = originalReflectSetPrototypeOf.call(wrappedReflect, target, scope.getWrapped(prototype));
|
||||||
|
return value;
|
||||||
|
}, window, "setPrototypeOf"
|
||||||
|
);
|
||||||
|
scope.changeProperty(window, "toString", {
|
||||||
|
object: wrappedWindow.Reflect,
|
||||||
|
name: "setPrototypeOf",
|
||||||
|
type: "value",
|
||||||
|
changed: alteredReflectSetPrototypeOf
|
||||||
|
});
|
||||||
|
}
|
||||||
|
scope.createProxyFunction = function createProxyFunction(window, original, replacement){
|
||||||
|
setupWindowForProxies(window);
|
||||||
|
const wrappedObject = scope.getWrapped(window).Object;
|
||||||
|
const handler = wrappedObject.create(null);
|
||||||
|
handler.apply = scope.exportFunctionWithName(function(target, thisArg, args){
|
||||||
|
args = scope.getWrapped(args);
|
||||||
try {
|
try {
|
||||||
return args.length?
|
return args.length?
|
||||||
replacement.call(thisArgs, ...args):
|
replacement.call(thisArg, ...args):
|
||||||
replacement.call(thisArgs);
|
replacement.call(thisArg);
|
||||||
}
|
}
|
||||||
catch (error){
|
catch (error){
|
||||||
try {
|
try {
|
||||||
return original.apply(thisArgs, args);
|
return original.apply(thisArg, args);
|
||||||
}
|
}
|
||||||
catch (error){
|
catch (error){
|
||||||
return target.apply(thisArgs, args);
|
return scope.getWrapped(target).apply(thisArg, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, window, "");
|
}, window, "");
|
||||||
|
handler.setPrototypeOf = scope.exportFunctionWithName(function(target, prototype){
|
||||||
|
target = scope.getWrapped(target);
|
||||||
|
if (proxies.has(target)){
|
||||||
|
target = proxies.get(target).wrappedOriginal;
|
||||||
|
}
|
||||||
|
if (proxies.has(prototype)){
|
||||||
|
prototype = proxies.get(prototype).wrappedOriginal;
|
||||||
|
}
|
||||||
|
if (prototype){
|
||||||
|
const grandPrototype = wrappedObject.getPrototypeOf(prototype);
|
||||||
|
if (proxies.has(grandPrototype)){
|
||||||
|
const testPrototype = wrappedObject.create(proxies.get(grandPrototype).wrappedOriginal);
|
||||||
|
wrappedObject.setPrototypeOf(target, testPrototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return wrappedObject.setPrototypeOf(target, scope.getWrapped(prototype));
|
||||||
|
}, window, "");
|
||||||
const proxy = new window.Proxy(original, handler);
|
const proxy = new window.Proxy(original, handler);
|
||||||
proxies.set(proxy, changedToStrings.get(window).call(original));
|
const proxyData = {
|
||||||
|
original: original,
|
||||||
|
wrappedOriginal: scope.getWrapped(original),
|
||||||
|
string: changedWindowsForProxies.get(window).call(original),
|
||||||
|
};
|
||||||
|
proxies.set(proxy, proxyData);
|
||||||
|
proxies.set(scope.getWrapped(proxy), proxyData);
|
||||||
return scope.getWrapped(proxy);
|
return scope.getWrapped(proxy);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -344,15 +344,11 @@
|
|||||||
let changed;
|
let changed;
|
||||||
if (type ==="value"){
|
if (type ==="value"){
|
||||||
if (changedFunction.fakeGenerator){
|
if (changedFunction.fakeGenerator){
|
||||||
|
const generated = changedFunction.fakeGenerator(checker, original, windowToProcess);
|
||||||
if ((changedFunction.exportOptions || {}).allowCallbacks){
|
if ((changedFunction.exportOptions || {}).allowCallbacks){
|
||||||
changed = extension.exportFunctionWithName(
|
changed = extension.exportFunctionWithName(generated, windowToProcess, original.name);
|
||||||
changedFunction.fakeGenerator(checker, original, windowToProcess),
|
|
||||||
windowToProcess,
|
|
||||||
original.name
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const generated = changedFunction.fakeGenerator(checker, original, windowToProcess);
|
|
||||||
changed = extension.createProxyFunction(windowToProcess, original, generated);
|
changed = extension.createProxyFunction(windowToProcess, original, generated);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -427,7 +427,7 @@
|
|||||||
return getIsPointValue({
|
return getIsPointValue({
|
||||||
func: (x, y) => original.call(this, x, y, args[2]),
|
func: (x, y) => original.call(this, x, y, args[2]),
|
||||||
x, y,
|
x, y,
|
||||||
index: x + this.width * y,
|
index: x + this.canvas.width * y,
|
||||||
originalValue, window, prefs
|
originalValue, window, prefs
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -462,7 +462,7 @@
|
|||||||
return getIsPointValue({
|
return getIsPointValue({
|
||||||
func,
|
func,
|
||||||
x, y,
|
x, y,
|
||||||
index: x + this.width * y,
|
index: x + this.canvas.width * y,
|
||||||
originalValue, window, prefs
|
originalValue, window, prefs
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -19,17 +19,26 @@
|
|||||||
texts.push({text: text.toLowerCase(), content});
|
texts.push({text: text.toLowerCase(), content});
|
||||||
};
|
};
|
||||||
scope.search = function(search){
|
scope.search = function(search){
|
||||||
const resultSets = search.toLowerCase().split(/\s+/).filter(function(term){
|
const resultSets = search.split(/\s+/).filter(function(term){
|
||||||
return term.trim();
|
return term.trim();
|
||||||
}).map(function(term){
|
|
||||||
return new RegExp(term);
|
|
||||||
}).map(function(term){
|
}).map(function(term){
|
||||||
const matching = new Set();
|
const matching = new Set();
|
||||||
|
if (term.match(/^:[a-z]+$/i)){
|
||||||
|
const tag = term.substring(1);
|
||||||
|
texts.forEach(function(text){
|
||||||
|
if (text.content.querySelector(`.${tag}`)){
|
||||||
|
matching.add(text.content);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
term = new RegExp(term.toLowerCase());
|
||||||
texts.forEach(function(text){
|
texts.forEach(function(text){
|
||||||
if (term.test(text.text)){
|
if (term.test(text.text)){
|
||||||
matching.add(text.content);
|
matching.add(text.content);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
return matching;
|
return matching;
|
||||||
});
|
});
|
||||||
if (resultSets.length){
|
if (resultSets.length){
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"name": "CanvasBlocker",
|
"name": "CanvasBlocker",
|
||||||
"description": "__MSG_addon_description__",
|
"description": "__MSG_addon_description__",
|
||||||
"version": "1.10",
|
"version": "1.11",
|
||||||
"icons": {
|
"icons": {
|
||||||
"48": "icons/icon.svg",
|
"48": "icons/icon.svg",
|
||||||
"96": "icons/icon.svg"
|
"96": "icons/icon.svg"
|
||||||
|
@ -51,10 +51,12 @@
|
|||||||
const option = document.createElement("option");
|
const option = document.createElement("option");
|
||||||
if (typeof value === typeof setting.defaultValue){
|
if (typeof value === typeof setting.defaultValue){
|
||||||
option.value = value;
|
option.value = value;
|
||||||
|
option.text = extension.getTranslation(setting.name + "_options." + value) || value;
|
||||||
if (setting.defaultValue === value){
|
if (setting.defaultValue === value){
|
||||||
option.selected = true;
|
option.selected = true;
|
||||||
|
option.selectedText = option.text;
|
||||||
|
option.notSelectedText = option.text + extension.getTranslation("labelForDefaultOption");
|
||||||
}
|
}
|
||||||
option.text = extension.getTranslation(setting.name + "_options." + value) || value;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
option.disabled = true;
|
option.disabled = true;
|
||||||
@ -62,10 +64,29 @@
|
|||||||
}
|
}
|
||||||
select.appendChild(option);
|
select.appendChild(option);
|
||||||
});
|
});
|
||||||
|
select.update = function(){
|
||||||
|
Array.from(select.options).forEach(function(option){
|
||||||
|
if (option.notSelectedText){
|
||||||
|
option.text = option.notSelectedText;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const selectedOption = select.options[select.selectedIndex];
|
||||||
|
if (selectedOption.selectedText){
|
||||||
|
selectedOption.text = selectedOption.selectedText;
|
||||||
|
}
|
||||||
|
};
|
||||||
return select;
|
return select;
|
||||||
}
|
}
|
||||||
|
|
||||||
const inputTypes = {
|
const inputTypes = {
|
||||||
|
all: {
|
||||||
|
updateCallback: function(input, value, defaultValue){
|
||||||
|
if (input.update){
|
||||||
|
input.update();
|
||||||
|
}
|
||||||
|
input.classList[value === defaultValue? "remove": "add"]("changed");
|
||||||
|
}
|
||||||
|
},
|
||||||
number: {
|
number: {
|
||||||
input: function(value){
|
input: function(value){
|
||||||
const input = document.createElement("input");
|
const input = document.createElement("input");
|
||||||
@ -73,8 +94,9 @@
|
|||||||
input.value = value;
|
input.value = value;
|
||||||
return input;
|
return input;
|
||||||
},
|
},
|
||||||
updateCallback: function(input, value){
|
updateCallback: function(input, value, defaultValue){
|
||||||
input.value = value;
|
input.value = value;
|
||||||
|
inputTypes.all.updateCallback(input, value, defaultValue);
|
||||||
return input.value;
|
return input.value;
|
||||||
},
|
},
|
||||||
getValue: function(input){
|
getValue: function(input){
|
||||||
@ -95,8 +117,9 @@
|
|||||||
input.value = value;
|
input.value = value;
|
||||||
return input;
|
return input;
|
||||||
},
|
},
|
||||||
updateCallback: function(input, value){
|
updateCallback: function(input, value, defaultValue){
|
||||||
input.value = value;
|
input.value = value;
|
||||||
|
inputTypes.all.updateCallback(input, value, defaultValue);
|
||||||
return input.value;
|
return input.value;
|
||||||
},
|
},
|
||||||
getValue: function(input){
|
getValue: function(input){
|
||||||
@ -111,8 +134,9 @@
|
|||||||
input.style.display = "inline-block";
|
input.style.display = "inline-block";
|
||||||
return input;
|
return input;
|
||||||
},
|
},
|
||||||
updateCallback: function(input, value){
|
updateCallback: function(input, value, defaultValue){
|
||||||
input.checked = value;
|
input.checked = value;
|
||||||
|
inputTypes.all.updateCallback(input, value, defaultValue);
|
||||||
return input.checked;
|
return input.checked;
|
||||||
},
|
},
|
||||||
getValue: function(input){
|
getValue: function(input){
|
||||||
@ -169,7 +193,7 @@
|
|||||||
container && container.hasOwnProperty(key)?
|
container && container.hasOwnProperty(key)?
|
||||||
container[key]:
|
container[key]:
|
||||||
setting.defaultKeyValue,
|
setting.defaultKeyValue,
|
||||||
url
|
setting.defaultKeyValue
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
keyInput.addEventListener("change", function(){
|
keyInput.addEventListener("change", function(){
|
||||||
@ -189,7 +213,7 @@
|
|||||||
container && container.hasOwnProperty(key)?
|
container && container.hasOwnProperty(key)?
|
||||||
container[key]:
|
container[key]:
|
||||||
setting.defaultKeyValue,
|
setting.defaultKeyValue,
|
||||||
url
|
setting.defaultKeyValue
|
||||||
);
|
);
|
||||||
logging.message("setting", setting.name, "(", key, ") was not changed");
|
logging.message("setting", setting.name, "(", key, ") was not changed");
|
||||||
}
|
}
|
||||||
@ -232,7 +256,7 @@
|
|||||||
urlCell.textContent = entry.url;
|
urlCell.textContent = entry.url;
|
||||||
row.appendChild(urlCell);
|
row.appendChild(urlCell);
|
||||||
let input = createInput(setting, entry.url);
|
let input = createInput(setting, entry.url);
|
||||||
type.updateCallback(input, setting.get(entry.url));
|
type.updateCallback(input, setting.get(entry.url), setting.defaultValue);
|
||||||
if (!entry.hasOwnProperty(setting.name)){
|
if (!entry.hasOwnProperty(setting.name)){
|
||||||
input.classList.add("notSpecifiedForUrl");
|
input.classList.add("notSpecifiedForUrl");
|
||||||
}
|
}
|
||||||
@ -319,14 +343,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (type){
|
if (type){
|
||||||
setting.on(function(){type.updateCallback(input, setting.get(url));}, url);
|
setting.on(function(){
|
||||||
|
type.updateCallback(input, setting.get(url), setting.defaultValue);
|
||||||
|
}, url);
|
||||||
input.addEventListener("change", function(){
|
input.addEventListener("change", function(){
|
||||||
const value = type.getValue(input);
|
const value = type.getValue(input);
|
||||||
if (setting.set(value, url)){
|
if (setting.set(value, url)){
|
||||||
|
type.updateCallback(input, value, setting.defaultValue);
|
||||||
logging.message("changed setting", setting.name, ":", value);
|
logging.message("changed setting", setting.name, ":", value);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
type.updateCallback(input, setting.get(url));
|
type.updateCallback(input, setting.get(url), setting.defaultValue);
|
||||||
logging.message("setting", setting.name, "was not changed");
|
logging.message("setting", setting.name, "was not changed");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
3241
package-lock.json
generated
3241
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -11,7 +11,7 @@
|
|||||||
"eslint-plugin-eslint-comments": "^3.2.0",
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
||||||
"eslint-plugin-html": "^8.0.0",
|
"eslint-plugin-html": "^8.0.0",
|
||||||
"eslint-plugin-promise": "^6.1.1",
|
"eslint-plugin-promise": "^6.1.1",
|
||||||
"web-ext": "^7.11.0",
|
"web-ext": "^8.2.0",
|
||||||
"yargs": "^17.7.2"
|
"yargs": "^17.7.2"
|
||||||
},
|
},
|
||||||
"scripts": {},
|
"scripts": {},
|
||||||
|
@ -1,3 +1,32 @@
|
|||||||
|
Version 1.11:
|
||||||
|
changes:
|
||||||
|
-
|
||||||
|
|
||||||
|
new features:
|
||||||
|
-
|
||||||
|
|
||||||
|
fixes:
|
||||||
|
-
|
||||||
|
|
||||||
|
known issues:
|
||||||
|
- if a data URL is blocked the page action button does not appear
|
||||||
|
- canvas and navigator APIs in workers are not protected
|
||||||
|
|
||||||
|
Version 1.10.1:
|
||||||
|
new features:
|
||||||
|
- added tag search
|
||||||
|
- added :changed tag
|
||||||
|
- mark default value in drop downs settings
|
||||||
|
|
||||||
|
fixes:
|
||||||
|
- lag and functionality loss on google sites
|
||||||
|
- fix function tampering detection via prototype
|
||||||
|
- isPointInPath and isPointInStroke return undefined with persistent rng
|
||||||
|
|
||||||
|
known issues:
|
||||||
|
- if a data URL is blocked the page action button does not appear
|
||||||
|
- canvas and navigator APIs in workers are not protected
|
||||||
|
|
||||||
Version 1.10:
|
Version 1.10:
|
||||||
changes:
|
changes:
|
||||||
- added eBay to the convenience preset
|
- added eBay to the convenience preset
|
||||||
|
@ -96,7 +96,10 @@ const iframeAPI = function(){
|
|||||||
return new Promise(function(resolve){
|
return new Promise(function(resolve){
|
||||||
window.setTimeout(function(){
|
window.setTimeout(function(){
|
||||||
console.log("window of iframe in timeout", iframeWindow);
|
console.log("window of iframe in timeout", iframeWindow);
|
||||||
resolve(iframeWindow);
|
resolve({
|
||||||
|
window: iframeWindow,
|
||||||
|
cleanup: function(){}
|
||||||
|
});
|
||||||
}, 1000);
|
}, 1000);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -66,15 +66,24 @@ iframeAPI.forEachMethod(async function(windowToUse, name){
|
|||||||
const navigator = windowToUse.navigator;
|
const navigator = windowToUse.navigator;
|
||||||
const values = {};
|
const values = {};
|
||||||
const keys = Object.keys(navigator.__proto__);
|
const keys = Object.keys(navigator.__proto__);
|
||||||
|
let hasPropertyError = false;
|
||||||
keys.forEach(function(property){
|
keys.forEach(function(property){
|
||||||
|
try {
|
||||||
const value = navigator[property];
|
const value = navigator[property];
|
||||||
if ((typeof value) === "string"){
|
if ((typeof value) === "string"){
|
||||||
values[property] = value;
|
values[property] = value;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch (error){
|
||||||
|
hasPropertyError = true;
|
||||||
|
console.warn(name, error);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
if (!hasPropertyError){
|
||||||
const storage = await navigator.storage.estimate();
|
const storage = await navigator.storage.estimate();
|
||||||
values.storage_quota = storage.quota.toString(10);
|
values.storage_quota = storage.quota.toString(10);
|
||||||
keys.push("storage_quota");
|
keys.push("storage_quota");
|
||||||
|
}
|
||||||
console.log(name, values);
|
console.log(name, values);
|
||||||
processNavigatorObject(values, keys, name);
|
processNavigatorObject(values, keys, name);
|
||||||
});
|
});
|
||||||
|
@ -102,5 +102,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<script src="testAPI.js"></script>
|
<script src="testAPI.js"></script>
|
||||||
<script src="canvasAPI.js"></script>
|
<script src="canvasAPI.js"></script>
|
||||||
|
<script src="iframeAPI.js"></script>
|
||||||
<script src="test.js"></script>
|
<script src="test.js"></script>
|
||||||
</body></html>
|
</body></html>
|
10
test/test.js
10
test/test.js
@ -158,3 +158,13 @@ async function offscreenTest(){
|
|||||||
|
|
||||||
return {url: await testAPI.readBlob(blob)};
|
return {url: await testAPI.readBlob(blob)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iframeAPI.forEachMethod(async function(windowToUse, name){
|
||||||
|
"use strict";
|
||||||
|
const {url, imageData, isPointInPath} = canvasAPI.fingerprint(windowToUse);
|
||||||
|
const hashes = await Promise.all([
|
||||||
|
testAPI.hash(url),
|
||||||
|
imageData? testAPI.hash(imageData.data): ""
|
||||||
|
]);
|
||||||
|
console.log(name, hashes[0], "/", hashes[1], isPointInPath);
|
||||||
|
});
|
@ -261,6 +261,82 @@
|
|||||||
{
|
{
|
||||||
"version": "1.10Alpha20230530",
|
"version": "1.10Alpha20230530",
|
||||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10Alpha20230530.xpi"
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10Alpha20230530.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10Alpha20230531",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10Alpha20230531.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10Alpha20240216",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10Alpha20240216.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240217",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240217.1",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.1.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240217.2",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.2.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240217.3",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.3.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240217.4",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.4.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240217.5",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.5.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240218",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240218.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240218.1",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240218.1.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240218.2",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240218.2.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240218.3",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240218.3.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240328",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240328.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240330",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240330.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.1.20240405",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.1.20240405.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240407",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240407.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240407.1",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240407.1.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.10.20240408",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240408.xpi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "1.11.20240417",
|
||||||
|
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.11.20240417.xpi"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user