SlideShare uma empresa Scribd logo
1 de 27
Cojocaru Victor-George
                    3B
browser extensions
are...
computer programs that gives
the browser new functionalities
Extension developing tools
     Web developer
  JavaScript Debugger
    DOM Inspector
      Komodo Edit
Some of the technologies used in
developing browser extensions
          CSS/CSS3
          HTML/HTML5
          JavaScript
          XML
          and so on…
Getting Started…
The general structure of an
Extension
  metadata information
  user interface extension
 functionality
Chrome Extensions
Each extension has its own folder, and therefore a Chrome
ext. folder looks like this :


                        My_Extension



   manifest.json                       js_file.js   other_files
                   popup.html                        (optional)
                                       (optional)
Note
  The manifest.json file gives information about the
extension, such as the most important files and the
capabilities that the extension might use.
Example :
{   "name": "My Extension",
    "version": "2.1",
    "description": "Gets information from Google.",
    "icons": { "128": "icon_128.png" },
    "background_page": "bg.html",
    "permissions": ["http://*.google.com/", "https://*.google.com/"],
    "browser_action": {
             "default_title": "",
             "default_icon": "icon_19.png",
             "default_popup": "popup.html"
             }
}
Zipp’ing the Chrome extension
We can either load our extension unpacked or using the
zipped form - the .crx file
                      js_file.js
                      (optional)
                                   popup.html

      manifest.json

                                                other_files
                                                (optional)



                      .CRX
Publishing the chrome extension




https://chrome.google.com/extensions/developer/dashboard
install.rdf




                                 Firefox Extensions
              The folder structure :
                                              My_Extension

                                                               /chrome
              install.rdf   chrome.manifest

                                                    /content    /locale    /skin

                                                    file.xul   language   file.css
                                                                 files
                                                                             image
                                                     file.js              files (opt)
The files
 install.rdf : provides information about the extension
 chrome.manifest - maps out the file/structure layout of the extension
  for Firefox
 /chrome
         /content : contains the extensions XUL and JavaScript Files
                   file.xul : the XML that creates the layout of the extension
                   file.js : the JavaScript that manages the action of each extension object

         /locale : contains language files
         /skin : contains images and CSS to control extension object layout
                   file.css - a CSS file controlling presentation, just like a website
                   file.png - image
The files
<?xml version="1.0"?>

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:em="http://www.mozilla.org/2004/em-rdf#">

 <Description about="urn:mozilla:install-manifest">
  <em:id>sample@example.net</em:id>
  <em:version>1.0</em:version>
  <em:type>2</em:type>

  <!-- Target Application this extension can install into,
     with minimum and maximum supported versions. -->
  <em:targetApplication>
                                                             install.rdf
   <Description>
    <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
    <em:minVersion>1.5</em:minVersion>
    <em:maxVersion>4.0.*</em:maxVersion>
   </Description>
  </em:targetApplication>

  <!-- Front End MetaData -->
  <em:name>sample</em:name>
  <em:description>A test extension</em:description>
  <em:creator>Your Name Here</em:creator>
  <em:homepageURL>http://www.example.com/</em:homepageURL>
 </Description>
</RDF>
The files
                          XUL ??
XML-based User-Interface Language that lets you build
feature-rich cross platform applications that can run
connected or disconnected from the Internet.
XUL file - example
<?xml version="1.0"?>
<overlay id="sample"
   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 <statusbar id="status-bar">
      <statusbarpanel id="my-panel" label="Hello, World" />
 </statusbar>
</overlay>
Zipp’ing the Firefox extension




            .XPI
Publishing the Firefox extension




https://addons.mozilla.org/en-US/firefox/extensions/
Google Chrome
    Demo
{
        "name": "Bookmark",
        "description": "Adds the current page to my bookmarking system.",
        "version": "1.0",
        "background_page": "background.html",
        "permissions": [
           "tabs",
           "http://*/*",
           "https://*/*"
        ],
        "browser_action": {
           "default_title": "Bookmark This Page",
           "default_icon": "icon.png",
           "popup": "popup.html"
        }

    }                                                       manifest.json
