二つのパスから相対パスを得る関数
id:teramako さんに教えて貰いました。
function fromUTF8Octets (s) { let conv = Components.classes['@mozilla.org/intl/scriptableunicodeconverter']. getService(Components.interfaces.nsIScriptableUnicodeConverter); conv.charset = 'UTF-8'; return conv.ConvertToUnicode(s); } // 非推奨版 http://nanto.asablo.jp/blog/2006/10/23/572458 // function fromUTF8Octets (s) // decodeURIComponent(escape(s)); function makeLocalFile (path) { let file = Components.classes['@mozilla.org/file/local;1'] .createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); return file; } function getRelativePath (target, base) { return fromUTF8Octets(makeLocalFile(target).getRelativeDescriptor(makeLocalFile(base))); }
getRelativeDescriptor の返値は何故か UTF-8 のバイト列なので fromUTF8Octets を適用する必要がある。