Getting started with Google Chrome Plugin

Google Chrome plugin or extension, is a set of JS,CSS and HTML files along with a manifest file to define the permissions it requires. It also requires you to have icon file in the same folder. Note: In order to publish into the Chrome market: 1. you require at least one promotional image (small tile). 2. You can't specify access to localhost in your manifest. Eg: My Bookmark Searcher extension. Manifest:
  "name": "My Bookmark Searcher",
  "version": "1.4",
  "manifest_version": 4,
  "description": "Searches the content of bookmarked websites using power of Google",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html",
    "default_title": "My Bookmark Searcher"
  "content_scripts": [
      "matches": ["http://*/*"],
      "js": ["jquery.js", "popup.js"]
  "content_security_policy": "script-src 'self'; object-src 'self'",
  "permissions": [
and the popup window when you click:
<!doctype html>
    <title>Getting Started Extension\'s Popup</title>
      body {
       /* overflow-x:hidden;*/

      img {
        border:2px solid black;
    <!-- JavaScript and HTML must be in separate files for security. -->
    <!-- <script type=\"text/javascript\" src=\"\"></script> -->

    <script src=\"jquery.js\"></script>
    <script src=\"popup.js\"></script>
    <div id=\"fb-root\"></div>
    <div id=\"urls\"></div>
    <div id=\"status\" style=\"font-family:arial;color:#999999;\">Loading....</div>
And the actual JS file: (which does everything)
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-32860962-1']);

window.onload = function() { 
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = '';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);

  chrome.bookmarks.getTree(function(bookmarks) {

var links = "";

function openTab(bookmarks_id){
  // chrome.tabs.create({url: "http://localhost:3000/researches/"+bookmarks_id});
  chrome.tabs.create({url: ""+bookmarks_id});

function send_request(){
  if (typeof jQuery  == 'undefined') {
     document.getElementById('status').innerHTML = "jquery not found....";

  // url: "http://localhost:3000/researches?callback=openTab",
  url: "",
  type: "POST",
  data: {"bookmarks" : links},
  dataType: "json",
  success: function(obj){openTab(obj);},
  error: function(jqXHR, textStatus, errorThrown){document.getElementById('status').innerHTML = textStatus+' '+errorThrown;}


function printBookmarksOne(bookmarks) {
  bookmarks.forEach(function(bookmark) {
        links += bookmark.url + "__";
    if (bookmark.children){

function isUrl(url_string){
  var re = /^(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/;
  return re.test(url_string);