Skip to content

Instantly share code, notes, and snippets.

@hyagni
Created September 18, 2010 23:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hyagni/586145 to your computer and use it in GitHub Desktop.
Save hyagni/586145 to your computer and use it in GitHub Desktop.
function saveImage(elem) {// I dont need prompt option
let doc = elem.ownerDocument;
let urlStr = window.makeURLAbsolute(elem.baseURI, elem.src);
let uri = makeURI(urlStr, null, null);
window.urlSecurityCheck(uri, doc.nodePrincipal);
// ?の除去(ファイル名に使えないから)
let tmp = elem.src.replace(/\?/g, '');
let ext = tmp.match(/\/[^\/]+(\.[^.\/]+)$/);
// 拡張子の無いURLの場合
if(ext == null){
Application.console.log('can\'t download this file @ util.saveImageElem');
return;
}
ext = ext[1];
var leafname; // 拡張子つきファイル名
if(!elem.alt || elem.alt.length > 24){
leafname = elem.src.match(/\/([^\/]+\.[^.\/]+)$/);
if(leafname){
leafname = leafname[1];
}else{
leafname = elem.src.match(/\/(.+)$/)[1] + '.jpg';
}
if(leafname.length > 20){
leafname = leafname.slice(-20);
}
}else{
leafname = elem.alt.replace(/[:?\\\/*<>|"]/g, '') + ext;
}
let ar = [];
ar = leafname.match(/(.+)\.(.+?)$/);
leafname = ar[1] + (new Date()).valueOf() + '.' + ar[2];
leafname = leafname.fromUTF8Octets();
try {
var downloadManager = Cc["@mozilla.org/download-manager;1"]
.getService(Ci.nsIDownloadManager);
var persist = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
.createInstance(Ci.nsIWebBrowserPersist);
var file = downloadManager.defaultDownloadsDirectory;
file.appendRelativePath(leafname);
var fileuri = makeFileURI(file);
var download = downloadManager.addDownload(0, uri, fileuri, leafname, null, null, null, null, persist);
persist.progressListener = download;
persist.saveURI(uri, null, null, null, null, file);
} catch (e) { Application.console.log(e); }
}
@hyagni
Copy link
Author

hyagni commented Sep 18, 2010

このコードは「画像を保存するヒントモードを作った - vimpめも - vimperatorグループ(http://vimperator.g.hatena.ne.jp/blue_ring/20090420/1240243822)」を参考に書きました。HoKとの同居を前提としてます。
既存関数をちゃんと確認しておりませんので、すでに実装されているようなら教えていただけると幸いです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment