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
71
72
73
74
75
76
|
'use strict';
var { Services } = require("services");
var prefService = require("preferences-service");
var tabs = require("tabs");
var clipboard = require("clipboard");
var {GM_xmlhttpRequester} = require("GM_xmlhttpRequester");
const NS_XHTML = "http://www.w3.org/1999/xhtml";
function GM_API(aScript, aURL, aWinID, aSafeWin, aUnsafeContentWin, aChromeWin) {
var document = aSafeWin.document;
var windowID = aWinID;
var xhr = new GM_xmlhttpRequester(aUnsafeContentWin, aURL, aScript);
this.GM_addStyle = function GM_addStyle(css) {
var head = document.getElementsByTagName("head")[0];
var style = document.createElement("style");
if (head) {
style.textContent = css;
style.type = "text/css";
head.appendChild(style);
}
return style;
};
// TODO: use simple storage
this.GM_getValue = function GM_getValue(name, defVal) {
return prefService.get(aScript.prefPrefix + name, defVal);
};
this.GM_setValue = function GM_setValue(name, val) {
return prefService.set(aScript.prefPrefix + name, val);
};
this.GM_safeHTMLParser = function GM_safeHTMLParser(aHTMLStr) {
//if (!GM_apiLeakCheck("GM_safeHTMLParser")) return;
let doc = document.implementation.createDocument(NS_XHTML, "html", null);
let body = document.createElementNS(NS_XHTML, "body");
doc.documentElement.appendChild(body);
body.appendChild(Services.suhtml.parseFragment(aHTMLStr, false, null, body));
return doc;
}
this.GM_xmlhttpRequest = function GM_xmlhttpRequest() {
//if (!GM_apiLeakCheck("GM_xmlhttpRequest")) return;
return xhr.contentStartRequest.apply(xhr, arguments);
};
};
exports.GM_API = GM_API;
GM_API.prototype.GM_openInTab =
function GM_openInTab(aURL, aLoadInBackground, aReuse) {
if (aReuse) {
for each (var tab in tabs) {
if (tab.url == aURL) {
if (!aLoadInBackground)
tab.activate();
return;
}
}
}
tabs.open({
url: aURL,
inBackground: aLoadInBackground
});
};
GM_API.prototype.GM_setClipboard = function GM_setClipboard(aData, aType) {
return clipboard.set(aData, aType);
};
GM_API.prototype.GM_generateUUID = function GM_generateUUID() (
Services.uuid.generateUUID().toString());
GM_API.prototype.GM_registerMenuCommand = function() {};
|