// This callback function is called when the content script has been
      // injected and returned its results
      function onPageInfo(o)
      {
         document.getElementById("title").value = o.title;
         document.getElementById("url").value = o.url;
         document.getElementById("summary").innerText = o.summary;
      }

     // POST the data to the server using XMLHttpRequest
     function addBookmark(f)
     {
        var req = new XMLHttpRequest();
        req.open("POST", "http://mywebappurl/do_add_bookmark/", true);

         var params = "title=" + document.getElementById("title").value +
                "&url=" + document.getElementById("url").value +
                "&summary=" + document.getElementById("summary").value +
                "&tags=" + document.getElementById("tags").value;

         req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
         req.setRequestHeader("Content-length", params.length);
         req.setRequestHeader("Connection", "close");

         req.send(params);

         req.onreadystatechange = function()
         {
            // If the request completed, close the extension popup
            if (req.readyState == 4)
               if (req.status == 200) window.close();
                                                                                      popup.html
         };

         return false;
     }

     // Call the getPageInfo function in the background page, passing in
     // our onPageInfo function as the callback
     window.onload = function()
     {
        var bg = chrome.extension.getBackgroundPage();
        bg.getPageInfo(onPageInfo);
     }
<script>
     // Array to hold callback functions
     var callbacks = [];
     // This function is called onload in the popup code
     function getPageInfo(callback)
     {
        // Add the callback to the queue
        callbacks.push(callback);
          // Injects the content script into the current page
          chrome.tabs.executeScript(null, { file: "content_script.js" });
     };
     // Perform the callback when a request is received from the content script
     chrome.extension.onRequest.addListener(function(request)
     {
        // Get the first callback in the callbacks array
        // and remove it from the array
        var callback = callbacks.shift();
          // Call the callback function
          callback(request);
     });
   </script>
                                                          background.html
// Object to hold information about the current page
   var pageInfo = {
      "title": document.title,
      "url": window.location.href,
      "summary": window.getSelection().toString()
   };
  // Send the information back to the extension
  chrome.extension.sendRequest(pageInfo);




                              content_script.js
After we have all there files in one folder, then we will
 load the extension as follows :

 Bring up the extensions management page by clicking the wrench icon and choosing
  Tools > Extensions.
 If Developer mode has a + by it, click the + to add developer information to the page.
  The + changes to a -, and more buttons and information appear.
 Click the Load unpacked extension button. A file dialog appears.
 In the file dialog, navigate to your extension's folder and click OK.



And there you have it !
Bibliography
http://en.wikipedia.org/wiki/Add-on_%28Mozilla%29#Extension_technologies.5B1.5D

http://code.google.com/chrome/extensions/overview.html

http://markashleybell.com/articles/building-a-simple-google-chrome-extension

http://code.google.com/chrome/extensions/getstarted.html

http://davidwalsh.name/firefox-extension-template

https://developer.mozilla.org/en/Chrome_Registration

http://kb.mozillazine.org/Getting_started_with_extension_development#hello.xul
End of File

Mais conteúdo relacionado

Mais procurados

Database Connection With Mysql
Database Connection With MysqlDatabase Connection With Mysql
Database Connection With Mysql
Harit Kothari
 
Php login system with admin features evolt
Php login system with admin features   evoltPhp login system with admin features   evolt
Php login system with admin features evolt
GIMT
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
Working with web_services
Working with web_servicesWorking with web_services
Working with web_services
Lorna Mitchell
 

Mais procurados (19)

File Uploading in PHP
File Uploading in PHPFile Uploading in PHP
File Uploading in PHP
 
PHP BASIC PRESENTATION
PHP BASIC PRESENTATIONPHP BASIC PRESENTATION
PHP BASIC PRESENTATION
 
New: Two Methods of Installing Drupal on Windows XP with XAMPP
New: Two Methods of Installing Drupal on Windows XP with XAMPPNew: Two Methods of Installing Drupal on Windows XP with XAMPP
New: Two Methods of Installing Drupal on Windows XP with XAMPP
 
Database Connection With Mysql
Database Connection With MysqlDatabase Connection With Mysql
Database Connection With Mysql
 
