Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

chrome extension insert content script on browser action

I am trying to make basically an element highlighter chrome extension. Workflow: - click on browser icon - click on the page - hightlight the element clicked

I am having troubles in running content scripts upon browser action using manifest_version:2 When I inspect the popup that appears it says:

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self' chrome-extension-resource:" (popup.html:5).

Which is where the inline script in popup.html is and the script does not work

I have:

manifest.json:

{
   "browser_action": {
      "default_icon": "images/icon.gif",
      "default_popup": "popup.html"
   },
   "manifest_version": 2,
   "description": "MEH!",
   "name": "My First Extension",
   "permissions": [
      "tabs", "http://*/*", "https://*/*"
   ],
   "version": "0.1"
}

popup.html:

<html>
  <head>
  </head>
  <body>
    <script>
      chrome.tabs.executeScript(null,{
        code:"document.body.style.backgroundColor='red'"
      });
    </script>
    <div id='msg' style="width:300px">...</div>
  </body>
</html>

Any help would be very much appreciated

like image 406
Stefan Avatar asked Jul 18 '12 16:07

Stefan


People also ask

What is Content_scripts?

Content scripts are files that run in the context of web pages. By using the standard Document Object Model (DOM), they are able to read details of the web pages the browser visits, make changes to them, and pass information to their parent extension.

What is Web_accessible_resources?

Using web_accessible_resources This prevents websites from fingerprinting a browser by examining the extensions it has installed. Note: In Chrome in Manifest V2, an extension's ID is fixed.


2 Answers

Turns out I could not read the error properly until I saw it in here

Apparently manifest v2 does not allow you to have inline scripts, so you just need to

src="path_to_the_file.js"
like image 186
Stefan Avatar answered Oct 16 '22 20:10

Stefan


In extension to @tak3r's answer and @Doug's comment:

Inline scripts need to be changed to external scripts.

Move:

<script>
  chrome.tabs.executeScript(null,{
    code:"document.body.style.backgroundColor='red'"
  });
</script>

To a new file called main.js and remove the <script></script> tags

Include the following in the <head></head> of your HTML

<script type="text/javascript" src="main.js"></script>
like image 22
Peter Butcher Avatar answered Oct 16 '22 19:10

Peter Butcher