国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table of Contents
Create a manifest file
debug
Popup window function
Run scripts outside the extension
icon
Submit to Chrome Web App Store
Home Web Front-end CSS Tutorial How to Build a Chrome Extension

How to Build a Chrome Extension

Apr 06, 2025 am 09:51 AM

How to Build a Chrome Extension

I developed a Chrome extension this weekend because I found myself performing the same tasks repeatedly and wanting to automate them. In addition, I am a geek who stays at home to survive the epidemic, so I will devote my accumulated energy to creating things. I've developed some Chrome extensions over the years, and I hope this article will help you get started too. Let's get started!

Create a manifest file

The first step is to create a file named manifest.json and place it in the project folder. Its function is similar to package.json , which provides important information about the project for the Chrome web app store, including name, version, required permissions, and more. Here is an example:

 {
  "manifest_version": 2,
  "name": "Sample name",
  "version": "1.0.0",
  "description": "This is an example description",
  "short_name": "example name abbreviation",
  "permissions": ["activeTab", "declarativeContent", "storage", "<all_urls> "],
  "content_scripts": [
    {
      "matches": ["<all_urls> "],
      "css": ["background.css"],
      "js": ["background.js"]
    }
  ],
  "browser_action": {
    "default_title": "Execute an action when executing an action",
    "default_popup": "popup.html",
    "default_icon": {
      "16": "icons/icon16.png",
      "32": "icons/icon32.png"
    }
  }
}</all_urls></all_urls>

You may notice some details - first: the name and description can be filled in as you like.

Permissions depend on what the extension needs to perform. In this example, we use ["activeTab", "declarativeContent", "storage", "<all_urls> "]</all_urls> , because this particular extension requires information about the active tag, needs to change the page content, needs to access localStorage, and needs to be active on all websites. If it needs to be active on only one website, we can delete the last index of that array.

Chrome's extension documentation lists all permissions and their meanings.

 "content_scripts": [
  {
    "matches": ["<all_urls> "],
    "css": ["background.css"],
    "js": ["background.js"]
  }
],</all_urls>

content_scripts section sets the site where the extension should be active. If you want a separate website, such as Twitter, you can write it as ["https://twitter.com/*"] . CSS and JavaScript files are everything you need for an extension. For example, my efficient Twitter extension uses these files to overwrite the default appearance of Twitter.

 "browser_action": {
  "default_title": "Execute an action when executing an action",
  "default_popup": "popup.html",
  "default_icon": {
    "16": "icons/icon16.png",
    "32": "icons/icon32.png"
  }
}

Some contents in browser_action are also optional. For example, if an extension does not require a popup to implement its functionality, you can delete default_title and default_popup . In this case, only the extension's icon is needed. If the extension is only valid on certain websites, Chrome grays out the extension's icon when it is inactive.

debug

Once the manifest file, CSS, and JavaScript files are ready, visit chrome://extensions/ in the browser's address bar and enable developer mode. This will activate the Load Decompressed button to add the extension file. You can also switch whether the developer version of the extension is active.

I highly recommend starting a GitHub repository for version control at this point. This is a great way to save your work.

When updating the extension, it needs to be reloaded from this interface. A small refresh icon will be displayed on the screen. Also, if the extension experiences any errors during development, it will also display an error button with stack trace and more information here.

Fortunately, this is very simple if the extension needs to use a popup that pops up from the extension icon. After specifying the file name with browser_action in the manifest file, you can use any HTML and CSS you like to build the page, including the images (I tend to use inline SVG).

We may need to add some functionality to the popup. This may require some JavaScript, so make sure you specify the JavaScript file in the manifest file and also link it in your popup file as follows:

In this file, first create the function, we will access the popup DOM like this:

 document.addEventListener("DOMContentLoaded", () => {
  var button = document.getElementById("submit");

  button.addEventListener("click", (e) => {
    console.log(e);
  });
});

If we create a button in the popup.html file, assign it an ID called submit , and then return a console log, you may notice that in fact nothing is logged in the console. This is because we are in different contexts, which means we need to right-click on the popup and open a different set of DevTools.

Now we can access logs and debug! But remember that if anything is set in localStorage, it only exists in the extension's DevTools localStorage; not the user's browser localStorage. (I encountered this problem the first time I tried it!)

Run scripts outside the extension

This is all good, but what if we want to run a script that can access the current tab information? Here are a few ways to do this. I usually call a separate function inside the DOMContentLoaded event listener:

Example 1: Activate the file

 function exampleFunction() {
  chrome.tabs.executeScript(() => {
    chrome.tabs.executeScript({ file: "content.js" });
  });
}

Example 2: Execute only a small amount of code

This approach is great if you only need to run a small amount of code. However, since it requires passing everything as a string or template literal, it quickly becomes difficult to handle.

 function exampleFunction() {
  chrome.tabs.executeScript({
    code: `console.log('hi there');`
  });
}

Example 3: Activate the file and pass parameters

