3

I have a site where I want to prevent the page from reloading using a document.location in a script tag. How can I do this in Firefox?

4 Answers 4

2

Actually, Greasemonkey will not block if the HTML code contains an inline javascript block with a redirect like so:

<script type="text/javascript">
var url = "http://google.com";
document.location.replace(url);
</script>

Greasemonkey, however can be used to block calls to specific functions -- just overwrite them :). If the above were wrapped into a function call like so:

<script type="text/javascript">
function redirect_to(url)
{
  document.location.replace(url);
}
</script>

Then you could just redefine the function in Greasemonkey:

function redirect_to(url){ return true }

Block inline redirects via Firefox

Essentially Firefox makes it possible to block any DOM manipulation like location.href.replace from a specific site via so-called: Configurable Security Policies (CAPS)

A word of warning: Note that your security settings will then block ALL calls from that domain for location.href.replace. If any application makes use of that call, there is no way to allow some of the calls and block others.

Setting up CAPS to block location.href.replace

You do not need Greasemonkey for this task. Firefox comes with a built-in capability for allowing/disallowing access to properties/methods of DOM Objects on a per-site basis. It is called Configurable Security Policies (CAPS) and it is described in 1.

A short guide assuming the simplest case:

  1. Close Firefox
  2. Locate your profile folder
  3. Locate the file user.js within this folder. If it does not exist, create it with a text editor (Notepad, vim, etc.)
  4. Add the following lines to user.js:

    user_pref("capability.policy.policynames", "noframebuster"); user_pref("capability.policy.noframebuster.sites", "http://www.annoying-site.com"); user_pref("capability.policy.noframebuster.Location.replace", "noAccess");

Of course, you will have to replace the domain with the one you want to prevent from redirecting your frames.

Find a more thorough explanation from my blog (justaddwater.dk): Firefox Tip For Framebuster JavaScript.

1
2

If you're comfortable using a debugging feature present in Firefox, the watch method works for me:

document.watch('location', function() {
    return '#';
});

I'm not sure about the applicability of the warnings about performance, etc. over at MDN, perhaps someone has some insight into these in this situation.

1

The GreaseMonkey add-on for Firefox is designed to do exactly that.

3
  • 1
    I don't know how to configure it to remove inline scripts.
    – zacharyliu
    Nov 3, 2009 at 23:01
  • Can you edit your question to show the actual script you want to block?
    – CarlF
    Nov 4, 2009 at 6:59
  • Actually, greasemonkey will not do that if the script block is inline. Se my additional answer May 6, 2010 at 10:48
0

Try the YesScript extention.

YesScript lets you make a blacklist of sites that aren't allowed to run JavaScript.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .