Would you be willing to share this script?
gl.getParameter = () => "test"
but that's easily detectable. If you run gl.getParameter.toString()
You get back "() => "test""
whereas the original function you get back "function getParameter() { [native code] }"
In general, don't try to fix fingerprinting via content scripts[2]. It's very much detectable. Your best bet is a browser that handles it natively.[1] https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_debug...
[2] https://palant.info/2020/12/10/how-anti-fingerprinting-exten...
-> gl.getParameter.toString.toString()
<- "() => 'function getParameter() { [native code] }'"
Not to mention the iframe trick mentioned in palant's article. gl.getParameter.toString() = () => 'function getParameter() { [native code] }'
gl.getParameter.toString()
"function getParameter() { [native code] }"
gl.getParameter.toString().toString()
"function getParameter() { [native code] }"
gl.getParameter.toString().toString().toString()
"function getParameter() { [native code] }"
iframes, worker, sharedworker, serviceWorker are all covered. Good luck timing the difference. gl.getParameter.toString().toString()
what the comment you're replying to is trying to tell you to run is: gl.getParameter.toString.toString()
Call toString on the toString fuction, not on its result. await navigator.storage.estimate()