In my content script I do
chrome.windows.create({url: "local.html", type: "popup"});
however, no window ever shows up.
Do I need to change my manifest file first? Why doesn't this function create a new window ever?
I have tabs enabled like so
{
"name": "Tool",
"version": "0.0.1",
"manifest_version": 2,
"description": "",
"homepage_url": "",
"icons": {
"16": "icons/on.png",
"48": "icons/on.png",
"128": "icons/on.png"
},
"default_locale": "en",
"background": {
"page": "src/bg/background.html",
"persistent": true
},
"browser_action": {
"default_icon": "icons/on.png",
"default_title": "browser action demo"
},
"permissions": [
"<all_urls>","tabs", "webNavigation"
],
"content_scripts": [
{
"run_at": "document_end",
"matches": [
"<all_urls>"
],
"js": [
"src/lib/jquery.min.js", "src/inject/inject.js"
],
"css": [
"src/inject/inject.css"
]
}
]
}
You are trying to call this from the content script.
Quoting the docs:
However, content scripts have some limitations. They cannot:
Use chrome.* APIs (except for parts of chrome.extension)
If you need to initiate some action that uses Chrome API from the content script, you have to message your background script to do this. See Architecture overview and Messaging.
Related
I am developing an extension for Brave/Chrome and when I click the puzzle icon in the top right corner next to the row of pinned extensions, my extension is separated from the rest at the top with the label "These extensions can see and change information on this site". I'm not sure why. Here is my manifest.json.
{
"manifest_version": 3,
"name": "Extension Name",
"version": "1.0.0",
"icons": {
"512": "src/logo.png"
},
"action": {
"default_title": "Extension Name",
"default_popup": "popup.html"
},
"permissions": ["storage"],
"background": {
"service_worker": "src/bg.js",
"type": "module"
},
"content_scripts": [
{
"js": ["src/content.js"],
"matches": ["<all_urls>"],
"run_at": "document_start",
"all_frames": true
}
],
"web_accessible_resources": [
{
"resources": ["src/popup2.html", "src/script2.js"],
"matches": ["<all_urls>"]
}
]
}
My only permission is for storage. How do I make my extension not be labeled as having access to "see and change information on this site"?
I have a chrome extenison but i can't figure out how to access the data in the devtools network tab and send to the popup. Any suggestion?
it's basically a bug reporting chrome extension where you can take screenshots, create issue, and I need the network log (and/or console)
manifest.json
{
"manifest_version": 2,
"name": "my-chrome-extension",
"description": "Chrome Extension for report bug",
"version": "1.0",
"background": {
"scripts": [
"js/background.js"
],
"persistent": false
},
"icons": {
"16": "./icon.png",
"36": "./icon.png",
"48": "./icon.png",
"120": "./icon.png"
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"js/vendor.js", "js/content_script.js"
]
}
],
"web_accessible_resources": [
"inject-script.js",
"js/inject-script.js"
],
"browser_action": {
"default_popup": "popup.html",
"default_title": "PerfWatch"
},
"permissions": [
"tabs",
"activeTab",
"storage"
]
}
You cant access it directly. Only via API like webRequest via bg script.
Example:
chrome.webRequest.onBeforeRequest.addListener((details) => {
//This identifies a redirect to another page
if (details.url.indexOf("Target") && details.method === "OPTIONS/..." && details.initiator.indexOf("Source")) {
chrome.tabs.sendMessage(details.tabId, {
message: "xyz"
});
}
})
Your manifest.json must include the webRequest permission in order to access the webRequests:
{
"manifest_version": 2,
"name": "my-chrome-extension",
"description": "Chrome Extension for report bug",
"version": "1.0",
"background": {
"scripts": [
"js/background.js"
],
"persistent": false
},
"icons": {
"16": "./icon.png",
"36": "./icon.png",
"48": "./icon.png",
"120": "./icon.png"
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"js/vendor.js", "js/content_script.js"
]
}
],
"web_accessible_resources": [
"inject-script.js",
"js/inject-script.js"
],
"browser_action": {
"default_popup": "popup.html",
"default_title": "PerfWatch"
},
"permissions": [
"tabs",
"activeTab",
"storage",
"webRequest"
]
}
Hint:
There are additional APIs like webNavigation and webRequestBlocking if you need more funtionallity.
I have this very simple manifest.json:
{
"manifest_version": 2,
"name": "Sample Name",
"version": "1.0.0",
"description": "This is a sample description",
"short_name": "Short Sample Name",
"permissions": ["tabs", "https://google.com/*", "activeTab", "declarativeContent", "storage"],
"content_scripts": [
{
"matches": ["https://www.google.com/*"],
"js": [
"background.js",
"test.js"
],
"css": ["test.css"]
}
],
"browser_action": {
"default_title": "This is a sample title",
"default_popup": "popup.html",
"default_icon": {
"16": "icons/icon16.png",
"32": "icons/icon32.png"
}
}
}
When I go to url https://www.google.com/ and open the content scripts tab in Chrome's dev's tools, I do not see my test.js and test.css scripts there. And, of course, they're not working in the page.
What should I do to add them and make them work?
P.S. Of course, I've created other files, such as window.html, popup.html, background.js, and test.js and test.css too.
The extension was installed successfully, for I see it in the list of my extensions...
I get this error in Firefox:
There was an error during the temporary add-on installation.
Error details ▼
File red_apples.zip does not contain a valid manifest
This is the extension I'm trying to port. Here's the manifest:
{
"manifest_version": 2,
"name": "Red Apples",
"permissions": [
"tabs", "activeTab"
],
"background": {
"persistent": false,
"scripts": [
"background.js"
]
},
"version": "0.0.0.2",
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"
},
"browser_action": {
"default_icon": "icon16.png",
"default_title": "Red Apples",
"default_popup": "popup.html"
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"script.js"
]
}
]
}
At the bottom of this tutorial it says there's a 99% chance it works without modification, if it passes the test here. But it passes the test and still doesn't work.
I get the manifest error both for the version packed with Chrome, and for the version just compressed as .zip.
So basically I need to do a couple of things
chrome.webrequests.onBeforeRequest.addlisteners
chrome.browser.addbadgetext
chrome.tabs.query
in a content script. The reason why I want this in content script is because I want the above to trigger without clicking the extension icon on the active page. How can I do that?
Below is my manifest.json
{
"manifest_version": 2,
"name": "My Ext",
"description": "My Ext desc",
"icons": {
"16":"logo-sm.png",
"48":"logo-sm.png",
"128":"logo-sm.png"
},
"version": "1.0",
"homepage_url": "abc.com",
"browser_action": {
"default_icon": "favicon.png",
"default_title": "My ext"
},
"background": {
"scripts": ["scripts/background.js"],
"persistent": true
},
"web_accessible_resources": ["oxy-logo-sm.png"],
"content_scripts": [{
"matches": ["<all_urls>"],
"all_frames": true,
"js":["scripts/content.js"],
"run_at": "document_start"
}],
"permissions": ["activeTab", "webRequest", "tabs", "<all_urls>"]
}