forked from yamadatomonori/Critical-CSS-Extractor
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.js
More file actions
70 lines (49 loc) · 1.72 KB
/
Copy pathbackground.js
File metadata and controls
70 lines (49 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
var messageHandlers = {};
chrome.runtime.onConnect.addListener(handleConnect);
function handleConnect(port) {
if (port.name == 'devtools-page') {
messageHandlers.injectContentScript = injectContentScript;
messageHandlers.executeContentScript = executeContentScript;
port.onMessage.addListener(devToolsListener);
}
}
function injectContentScript(message, sender, sendRequest) {
chrome.tabs.executeScript(message.tabId, {file: 'ga.js'});
chrome.tabs.executeScript(message.tabId, {file: 'content_script.js'});
}
function executeContentScript(message, sender, sendResponse) {
var tabId = message.tabId;
chrome.tabs.get(tabId, function(tab) {
chrome.tabs.create({
active: false,
url: tab.url
});
var resources = message.contents.reduce(function(prev, resource) {
prev[resource.url] = resource.cssText;
return prev;
}, {});
executeCode(
tabId, 'var ccss = new AKAM.CCSS(' + JSON.stringify(resources) + ');')
.then(executeCode.bind(undefined, tabId, 'ccss.extractCriticalRules();'));
});
}
function executeCode(tabId, code) {
var promise = new Promise(function(resolve, reject) {
chrome.tabs.executeScript(tabId, {code: code}, function(results) {
resolve(results[0]);
});
});
return promise;
}
function applyRule(tabId, cssText) {
cssText = cssText.replace(/\\/g, '\\\\');
cssText = cssText.replace(/'/g, '\\\'');
cssText = cssText.replace(/\n/g, '');
cssText = cssText.replace(/\r/g, '');
return executeCode(
tabId, 'ccss.applyRules(\'' + cssText + '\', \'external\')');
}
function devToolsListener(message, sender, sendResponse) {
tabId = message.tabId;
messageHandlers[message.handler](message, sender, sendResponse);
}