PHP Hypertext Preprocessor
PHP Hypertext PreprocessorPHP Hypertext Preprocessor
PHP Hypertext Preprocessor
 
Php login system with admin features evolt
Php login system with admin features   evoltPhp login system with admin features   evolt
Php login system with admin features evolt
 
Php File Upload
Php File UploadPhp File Upload
Php File Upload
 
Login and Registration form using oop in php
Login and Registration form using oop in phpLogin and Registration form using oop in php
Login and Registration form using oop in php
 
PHP And Web Services: Perfect Partners
PHP And Web Services: Perfect PartnersPHP And Web Services: Perfect Partners
PHP And Web Services: Perfect Partners
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Web Development Course: PHP lecture 4
Web Development Course: PHP  lecture 4Web Development Course: PHP  lecture 4
Web Development Course: PHP lecture 4
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa0602690047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
 
extending-php
extending-phpextending-php
extending-php
 
skintutorial
skintutorialskintutorial
skintutorial
 
Working with web_services
Working with web_servicesWorking with web_services
Working with web_services
 
4.4 PHP Session
4.4 PHP Session4.4 PHP Session
4.4 PHP Session
 
Linux System Administration - Web Server and squid setup
Linux System Administration - Web Server and squid setupLinux System Administration - Web Server and squid setup
Linux System Administration - Web Server and squid setup
 
Php intro
Php introPhp intro
Php intro
 
TO Hack an ASP .NET website?
TO Hack an ASP .NET website?  TO Hack an ASP .NET website?
TO Hack an ASP .NET website?
 

Destaque (7)

Planning: Poster
Planning: PosterPlanning: Poster
Planning: Poster
 
Research Magazine Front Covers
Research Magazine Front CoversResearch Magazine Front Covers
Research Magazine Front Covers
 
Research Synergy
Research SynergyResearch Synergy
Research Synergy
 
Ab Initio January 2012
Ab Initio January 2012Ab Initio January 2012
Ab Initio January 2012
 
Contents
ContentsContents
Contents
 
Planning Teaser Trailer
Planning Teaser TrailerPlanning Teaser Trailer
Planning Teaser Trailer
 
Translations Mucho Más Que Palabras
Translations Mucho Más Que PalabrasTranslations Mucho Más Que Palabras
Translations Mucho Más Que Palabras
 

Semelhante a Cliw - extension development

HTML5 APIs - Where No Man Has Gone Before! - Paris Web
HTML5 APIs -  Where No Man Has Gone Before! - Paris WebHTML5 APIs -  Where No Man Has Gone Before! - Paris Web
HTML5 APIs - Where No Man Has Gone Before! - Paris Web
Robert Nyman
 
Firefox Extension Development
Firefox Extension DevelopmentFirefox Extension Development
Firefox Extension Development
phamvanvung
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Atlassian
 
HTML5 APIs - Where No Man Has Gone Before! - GothamJS
HTML5 APIs - Where No Man Has Gone Before! - GothamJSHTML5 APIs - Where No Man Has Gone Before! - GothamJS
HTML5 APIs - Where No Man Has Gone Before! - GothamJS
Robert Nyman
 
Chrome Apps & Extensions
Chrome Apps & ExtensionsChrome Apps & Extensions
Chrome Apps & Extensions
Varun Raj
 

Semelhante a Cliw - extension development (20)

Firefox addons
Firefox addonsFirefox addons
Firefox addons
 
Orange is the new blue: How to port Chrome Extension to Firefox Extension
Orange is the new blue: How to port Chrome Extension to Firefox ExtensionOrange is the new blue: How to port Chrome Extension to Firefox Extension
Orange is the new blue: How to port Chrome Extension to Firefox Extension
 
Chrome Extensions for Hackers
Chrome Extensions for HackersChrome Extensions for Hackers
Chrome Extensions for Hackers
 
Browser Extensions for Web Hackers
Browser Extensions for Web HackersBrowser Extensions for Web Hackers
Browser Extensions for Web Hackers
 
File upload in oracle adf mobile
File upload in oracle adf mobileFile upload in oracle adf mobile
File upload in oracle adf mobile
 
