4

I tried to get the domain name using alert(document.domain); But i'm not getting the right domain when I test it out in a site,

I get "hiecjmnbaldlmopbbkifcelmaaalcfib" this weird output.

I have added this in the manifest too

  "content_scripts": [
        {
        "js": ["inject.js"]

        }
  ],

alert(document.domain); is the only line of text inside inject.js.

And I've incorporated this <script type="text/javascript" src="inject.js"> </script> into the main html file after popup.js

Any thoughts on why I'm not getting the correct domain url?

Thanks!

hellomello
  • 8,219
  • 39
  • 151
  • 297

1 Answers1

7

If you are in popup or background or options page, there is an indirect approach for obtaining domain of page.

You can refer to following code as a reference.

Demonstration

manifest.json

Registered content scripts, background and popup scripts with manifest file along with relevant permissions

{
    "name": "Domain Name",
    "description": "http://stackoverflow.com/questions/14796722/javascript-google-chrome-extension-getting-domain-name",
    "version": "1",
    "manifest_version": 2,
    "content_scripts": [
        {
            "matches": [
                "<all_urls>"
            ],
            "js": [
                "myscript.js"
            ]
        }
    ],
    "browser_action": {
        "default_popup": "popup.html"
    },
    "background": {
        "scripts": [
            "background.js"
        ]
    },
    "permissions": [
        "tabs",
        "<all_urls>"
    ]
}

myscript.js

console.log(document.domain);// Outputs present active URL of tab

popup.html

Registered popup.js to surpass CSP.

<html>

    <head>
        <script src="popup.js"></script>
    </head>

    <body></body>

</html>

popup.js

Added Event Listener for DOM Content Loaded, and brought active URL of tab where user is on.

document.addEventListener("DOMContentLoaded", function () {
    console.log(document.domain);//It outputs id of extension to console
    chrome.tabs.query({ //This method output active URL 
        "active": true,
        "currentWindow": true,
        "status": "complete",
        "windowType": "normal"
    }, function (tabs) {
        for (tab in tabs) {
            console.log(tabs[tab].url);
        }
    });
});

background.js

console.log(document.domain); //It outputs id of extension to console
chrome.tabs.query({ //This method output active URL 
    "active": true,
    "currentWindow": true,
    "status": "complete",
    "windowType": "normal"
}, function (tabs) {
    for (tab in tabs) {
        console.log(tabs[tab].url);
    }
});

Output

You will find

fgbhocadghoeonlokakijhnlplgkolbg

as output for console.log(document.domain); in all extension pages and

and

http://somedomain.com/

for tabs.query() output.

However, Content script output is always

http://somedomain.com/

References

Sudarshan
  • 18,140
  • 7
  • 53
  • 61