nfmzkvmx
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору usalex В общем, хозяин-барин. В инициализацию: Код: (observer => { Services.obs.addObserver(observer, "document-shown", false); addDestructor(() => Services.obs.removeObserver(observer, "document-shown")) })({ deskFolder: OS.Constants.Path.desktopDir, tmpPath: OS.Path.join(OS.Constants.Path.tmpDir, 'm3u.tmp'), lbl: "Сохранить плейлист m3u на Рабочий стол:", alertS: Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService), slider(msg) { return this.alertS.showAlertNotification("", this.lbl, msg, false, "", null, "") }, saveToFile(str, url) { const enc = new TextEncoder(), arr = enc.encode(str); let filePath, fileName = new Date().toLocaleFormat("%e.%m.%Y (%H-%M-%S) - ") + (url.match(/[^/]+$/)[0] || "плейлист"); fileName = fileName.endsWith(".m3u") ? fileName : fileName + ".m3u"; filePath = OS.Path.join(this.deskFolder, fileName); return OS.File.writeAtomic(filePath, arr, {tmpPath: this.tmpPath}) }, observe(win) { win.addEventListener("pageshow", this, false); }, handleEvent(e) { let win = e ? e.target.defaultView : content.document.defaultView, loc = win.location.href; win.removeEventListener("pageshow", this, false); if (!loc.endsWith(".m3u")) return; let txt = win.content.document.documentElement.textContent; if (txt) this.saveToFile(txt, loc).then( success => this.slider("Успешно сохранено!") , error => this.slider("Ошибка при сохранении на диск:\n\t" + error) ); else this.slider("Страница не содержит текста!") } }); | Решил не мудрить: отслеживается показ страниц, и, если их адрес оканчивается на .m3u, то плейлист сохраняется из текстового контента их содержимого. Хотел сначала перехватывать http-запросы и вовсе предотвращать открытие соответствующих адресов, а содержимое получать с помощью nsITraceableChannel, но это больно мудрено. Залип. Не по моим мозгам и познаниям. ¨-_- |