I'm trying to selectively disable window.location
, using Greasemonkey, at the start of the document.
I don't want to fully disable javascript, just disable some redirects done with javascript. They look like this:
window.location = "unwanted url";
I'm trying to selectively disable window.location
, using Greasemonkey, at the start of the document.
I don't want to fully disable javascript, just disable some redirects done with javascript. They look like this:
window.location = "unwanted url";
Share
Improve this question
edited Aug 17, 2013 at 6:29
Brock Adams
93.5k23 gold badges240 silver badges304 bronze badges
asked Aug 16, 2013 at 23:20
affiszervmentionaffiszervmention
1931 gold badge1 silver badge5 bronze badges
3
- 1 Why do you want to do this? – user2437417 Commented Aug 16, 2013 at 23:24
- How are the redirects being done, exactly? There's at least 5 possible ways. – Brock Adams Commented Aug 17, 2013 at 1:17
- @brock, window.location=urltoredirect; (at)crazy I want to stop some redirections without disabling javascript... – affiszervmention Commented Aug 17, 2013 at 4:06
3 Answers
Reset to default 9I don't think it's possible.
- You can't overwrite properties or methods on
window.location
(fails silently) - you can't redefine its prototype with
location.__proto__ = Something.prototype
location.constructor.prototype
is basicallyObject.prototype
- the constructor doesn't really do anything (like create the attributes or methods)
__definesetter__
fails silentlyObject.defineProperty
gives an error like,TypeError: Cannot redefine property: href
delete window.location
anddelete window.location.href
don't do anything
I'm out of ideas...
You can't change the window.location
prototype, because this a "native property" of window
and it is not configurable.
On Firefox (Greasemonkey), if you try to override this then you will get errors like:
TypeError: can't redefine non-configurable property 'location'
and
Error: Permission denied to shadow native property
...depending on how you attempt it. Other browsers give similar errors.
To block this kind of relocation, you need to interfere with the page's javascript on a case-by-case basis.
See "Stop execution of Javascript function (client side) or tweak it" for a general approach that works in Firefox. Although it may be much easier, depending on your target page's exact code.
quite too late but you can do it simply without removing the whole script with Object.prototype.watch
:
window.watch('location', function( attr ,_ , target){
if(target.indexOf('unwanted url') !== -1)return '#';
});