so I am developing a google chrome extension for my chromebook. The idea is to make a "magnifying" type of effect wherever the mouse goes on the current webpage in order to zoom in on text/images or whatever the mouse hovers.
I have the code for this effect working on a webpage, it does exactly what I want.
Where I'm confused is how to integrate this to a chrome extension. I would want an extension like button to show up in the upper right corner of the chrome browser and then you can click it and then a "box or magnifying glass" would appear and then you could click and drag it around the page. The box would go away if you clicked the extension button again.
This is what I know after a bit of online searching...
- I need a manifest.json file, my current file looks like this...
{
"name": "magnify",
"version": "1.0",
"description": "This will magnify an area where the mouse hovers",
"browser_action": {
"popup": "popup.html",
"default_icon": "magnify.png"
},
"content_scripts": [{
"matches": ["http://*/*"],
"css": ["magnify.css"],
"js": ["magnify.js"],
"run_at": "document_end",
"all_frames": true
}],
"background_page": "background.html"
}
I've tried a few different things, but i'm sure I have a few things that I don't need.
Also you can go to http://www.supertecho.com/background.html in order to see what the current code is for my magnification idea.
I have a popup.html file but I'm not sure if the popup.html or the background.html code would be more necessary or not (or maybe both is needed).
Let me know if I am unclear about things and I will clarify!
Thanks a lot in advance :-)
The magnifying effect code should be a content script, running in the DOM of the browsed pages (effectively injected into each page). See http://code.google.com/chrome/extensions/content_scripts.html
Related
I'm trying to make a chrome theme that has both stylistic features (in the manifest "theme" element) and a content script (in "content-scripts" element). I've encountered a strange error where the content script only runs when there is no "theme" element.
My content-script.js is just-
console.log("content-script.js");
When I format my manifest.json file like this with no "theme" element it works-
{
"manifest_version": 2,
"name": "Test",
"version": "1.0",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content-script.js"]
}
]
}
But when I add even an empty theme element my content script does not run-
{
"manifest_version": 2,
"name": "Test",
"version": "1.0",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content-script.js"]
}
],
"theme": {}
}
Anyone know why this happens, and how I can fix it?
You cannot. In Chrome, themes and extensions are two different things.
A theme is a special kind of extension that changes the way the browser looks. Themes are packaged like regular extensions, but they don't contain JavaScript or HTML code.
That's why when you include the "theme" field in your manifest.json, your extension can't run any content scripts.
I'd recommend you check the Regular Extension Documentation and also the Theme Documentation to see differences between each of them.
For Firefox, though, there is a theme API available.
I've created a simple extension but the icon is not being displayed in the browser's toolbar and in fact I see many other extensions installed but not their icon in the toolbar. What element in the manifest file defines that an icon should display an icon in the toolbar?
Here is the used manifest file and this manifest does not add any icon to the toolbar
{
// Extension ID: my_id
"key": ".....my key.......",
"name": "....any name....",
"version": "1.0",
"manifest_version": 2,
"description": "description",
"app": {
"launch": {
"local_path": "main.html"
}
},
"icons": {
"128": "icon-128.png"
},
"permissions": [
"...."
]
}
I ran into this exact same problem and found this question on the top search results. The answer I needed is in the comment by wOxxOm on this question so in case it helps, I'm promoting it to an answer:
The icon is available by default but it may not be visible due to the toolbar width made available to icons. You can edit this by clicking on the "puzzle piece" in the extension toolbar and then picking on the "pushpin" next to the extension you want to be made visible.
Hope this helps other people who are confused by this.
Sometimes, although adding icons in manifest.json, you cannot view icon on the toolbar. Because you need a browser action.
You can try adding in this manifest.json;
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
}
Also, you should generated .html file and .png image
In Brief,
Chrome extension include third parts.
Background script
Content script
Browser action(popup)
If you want see icon on toolbar, you should set a browser action in manifest.json
I have a browserAction extension testing on chrome 31.0.1650.57. I want to get active tab url when the user click on the extension icon, save it and use it later.
I am able to do that when using tabs permission. But this permission has a lot of power (that I don't need) and users are complaining about this.
I followed the article to switch to activeTab permission http://developer.chrome.com/extensions/activeTab but it only works when there is no popup. As you can see in the make_page_red example.
chrome.browserAction.onClicked.addListener(function(tab) {
// No tabs or host permissions needed!
console.log("★ tab.url", tab.url);
});
You can check by changing the make_page_red example manifest file to add a default popup like this:
{
"name": "Page Redder",
"description": "Make the current page red",
"version": "2.0",
"permissions": [
"activeTab"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"browser_action": {
"default_title": "Make this page red",
"default_popup": "popup.html" ←-------------------
},
"manifest_version": 2
}
Now because I have a default popup the browserAction.onClicked listener is not called anymore.
How can I get current tab url and still have my popup opening?
Thanks
browserAction.onClicked is not called anymore (as you noted), so just skip that:
popup.js:
chrome.tabs.query({active:true,currentWindow:true},function(tabArray){
console.log(tabArray[0].url);
});
And of course, have popup.html load popup.js with a script tag. (And I'm not sure what you're background script is doing.)
Edit:
In addition to the above, my extension has two other files. manifest.json is copied from yours, but has the background section deleted. The only other file is popup.html (from memory, so bear with me):
<html><body><script type="text/javascript" src="popup.js"></script></body></html>
To view the console, I click the browser action, which brings up a 50 pixel square window. Right click on that, "inspect element", and click console to view the url.
I'm trying to work on a Chrome browser extension which does fun things on a contextmenu. The problem is, I can't get the JS files to load within the manifest.json content_scripts.
I don't receive an error, the files simply do not load.
The scripts are good, if I put them in my background page, they fire fine through that background page. The downside of that is it's restricted to only the background page.
{
"name": "Mini",
"description": "Mini",
"permissions": ["contextMenus","management","contentSettings","tabs","http://*/*","https://*/*","editable"],
"version": "0.1",
"manifest_version": 1,
"background_page": "mini.html",
"icons" : {"16" : "mini.png"},
"contexts" : ["link","tab","page"],
"content_scripts": [{"matches":["<all_urls>"],"js":["jquery172min.js","mini.js"]}]
}
I've tried all forms of matches, including "http://\*/\*", "https://\*/\*", "\*://\*/\*"
I've tried whitespaces, no whitespaces. I'm drawing a blank here.
Any help would be appreciated.
$(document).ready(function () {
alert("page is ready");
},true);
My apologies for that. This is a copy of the javascript/Jquery I'm using to test whether the extension has loaded or not. It's just a simple alert.
Content scripts cannot use the chrome.contextMenus API (in fact, these can only use some of the chrome.extension methods).
It's possible to apply match patterns to individual menu items, via chrome.contextMenus.create({title: 'Test', documentUrlPatterns: 'http://*/*'});.
Created menu items can also be modified (chrome.contextMenus.update) and removed (chrome.contextMenus.remove).
To communicate between a Content script and the background page, see Message passing.
I am currently writing a chrome extension so that I have a button on the bar and when clicked I wanted it to grab the URL of the currently selected tab and open a new tab as follows:
FixedURL/grabbedURL ex: lets say the currently opened page is "http://www.abc.com" and the fixed url I assign is "http://www.123.com" so the new URL I want to be opened will be http://www.123.com/http://www.abc.com
This way only the second part of URL opened in a new tab will change depending on the selected tab.
I already created a manifest.json and the icons, title, etc...
I then tried to use both background.html and popup.html but to no avail.
I also am kinda lost on the whole .js file thing and how to link all of them together.
The maximum I could achieve is having chrome open:
chrome://settings/extensions/obidbojnjbigokbpalmaacmgmecopond/title.url
when I clicked the button.
Here is my manifest.json
{
"name": "Circumvent",
"version": "1.0",
"description": "Opens new tab",
"browser_action": {
"default_icon": "111.png",
"default_title": "Circumvent!",
"popup": "main.html"
},
"icons": {
"48": "111.png"
},
"permissions": [
"tabs","notifications","http://*/*"
]
}
Any idea of what a sample code will look like and/or a brief clarification would be really awesome and very helpful!
Thanks in advance....
P.S. my first extension
You should add a background page and have it listen for clicks on your extension's browser action button:
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.create({"url" : "http://www.123.com/" + tab.url})
});
(This code goes in your background page.)
You'll need to remove the popup line in your manifest, since the onClicked handler won't fire if there's a popup (and besides, you don't want a popup, you just need a button).