Is it possible to rewrite url (with extra parameters) with a Chrome extension

后端 未结 2 685
长情又很酷
长情又很酷 2021-02-07 21:29

I am trying to append few extra parameters to the url that user typed (before the page gets loaded). Is it possible to do?

For example, if user types www.google.co

相关标签:
2条回答
  • 2021-02-07 22:19

    This is an old question still I am answering it for future readers.

    Modification of query parameters is a little tricky because you can endup in infinite loop and chrome/firefox may detect it and process whatever is the current state of request Url.

    I have faced this situation in my chrome extension Requestly where Users used Replace Rule and replaced www.google.com with www.google.com?q=query or did something similar.

    Problem with this approach is browser may intercept the request url after adding query parameter so the parameter will be added multiple times and corrupt the url. So you have to ensure either of the following :-

    1. Do not intercept request once it has been redirected.
    2. Check if parameter already exist, do not redirect it.

    As correctly pointed out by @apsillers in his answer, you have to use webRequest API to perform any modifications to URL. Please have a look at his answer and write your code accordingly.

    Just in case, you are looking for an already available solution, consider trying Requestly's Query Parameter Rule. Here is a screenshot on how it looks like :-

    For Firefox, you can download Requestly from its home page.

    0 讨论(0)
  • 2021-02-07 22:24

    The webRequest API might be what you need. This code goes in your background page:

    chrome.webRequest.onBeforeRequest.addListener(
        function(details) {
            if( details.url == "http://www.google.com/" )
                return {redirectUrl: "http://www.google.com/?q=defaultquery" };
        },
        {urls: ["http://www.google.com/*"]},
        ["blocking"]);
    

    This is an extremely specific rule that redirects visits to http://www.google.com/ with http://www.google.com/?q=defaultquery, but I think you can see how to expand it to include more functionality.

    Note that this will reroute all attempts to reach http://www.google.com/, including Ajax requests and iframes.

    Per the documentation, you will need to add the webRequest and webRequestBlocking permissions, along with host permissions for every host you plan to intercept:

    "permissions": [
        "webRequest",
        "webRequestBlocking",
        "*://*.google.com/",
        ...
    ],
    
    0 讨论(0)
提交回复
热议问题