Bläddra i källkod

Now we can detect right tab

Brendan Abolivier 8 år sedan
förälder
incheckning
011d2436d0
3 ändrade filer med 72 tillägg och 77 borttagningar
  1. 52
    0
      eventPage.js
  2. 17
    12
      manifest.json
  3. 3
    65
      popup.js

+ 52
- 0
eventPage.js Visa fil

@@ -0,0 +1,52 @@
1
+function getCurrentTabUrl(callback) {
2
+  // Query filter to be passed to chrome.tabs.query - see
3
+  // https://developer.chrome.com/extensions/tabs#method-query
4
+  var queryInfo = {
5
+    active: true,
6
+    currentWindow: true
7
+  };
8
+
9
+  chrome.tabs.query(queryInfo, function(tabs) {
10
+    // chrome.tabs.query invokes the callback with a list of tabs that match the
11
+    // query. When the popup is opened, there is certainly a window and at least
12
+    // one tab, so we can safely assume that |tabs| is a non-empty array.
13
+    // A window can only have one active tab at a time, so the array consists of
14
+    // exactly one tab.
15
+    var tab = tabs[0];
16
+
17
+    // A tab is a plain object that provides information about the tab.
18
+    // See https://developer.chrome.com/extensions/tabs#type-Tab
19
+    var url = tab.url;
20
+
21
+    // tab.url is only available if the "activeTab" permission is declared.
22
+    // If you want to see the URL of other tabs (e.g. after removing active:true
23
+    // from |queryInfo|), then the "tabs" permission is required to see their
24
+    // "url" properties.
25
+    console.assert(typeof url == 'string', 'tab.url should be a string');
26
+
27
+    callback(url);
28
+  });
29
+
30
+  // Most methods of the Chrome extension APIs are asynchronous. This means that
31
+  // you CANNOT do something like this:
32
+  //
33
+  // var url;
34
+  // chrome.tabs.query(queryInfo, function(tabs) {
35
+  //   url = tabs[0].url;
36
+  // });
37
+  // alert(url); // Shows "undefined", because chrome.tabs.query is async.
38
+}
39
+
40
+function updateTab() {
41
+    getCurrentTabUrl(function(url) {
42
+        if(url.match(/:\/\/(.+)\//)[1] == "www.ijavn.org") {
43
+            chrome.browserAction.setIcon({path: 'icon-red.png'})
44
+        }
45
+        else {
46
+            chrome.browserAction.setIcon({path: 'icon.png'})
47
+        }
48
+    })
49
+}
50
+
51
+chrome.tabs.onActivated.addListener(updateTab)
52
+chrome.tabs.onUpdated.addListener(updateTab)

+ 17
- 12
manifest.json Visa fil

@@ -1,16 +1,21 @@
1 1
 {
2
-  "manifest_version": 2,
2
+    "manifest_version": 2,
3 3
 
4
-  "name": "Collateral Freedom",
5
-  "description": "kthxbye",
6
-  "version": "1.0",
4
+    "name": "Collateral Freedom",
5
+    "description": "kthxbye",
6
+    "version": "1.0",
7 7
 
8
-  "browser_action": {
9
-    "default_icon": "icon.png",
10
-    "default_popup": "popup.html"
11
-  },
12
-  "permissions": [
13
-    "activeTab",
14
-    "https://ajax.googleapis.com/"
15
-  ]
8
+    "browser_action": {
9
+        "default_icon": "icon.png",
10
+        "default_popup": "popup.html"
11
+    },
12
+    "permissions": [
13
+        "tabs",
14
+        "https://ajax.googleapis.com/"
15
+    ],
16
+
17
+    "background": {
18
+        "scripts": ["eventPage.js"],
19
+        "persistent": false
20
+    }
16 21
 }

+ 3
- 65
popup.js Visa fil

@@ -47,72 +47,10 @@ function getCurrentTabUrl(callback) {
47 47
   // alert(url); // Shows "undefined", because chrome.tabs.query is async.
48 48
 }
49 49
 
50
-/**
51
- * @param {string} searchTerm - Search term for Google Image search.
52
- * @param {function(string,number,number)} callback - Called when an image has
53
- *   been found. The callback gets the URL, width and height of the image.
54
- * @param {function(string)} errorCallback - Called when the image is not found.
55
- *   The callback gets a string that describes the failure reason.
56
- */
57
-function getImageUrl(searchTerm, callback, errorCallback) {
58
-  // Google image search - 100 searches per day.
59
-  // https://developers.google.com/image-search/
60
-  var searchUrl = 'https://ajax.googleapis.com/ajax/services/search/images' +
61
-    '?v=1.0&q=' + encodeURIComponent(searchTerm);
62
-  var x = new XMLHttpRequest();
63
-  x.open('GET', searchUrl);
64
-  // The Google image search API responds with JSON, so let Chrome parse it.
65
-  x.responseType = 'json';
66
-  x.onload = function() {
67
-    // Parse and process the response from Google Image Search.
68
-    var response = x.response;
69
-    if (!response || !response.responseData || !response.responseData.results ||
70
-        response.responseData.results.length === 0) {
71
-      errorCallback('No response from Google Image search!');
72
-      return;
73
-    }
74
-    var firstResult = response.responseData.results[0];
75
-    // Take the thumbnail instead of the full image to get an approximately
76
-    // consistent image size.
77
-    var imageUrl = firstResult.tbUrl;
78
-    var width = parseInt(firstResult.tbWidth);
79
-    var height = parseInt(firstResult.tbHeight);
80
-    console.assert(
81
-        typeof imageUrl == 'string' && !isNaN(width) && !isNaN(height),
82
-        'Unexpected respose from the Google Image Search API!');
83
-    callback(imageUrl, width, height);
84
-  };
85
-  x.onerror = function() {
86
-    errorCallback('Network error.');
87
-  };
88
-  x.send();
89
-}
90
-
91 50
 function renderStatus(statusText) {
92 51
   document.getElementById('status').textContent = statusText;
93 52
 }
94 53
 
95
-document.addEventListener('DOMContentLoaded', function() {
96
-  getCurrentTabUrl(function(url) {
97
-    // Put the image URL in Google search.
98
-    renderStatus('Performing Google Image search for ' + url);
99
-
100
-    getImageUrl(url, function(imageUrl, width, height) {
101
-
102
-      renderStatus('Search term: ' + url + '\n' +
103
-          'Google image search result: ' + imageUrl);
104
-      var imageResult = document.getElementById('image-result');
105
-      // Explicitly set the width/height to minimize the number of reflows. For
106
-      // a single image, this does not matter, but if you're going to embed
107
-      // multiple external images in your page, then the absence of width/height
108
-      // attributes causes the popup to resize multiple times.
109
-      imageResult.width = width;
110
-      imageResult.height = height;
111
-      imageResult.src = imageUrl;
112
-      imageResult.hidden = false;
113
-
114
-    }, function(errorMessage) {
115
-      renderStatus('Cannot display image. ' + errorMessage);
116
-    });
117
-  });
118
-});
54
+getCurrentTabUrl(function(url) {
55
+    renderStatus(url.match(/:\/\/(.+)\//)[1])
56
+})