http://blog.wolfs.jp/
var e621netSupporterObj = {
targetHost: 'e621.net',
targetPage: 'e621.net/post/show/',
isTargetPage: false,
lastTime: 0,
clickID: {
left: 0,
right: 2,
center: 1
},
init: function() {
gBrowser.mPanelContainer.addEventListener("dblclick", this, true);
},
handleEvent: function(event) {
if (gBrowser.currentURI.asciiSpec.indexOf(this.targetPage) != -1) {
event = new XPCNativeWrapper(event);
if (event.target instanceof HTMLImageElement) {
if (event.target.id == 'image') {
event.preventDefault();
if (new Date().getTime() - this.lastTime > 5000) {
this.lastTime = new Date().getTime();
var img = this.getImage(event.target.src);
if (img != null) {
this.saveImage(img, this.getFileName(event.target.src));
}
img = null;
}
}
}
}
},
getFileName: function(url) {
return url.match(".+/(.+?)([\?#;].*)?$")[1];
},
getImage: function(url) {
var request = new XMLHttpRequest();
request.open('GET', url, false);
request.overrideMimeType('text/plain; charset=x-user-defined');
request.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
request.send(null);
if (request.status == 200) {
return request.responseText;
}
request = null;
return null;
},
saveImage: function(imageData, requestFileName) {
var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, 'Select a file', Components.interfaces.nsIFilePicker.modeSave);
fp.appendFilter('JPEG Image', '*.jpg');
fp.appendFilter('PNG Image', '*.png');
fp.appendFilter('GIF Image', '*.gif');
fp.appendFilters(Components.interfaces.nsIFilePicker.filterAll);
fp.defaultString = requestFileName;
switch (requestFileName.split('.')[1]) {
case 'jpg':
fp.defaultExtension = 'jpg';
fp.filterIndex = 0;
break;
case 'png':
fp.defaultExtension = 'png';
fp.filterIndex = 1;
break;
case 'gif':
fp.defaultExtension = 'gif';
fp.filterIndex = 2;
break;
default:
fp.filterIndex = 3;
}
switch (fp.show()) {
case Components.interfaces.nsIFilePicker.returnOK:
case Components.interfaces.nsIFilePicker.returnReplace:
var outStream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
outStream.init(fp.file, 0x02 | 0x08 | 0x20, 0664, 0);
outStream.write(imageData, imageData.length);
if (outStream instanceof Components.interfaces.nsISafeOutputStream) {
outStream.finish();
} else {
outStream.close();
}
outStream = null;
break;
case Components.interfaces.nsIFilePicker.returnCancel:
break;
}
}
};
e621netSupporterObj.init();
最近のコメント