I am writing a chrome extension that injects a div into a website with a content script. The content script makes an AJAX request to a website that I cleared in the manifest.json file and it inserts the data into the div with innerHTML. Part of what the AJAX request returns is javascript that needs to be executed. The AJAX request from within the content script works fine.
When I make the same AJAX request from a regular website, the javascript that is returned executes just fine, but when I make the AJAX request from the content script it does not execute. No errors are displayed in the console. I don’t want to reload the website, if possible.
I assume that this is a security ‘feature’ and not a bug. How can I turn off or circumvent this behavior?
First off what Rob W said is very important, if you don’t already know it, a good explanation of the different environment a content script runs in is useful.
You might want to check this out. It’s not 100% what you’re looking for but the main part is there. Basically from your background page (if you don’t have one already create one), you use chrome.tabs.executeScript() to execute the script you’ve downloaded. That runs the javascript in the real page context instead of the “content script” context. All you need now is to get that script (in string form) to the background page, and determine the tabId to execute it on (from the sender tab)
You can use chrome.extension.sendMessage to send it to the background page, and in the background.js, use chrome.extension.onMessage to receive the message with your script. From there use the sender argument to get the tabId (sender.tab.id), and build your executeScript call.
One more helpful hint, page scripts (dynamic javascript executions) in chrome by default don’t show up in any set way in the chrome debugger, but you can append something like this to the string of your javascript:
"\n//@ sourceURL=/myFolder/myDynamicJavascript.js"This will make this script always show up with the “/myFolder/myDynamicJavascript.js” path for the chrome debugger, allowing you to set breakpoints in the js code you’ve inserted. It’s a lifesaver.