Build your own Chrome Extension with AngularJS
Build your own Chrome Extension with AngularJSBuild your own Chrome Extension with AngularJS
Build your own Chrome Extension with AngularJS
 
Symfony2 revealed
Symfony2 revealedSymfony2 revealed
Symfony2 revealed
 
Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2
 
HTML5 APIs - Where No Man Has Gone Before! - Paris Web
HTML5 APIs -  Where No Man Has Gone Before! - Paris WebHTML5 APIs -  Where No Man Has Gone Before! - Paris Web
HTML5 APIs - Where No Man Has Gone Before! - Paris Web
 
Firefox Extension Development
Firefox Extension DevelopmentFirefox Extension Development
Firefox Extension Development
 
Tornadoweb
TornadowebTornadoweb
Tornadoweb
 
Creating chrome-extension
Creating chrome-extensionCreating chrome-extension
Creating chrome-extension
 
Chrome Extensions for Web Hackers
Chrome Extensions for Web HackersChrome Extensions for Web Hackers
Chrome Extensions for Web Hackers
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
 
HTML5 APIs - Where No Man Has Gone Before! - GothamJS
HTML5 APIs - Where No Man Has Gone Before! - GothamJSHTML5 APIs - Where No Man Has Gone Before! - GothamJS
HTML5 APIs - Where No Man Has Gone Before! - GothamJS
 
Chrome Apps & Extensions
Chrome Apps & ExtensionsChrome Apps & Extensions
Chrome Apps & Extensions
 
New Flash Builder 4 WSDL and HTTP Connectors
New Flash Builder 4 WSDL and HTTP ConnectorsNew Flash Builder 4 WSDL and HTTP Connectors
New Flash Builder 4 WSDL and HTTP Connectors
 
backend
backendbackend
backend
 
Drag and drop file upload with Dropzone in CodeIgniter
Drag and drop file upload with Dropzone in CodeIgniterDrag and drop file upload with Dropzone in CodeIgniter
Drag and drop file upload with Dropzone in CodeIgniter
 
hw4_specifications
hw4_specificationshw4_specifications
hw4_specifications
 

Último

The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
heathfieldcps1
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
QucHHunhnh
 

Último (20)

UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
psychiatric nursing HISTORY COLLECTION .docx
psychiatric  nursing HISTORY  COLLECTION  .docxpsychiatric  nursing HISTORY  COLLECTION  .docx
psychiatric nursing HISTORY COLLECTION .docx
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
Food safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdfFood safety_Challenges food safety laboratories_.pdf
Food safety_Challenges food safety laboratories_.pdf
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docx
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
Third Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptxThird Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptx
 