Remember that extensions and tabs run in different contexts. This makes passing parameters between them not easy. We will nest the first two examples here, passing some code into the second file. I store everything I need in one option, but in order for it to work we will have to stringify the object.

 function exampleFunction(options) {
  chrome.tabs.executeScript(
    { code: "var options = " JSON.stringify(options) },
    function() {
      chrome.tabs.executeScript({ file: "content.js" });
    }
  );
}

icon

Even though the manifest file only defines two icons, we need two more to formally submit the extension to the Chrome Web Store: a 128-pixel square icon, and an icon I call icon128_proper.png , which is also 128 pixels, but has some padding between the edges of the image and the icon.

Remember that no matter which icon is used, it needs to look good in the browser's light and dark modes. I usually find my icon on the Noun Project.

Submit to Chrome Web App Store

Now we can go to the Chrome Web Store Developer Console to submit the extension! Click the New Project button and drag and drop the compressed project file into the uploader.

Chrome will ask some questions about extensions here and ask for information about the permissions requested in the extension and why those permissions are needed. Warning: Requesting "activeTab" or "tabs" permissions will take longer to ensure that the code does not perform any abuse.

That's it! This should get you ready to start building Chrome browser extensions! ?

The above is the detailed content of How to Build a Chrome Extension. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What is 'render-blocking CSS'? What is 'render-blocking CSS'? Jun 24, 2025 am 12:42 AM

CSS blocks page rendering because browsers view inline and external CSS as key resources by default, especially with imported stylesheets, header large amounts of inline CSS, and unoptimized media query styles. 1. Extract critical CSS and embed it into HTML; 2. Delay loading non-critical CSS through JavaScript; 3. Use media attributes to optimize loading such as print styles; 4. Compress and merge CSS to reduce requests. It is recommended to use tools to extract key CSS, combine rel="preload" asynchronous loading, and use media delayed loading reasonably to avoid excessive splitting and complex script control.

External vs. Internal CSS: What's the Best Approach? External vs. Internal CSS: What's the Best Approach? Jun 20, 2025 am 12:45 AM

ThebestapproachforCSSdependsontheproject'sspecificneeds.Forlargerprojects,externalCSSisbetterduetomaintainabilityandreusability;forsmallerprojectsorsingle-pageapplications,internalCSSmightbemoresuitable.It'scrucialtobalanceprojectsize,performanceneed

Does my CSS must be on lower case? Does my CSS must be on lower case? Jun 19, 2025 am 12:29 AM

No,CSSdoesnothavetobeinlowercase.However,usinglowercaseisrecommendedfor:1)Consistencyandreadability,2)Avoidingerrorsinrelatedtechnologies,3)Potentialperformancebenefits,and4)Improvedcollaborationwithinteams.

CSS Case Sensitivity: Understanding What Matters CSS Case Sensitivity: Understanding What Matters Jun 20, 2025 am 12:09 AM

CSSismostlycase-insensitive,butURLsandfontfamilynamesarecase-sensitive.1)Propertiesandvalueslikecolor:red;arenotcase-sensitive.2)URLsmustmatchtheserver'scase,e.g.,/images/Logo.png.3)Fontfamilynameslike'OpenSans'mustbeexact.

What is Autoprefixer and how does it work? What is Autoprefixer and how does it work? Jul 02, 2025 am 01:15 AM

Autoprefixer is a tool that automatically adds vendor prefixes to CSS attributes based on the target browser scope. 1. It solves the problem of manually maintaining prefixes with errors; 2. Work through the PostCSS plug-in form, parse CSS, analyze attributes that need to be prefixed, and generate code according to configuration; 3. The usage steps include installing plug-ins, setting browserslist, and enabling them in the build process; 4. Notes include not manually adding prefixes, keeping configuration updates, prefixes not all attributes, and it is recommended to use them with the preprocessor.

What are CSS counters? What are CSS counters? Jun 19, 2025 am 12:34 AM

CSScounterscanautomaticallynumbersectionsandlists.1)Usecounter-resettoinitialize,counter-incrementtoincrease,andcounter()orcounters()todisplayvalues.2)CombinewithJavaScriptfordynamiccontenttoensureaccurateupdates.

CSS: When Does Case Matter (and When Doesn't)? CSS: When Does Case Matter (and When Doesn't)? Jun 19, 2025 am 12:27 AM

In CSS, selector and attribute names are case-sensitive, while values, named colors, URLs, and custom attributes are case-sensitive. 1. The selector and attribute names are case-insensitive, such as background-color and background-Color are the same. 2. The hexadecimal color in the value is case-sensitive, but the named color is case-sensitive, such as red and Red is invalid. 3. URLs are case sensitive and may cause file loading problems. 4. Custom properties (variables) are case sensitive, and you need to pay attention to the consistency of case when using them.

Case Sensitivity in CSS: Selectors, Properties, and Values Explained Case Sensitivity in CSS: Selectors, Properties, and Values Explained Jun 19, 2025 am 12:38 AM

CSSselectorsandpropertynamesarecase-insensitive,whilevaluescanbecase-sensitivedependingoncontext.1)Selectorslike'div'and'DIV'areequivalent.2)Propertiessuchas'background-color'and'BACKGROUND-COLOR'aretreatedthesame.3)Valueslikecolornamesarecase-insens

See all articles