Elleh Siqen
Elleh Siqen

Reputation: 43

Extension can't access to custom functions in window object

When a Chrome extension tries to get custom functions in window object via chrome.executeScript, it gets nothing.

For example:

Tab ID: 150

Tab js:

window.customfunc = function(){return 'yeap';}

Extension's background JS:

chrome.tabs.executeScript(150, { code: "console.log(window);" })

Manifest.json:

{
   "background": {
      "scripts": [ "background.js" ]
   },
   "content_scripts": [ {
      "exclude_globs": [  ],
      "exclude_matches": [  ],
      "include_globs": [ "*://*/*" ],
      "js": [ "script.js" ],
      "matches": [ "http://*/*" ],
      "run_at": "document_idle"
   } ],
   "content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",
   "description": "Test",
   "manifest_version": 2,
   "name": "Workspace",
   "permissions": [ "unlimitedStorage", "notifications", "clipboardWrite", "notifications", "clipboardRead", "management", "tabs", "history", "cookies", "idle", "storage", "webRequest", "webRequestBlocking", "contentSettings", "*://*/*" ],
   "version": "1.0"
}

Result:

In console, the window object doesn't show customfunc, so we can't use window.customfunc with chrome.executeScript.

Why does this happen, and how can we fix it? Thanks.

Upvotes: 4

Views: 3068

Answers (1)

Teepeemm
Teepeemm

Reputation: 4508

This is for security. Content scripts (which background.js is executing) are isolated from the tab's scripts (where customfunc is defined). You also get the added benefit of not having to worry about namespace clashing (which is where things are messing up for you).

One approach would be to create
myscript.js which says
console.log(window)
and then use a content script (or chrome.tabs.executeScript) to write
<script src='chrome.extension.getURL("myscript.js")'></script>
to the tab's DOM. You'll also need to add
"web_accessible_resources": ["myscript.js"]
to your manifest.

But with things this complicated, a good question would be why you're needing to access customfunc. (You can also take a look at https://stackoverflow.com/a/9517879/2336725 for a longer answer.)

Upvotes: 6

Related Questions