Cliw - extension development

  • 3. computer programs that gives the browser new functionalities
  • 4.
  • 5. Extension developing tools Web developer JavaScript Debugger DOM Inspector Komodo Edit
  • 6. Some of the technologies used in developing browser extensions  CSS/CSS3  HTML/HTML5  JavaScript  XML  and so on…
  • 8. The general structure of an Extension  metadata information  user interface extension  functionality
  • 9. Chrome Extensions Each extension has its own folder, and therefore a Chrome ext. folder looks like this : My_Extension manifest.json js_file.js other_files popup.html (optional) (optional)
  • 10. Note The manifest.json file gives information about the extension, such as the most important files and the capabilities that the extension might use. Example : { "name": "My Extension", "version": "2.1", "description": "Gets information from Google.", "icons": { "128": "icon_128.png" }, "background_page": "bg.html", "permissions": ["http://*.google.com/", "https://*.google.com/"], "browser_action": { "default_title": "", "default_icon": "icon_19.png", "default_popup": "popup.html" } }
  • 11. Zipp’ing the Chrome extension We can either load our extension unpacked or using the zipped form - the .crx file js_file.js (optional) popup.html manifest.json other_files (optional) .CRX
  • 12. Publishing the chrome extension https://chrome.google.com/extensions/developer/dashboard
  • 13. install.rdf Firefox Extensions The folder structure : My_Extension /chrome install.rdf chrome.manifest /content /locale /skin file.xul language file.css files image file.js files (opt)
  • 14. The files  install.rdf : provides information about the extension  chrome.manifest - maps out the file/structure layout of the extension for Firefox  /chrome  /content : contains the extensions XUL and JavaScript Files  file.xul : the XML that creates the layout of the extension  file.js : the JavaScript that manages the action of each extension object  /locale : contains language files  /skin : contains images and CSS to control extension object layout  file.css - a CSS file controlling presentation, just like a website  file.png - image
  • 15. The files <?xml version="1.0"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <em:id>sample@example.net</em:id> <em:version>1.0</em:version> <em:type>2</em:type> <!-- Target Application this extension can install into, with minimum and maximum supported versions. --> <em:targetApplication> install.rdf <Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <em:minVersion>1.5</em:minVersion> <em:maxVersion>4.0.*</em:maxVersion> </Description> </em:targetApplication> <!-- Front End MetaData --> <em:name>sample</em:name> <em:description>A test extension</em:description> <em:creator>Your Name Here</em:creator> <em:homepageURL>http://www.example.com/</em:homepageURL> </Description> </RDF>
  • 16. The files XUL ?? XML-based User-Interface Language that lets you build feature-rich cross platform applications that can run connected or disconnected from the Internet.
  • 17. XUL file - example <?xml version="1.0"?> <overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <statusbar id="status-bar"> <statusbarpanel id="my-panel" label="Hello, World" /> </statusbar> </overlay>
  • 18. Zipp’ing the Firefox extension .XPI
  • 19. Publishing the Firefox extension https://addons.mozilla.org/en-US/firefox/extensions/
  • 21. { "name": "Bookmark", "description": "Adds the current page to my bookmarking system.", "version": "1.0", "background_page": "background.html", "permissions": [ "tabs", "http://*/*", "https://*/*" ], "browser_action": { "default_title": "Bookmark This Page", "default_icon": "icon.png", "popup": "popup.html" } } manifest.json
  • 22. // This callback function is called when the content script has been // injected and returned its results function onPageInfo(o) { document.getElementById("title").value = o.title; document.getElementById("url").value = o.url; document.getElementById("summary").innerText = o.summary; } // POST the data to the server using XMLHttpRequest function addBookmark(f) { var req = new XMLHttpRequest(); req.open("POST", "http://mywebappurl/do_add_bookmark/", true); var params = "title=" + document.getElementById("title").value + "&url=" + document.getElementById("url").value + "&summary=" + document.getElementById("summary").value + "&tags=" + document.getElementById("tags").value; req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req.setRequestHeader("Content-length", params.length); req.setRequestHeader("Connection", "close"); req.send(params); req.onreadystatechange = function() { // If the request completed, close the extension popup if (req.readyState == 4) if (req.status == 200) window.close(); popup.html }; return false; } // Call the getPageInfo function in the background page, passing in // our onPageInfo function as the callback window.onload = function() { var bg = chrome.extension.getBackgroundPage(); bg.getPageInfo(onPageInfo); }
  • 23. <script> // Array to hold callback functions var callbacks = []; // This function is called onload in the popup code function getPageInfo(callback) { // Add the callback to the queue callbacks.push(callback); // Injects the content script into the current page chrome.tabs.executeScript(null, { file: "content_script.js" }); }; // Perform the callback when a request is received from the content script chrome.extension.onRequest.addListener(function(request) { // Get the first callback in the callbacks array // and remove it from the array var callback = callbacks.shift(); // Call the callback function callback(request); }); </script> background.html
  • 24. // Object to hold information about the current page var pageInfo = { "title": document.title, "url": window.location.href, "summary": window.getSelection().toString() }; // Send the information back to the extension chrome.extension.sendRequest(pageInfo); content_script.js
  • 25. After we have all there files in one folder, then we will load the extension as follows :  Bring up the extensions management page by clicking the wrench icon and choosing Tools > Extensions.  If Developer mode has a + by it, click the + to add developer information to the page. The + changes to a -, and more buttons and information appear.  Click the Load unpacked extension button. A file dialog appears.  In the file dialog, navigate to your extension's folder and click OK. And there you have it !