|
阅读:11104回复:38
(已解决)downloadPlus.uc.js在FF73上失效了,请问要如何修改?
如题,downloadPlus.uc.js脚本如下:
// ==UserScript==
// @name downloadPlus.uc.js
// @description 从硬盘中删除+下载重命名并可转码+双击复制链接+另存为+保存并打开+完成下载提示音+自动关闭下载产生的空白标签
// @author w13998686967再次修改整合 (ywzhaiqi、黒仪大螃蟹、Alice0775、紫云飞)
// @include chrome://browser/content/browser.xhtml
// @include chrome://browser/content/places/places.xul
// @include chrome://mozapps/content/downloads/unknownContentType.xul
// @include chrome://mozapps/content/downloads/downloads.xul
// @version 2014.11.02 增加多个功能
// @version 2014.06.06 add delay to fix for new userChrome.js
// ==/UserScript==
(function() {
var encoding = true //true,(新建下载)弹窗 false,不弹窗
var rename = true //true,(下载改名)可改名 false,不可改
var locking = true //true,(下载改名)自动锁定保存文件 false,不锁定
var encodingConvert = false //true,(下载改名)开启下拉菜单选项 false,关闭下拉菜单选项
var Convert = true //true,(保存并打开)兼容火狐版本26+(也许会有BUG) false,火狐版本29+
if (!window.Services) Components.utils.import("resource://gre/modules/Services.jsm");
if (!window.DownloadUtils) Components.utils.import("resource://gre/modules/DownloadUtils.jsm");
switch (location.href) {
case "chrome://browser/content/browser.xhtml":
setTimeout(function() {
new_Download(); // 新建下载
downloadsPanel_removeFile(); // 从硬盘中删除
//downloadSound_Play(); // 下载完成提示音
downloadFileSize(); // 精确显示文件大小
autoClose_blankTab(); // 自动关闭下载产生的空白标签
saveAndOpen_on_main(); // 跟下面的 save_AndOpen 配合使用
download_dialog_changeName_on_main(); // 跟下面的 download_dialog_changeName 配合使用
download_speed(); //下载面板显示下载速度
}, 200);
break;
case "chrome://mozapps/content/downloads/unknownContentType.xul":
setTimeout(function() {
save_And_Open(); // 保存并打开
download_dialog_changeName(); // 下载改名
download_dialog_saveas(); // 另存为...
download_dialog_saveTo(); // 保存到...
download_dialog_showCompleteURL(); // 下载弹出窗口双击链接复制完整链接
download_dialog_doubleclicksaveL(); // 下载弹出窗口双击保存文件项执行下载
window.sizeToContent(); // 下载弹出窗口大小自适应(确保在添加的按钮之后加载)
}, 200);
break;
case "chrome://browser/content/places/places.xul":
setTimeout(function() {
new_Download(); // 新建下载(我的足迹)
downloadsPanel_removeFile(); // 从硬盘中删除(我的足迹)
}, 200);
break;
}
// 下载完成提示音
function downloadSound_Play() {
var downloadPlaySound = {
DL_START: null,
DL_DONE: "file:///C:/WINDOWS/Media/chimes.wav",
DL_CANCEL: null,
DL_FAILED: null,
_list: null,
init: function sampleDownload_init() {
XPCOMUtils.defineLazyModuleGetter(window, "Downloads",
"resource://gre/modules/Downloads.jsm");
window.addEventListener("unload", this, false);
//**** 监视下载
if (!this._list) {
Downloads.getList(Downloads.ALL).then(list => {
this._list = list;
return this._list.addView(this);
}).then(null, Cu.reportError);
}
},
uninit: function() {
window.removeEventListener("unload", this, false);
if (this._list) {
this._list.removeView(this);
}
},
onDownloadAdded: function(aDownload) {
//**** 开始下载
if (this.DL_START);
this.playSoundFile(this.DL_START);
},
onDownloadChanged: function(aDownload) {
//**** 取消下载
if (aDownload.canceled && this.DL_CANCEL)
this.playSoundFile(this.DL_CANCEL)
//**** 下载失败
if (aDownload.error && this.DL_FAILED)
this.playSoundFile(this.DL_FAILED)
//**** 完成下载
if (aDownload.succeeded && this.DL_DONE)
this.playSoundFile(this.DL_DONE)
},
playSoundFile: function(aFilePath) {
if (!aFilePath)
return;
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.createInstance(Components.interfaces["nsIIOService"]);
try {
var uri = ios.newURI(aFilePath, "UTF-8", null);
} catch (e) {
return;
}
var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file;
if (!file.exists())
return;
this.play(uri);
},
play: function(aUri) {
var sound = Components.classes["@mozilla.org/sound;1"]
.createInstance(Components.interfaces["nsISound"]);
sound.play(aUri);
},
handleEvent: function(event) {
switch (event.type) {
case "unload":
this.uninit();
break;
}
}
}
downloadPlaySound.init();
}
//新建下载
function new_Download() {
var createDownloadDialog = function() {
if (encoding)
window.openDialog("data:application/vnd.mozilla.xul+xml;charset=UTF-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPD94bWwtc3R5bGVzaGVldCBocmVmPSJjaHJvbWU6Ly9nbG9iYWwvc2tpbi8iIHR5cGU9InRleHQvY3NzIj8+Cjx3aW5kb3cgeG1sbnM9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcva2V5bWFzdGVyL2dhdGVrZWVwZXIvdGhlcmUuaXMub25seS54dWwiIHdpZHRoPSI1MDAiIGhlaWdodD0iMzAwIiB0aXRsZT0i5paw5bu65LiL6L295Lu75YqhIj4KCTxoYm94IGFsaWduPSJjZW50ZXIiIHRvb2x0aXB0ZXh0PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1sxLTEwMC0zXSAgKFvlvIDlp4st57uT5p2fLeS9jeaVsF0pIj4KCQk8bGFiZWwgdmFsdWU9IuaJuemHj+S7u+WKoSI+PC9sYWJlbD4KCQk8dGV4dGJveCBmbGV4PSIxIi8+Cgk8L2hib3g+Cgk8dGV4dGJveCBpZD0idXJscyIgbXVsdGlsaW5lPSJ0cnVlIiBmbGV4PSIxIi8+Cgk8aGJveCBkaXI9InJldmVyc2UiPgoJCTxidXR0b24gbGFiZWw9IuW8gOWni+S4i+i9vSIvPgoJPC9oYm94PgoJPHNjcmlwdD4KCQk8IVtDREFUQVsKCQlmdW5jdGlvbiBQYXJzZVVSTHMoKSB7CgkJCXZhciBiYXRjaHVybCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRib3giKS52YWx1ZTsKCQkJaWYgKC9cW1xkKy1cZCsoLVxkKyk/XF0vLnRlc3QoYmF0Y2h1cmwpKSB7CgkJCQlmb3IgKHZhciBtYXRjaCA9IGJhdGNodXJsLm1hdGNoKC9cWyhcZCspLShcZCspLT8oXGQrKT9cXS8pLCBpID0gbWF0Y2hbMV0sIGogPSBtYXRjaFsyXSwgayA9IG1hdGNoWzNdLCB1cmxzID0gW107IGkgPD0gajsgaSsrKSB7CgkJCQkJdXJscy5wdXNoKGJhdGNodXJsLnJlcGxhY2UoL1xbXGQrLVxkKygtXGQrKT9cXS8sIChpICsgIiIpLmxlbmd0aCA8IGsgPyAoZXZhbCgiMTBlIiArIChrIC0gKGkgKyAiIikubGVuZ3RoKSkgKyAiIikuc2xpY2UoMikgKyBpIDogaSkpOwoJCQkJfQoJCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3VybHMiKS52YWx1ZSA9IHVybHMuam9pbigiXG4iKTsKCQkJfSBlbHNlIHsKCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN1cmxzIikudmFsdWUgPSBiYXRjaHVybDsKCQkJfQoJCX0KCQl2YXIgb3duZXIgPSB3aW5kb3cub3BlbmVyOwoJCXdoaWxlKG93bmVyLm9wZW5lciAmJiBvd25lci5sb2NhdGlvbiAhPSAiY2hyb21lOi8vYnJvd3Nlci9jb250ZW50L2Jyb3dzZXIueHVsIil7CgkJCW93bmVyID0gb3duZXIub3BlbmVyOwoJCX0KdmFyIG1haW53aW4gPSBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9hcHBzaGVsbC93aW5kb3ctbWVkaWF0b3I7MSJdLmdldFNlcnZpY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSVdpbmRvd01lZGlhdG9yKS5nZXRNb3N0UmVjZW50V2luZG93KCJuYXZpZ2F0b3I6YnJvd3NlciIpOwkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRib3giKS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIFBhcnNlVVJMcywgZmFsc2UpOwoJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbiIpLmFkZEV2ZW50TGlzdGVuZXIoImNvbW1hbmQiLCBmdW5jdGlvbiAoKSB7CQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdXJscyIpLnZhbHVlLnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24gKHVybCkgewoJCQkJb3duZXIuc2F2ZVVSTCh1cmwgLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBtYWlud2luLmRvY3VtZW50KTsKCQkJfSk7CgkJCWNsb3NlKCkKCQl9LCBmYWxzZSk7CgkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidGV4dGJveCIpLnZhbHVlID0gb3duZXIucmVhZEZyb21DbGlwYm9hcmQoKTsKCQlQYXJzZVVSTHMoKTsKCQldXT4KCTwvc2NyaXB0Pgo8L3dpbmRvdz4=", "name", "top=" + (window.screenY + window.innerHeight / 4 - 50) + ",left=" + (window.screenX + window.innerWidth / 2 - 250));
else
window.openDialog("data:application/vnd.mozilla.xul+xml;charset=UTF-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPD94bWwtc3R5bGVzaGVldCBocmVmPSJjaHJvbWU6Ly9nbG9iYWwvc2tpbi8iIHR5cGU9InRleHQvY3NzIj8+Cjx3aW5kb3cgeG1sbnM9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcva2V5bWFzdGVyL2dhdGVrZWVwZXIvdGhlcmUuaXMub25seS54dWwiIHdpZHRoPSI1MDAiIGhlaWdodD0iMzAwIiB0aXRsZT0i5paw5bu65LiL6L295Lu75YqhIj4KCTxoYm94IGFsaWduPSJjZW50ZXIiIHRvb2x0aXB0ZXh0PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1sxLTEwMC0zXSAgKFvlvIDlp4st57uT5p2fLeS9jeaVsF0pIj4KCQk8bGFiZWwgdmFsdWU9IuaJuemHj+S7u+WKoSI+PC9sYWJlbD4KCQk8dGV4dGJveCBmbGV4PSIxIi8+Cgk8L2hib3g+Cgk8dGV4dGJveCBpZD0idXJscyIgbXVsdGlsaW5lPSJ0cnVlIiBmbGV4PSIxIi8+Cgk8aGJveCBkaXI9InJldmVyc2UiPgoJCTxidXR0b24gbGFiZWw9IuW8gOWni+S4i+i9vSIvPgoJPC9oYm94PgoJPHNjcmlwdD4KCQk8IVtDREFUQVsKCQlmdW5jdGlvbiBQYXJzZVVSTHMoKSB7CgkJCXZhciBiYXRjaHVybCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRib3giKS52YWx1ZTsKCQkJaWYgKC9cW1xkKy1cZCsoLVxkKyk/XF0vLnRlc3QoYmF0Y2h1cmwpKSB7CgkJCQlmb3IgKHZhciBtYXRjaCA9IGJhdGNodXJsLm1hdGNoKC9cWyhcZCspLShcZCspLT8oXGQrKT9cXS8pLCBpID0gbWF0Y2hbMV0sIGogPSBtYXRjaFsyXSwgayA9IG1hdGNoWzNdLCB1cmxzID0gW107IGkgPD0gajsgaSsrKSB7CgkJCQkJdXJscy5wdXNoKGJhdGNodXJsLnJlcGxhY2UoL1xbXGQrLVxkKygtXGQrKT9cXS8sIChpICsgIiIpLmxlbmd0aCA8IGsgPyAoZXZhbCgiMTBlIiArIChrIC0gKGkgKyAiIikubGVuZ3RoKSkgKyAiIikuc2xpY2UoMikgKyBpIDogaSkpOwoJCQkJfQoJCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3VybHMiKS52YWx1ZSA9IHVybHMuam9pbigiXG4iKTsKCQkJfSBlbHNlIHsKCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN1cmxzIikudmFsdWUgPSBiYXRjaHVybDsKCQkJfQoJCX0KCQl2YXIgb3duZXIgPSB3aW5kb3cub3BlbmVyOwoJCXdoaWxlKG93bmVyLm9wZW5lciAmJiBvd25lci5sb2NhdGlvbiAhPSAiY2hyb21lOi8vYnJvd3Nlci9jb250ZW50L2Jyb3dzZXIueHVsIil7CgkJCW93bmVyID0gb3duZXIub3BlbmVyOwoJCX0KdmFyIG1haW53aW4gPSBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9hcHBzaGVsbC93aW5kb3ctbWVkaWF0b3I7MSJdLmdldFNlcnZpY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSVdpbmRvd01lZGlhdG9yKS5nZXRNb3N0UmVjZW50V2luZG93KCJuYXZpZ2F0b3I6YnJvd3NlciIpOwkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRib3giKS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIFBhcnNlVVJMcywgZmFsc2UpOwoJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbiIpLmFkZEV2ZW50TGlzdGVuZXIoImNvbW1hbmQiLCBmdW5jdGlvbiAoKSB7CQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdXJscyIpLnZhbHVlLnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24gKHVybCkgewoJCQkJb3duZXIuc2F2ZVVSTCh1cmwgLCBudWxsLCBudWxsLCBudWxsLCB0cnVlLCBudWxsLCBtYWlud2luLmRvY3VtZW50KTsKCQkJfSk7CgkJCWNsb3NlKCkKCQl9LCBmYWxzZSk7CgkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidGV4dGJveCIpLnZhbHVlID0gb3duZXIucmVhZEZyb21DbGlwYm9hcmQoKTsKCQlQYXJzZVVSTHMoKTsKCQldXT4KCTwvc2NyaXB0Pgo8L3dpbmRvdz4=", "name", "top=" + (window.screenY + window.innerHeight / 4 - 50) + ",left=" + (window.screenX + window.innerWidth / 2 - 250));
}
location.href.startsWith('chrome://browser/content/browser.x') && (function() {
document.getElementById('downloads-button').parentNode.addEventListener('click', function(e) {
if (e.target.id == "downloads-button" || e.target.id == "downloads-indicator") {
if (e.button == 2) {
if (!(e.ctrlKey || e.shiftKey || e.altKey || e.metaKey)) {
createDownloadDialog();
e.stopPropagation();
e.preventDefault();
}
}
}
}, false);
})();
location == "chrome://browser/content/places/places.xul" && (function() {
var button = document.querySelector("#placesToolbar").insertBefore(document.createXULElement("toolbarbutton"), document.querySelector("#clearDownloadsButton"));
button.id = "createNewDownload";
button.label = "新建下载";
button.style.paddingRight = "9px";
button.addEventListener("command", createDownloadDialog, false);
window.addEventListener("mouseover", function(e) {
button.style.display = (document.getElementById("searchFilter").attributes.getNamedItem("collection").value == "downloads") ? "-moz-box" : "none";
}, false);
})();
}
// 从硬盘中删除
function downloadsPanel_removeFile() {
var removeDownloadfile = {
currentPanel: 1,
removeStatus: function () {
let RMBtn = document.querySelector("#removeDownload");
if (RMBtn) {
var listbox, node;
let flag = removeDownloadfile.currentPanel;
if (flag == "1") {
listbox = document.querySelector("#downloadsListBox");
node = listbox && listbox.selectedItems && listbox.selectedItems[0];
} else if (flag == "3") {
listbox = document.querySelector("#downloadsRichListBox");
node = listbox && listbox.selectedItems && listbox.selectedItems[0];
} else {
//listbox = document.querySelector("#panelMenu_downloadsMenu");
node = document.getElementById("panelDownloadsContextMenu");
}
let state = (node && node.getAttribute('state'));
let exists = (node && node.getAttribute('exists'));
RMBtn.setAttribute("disabled", "true");
if (state != "0" && state != "4" && state != "5" && exists == "true") {
RMBtn.removeAttribute("disabled");
}
}
},
removeMenu: function (contextMenuId) {
try {
removeDownloadfile.removeStatus();
} catch (e) {
alert(e.message)
}
;
let pnl = document.querySelector("#" + contextMenuId);
if (pnl.querySelector("#removeDownload")) return;
let menuitem = document.getElementById("removeDownload") || document.createXULElement("menuitem"),
rlm = pnl.querySelector('.downloadRemoveFromHistoryMenuItem');
menuitem.setAttribute("label", rlm.getAttribute("label").indexOf("History") != -1 ? "Delete File" : "\u4ECE\u786C\u76D8\u4E2D\u5220\u9664");
menuitem.setAttribute("id", "removeDownload");
function removeSelectFile(path) {
let file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
try {
file.initWithPath(path);
} catch (e) {
}
if (!file.exists()) {
if (/\..{0,10}(\.part)$/.test(file.path))
file.initWithPath(file.path.replace(".part", ""));
else
file.initWithPath(file.path + ".part");
}
if (file.exists()) {
file.permissions |= 0666;
file.remove(0);
}
}
menuitem.onclick = function (e) {
if (e.target.disabled) return;
if (removeDownloadfile.currentPanel == "2") {
//var ddBox = document.getElementById("panelMenu_downloadsMenu");
//if(!ddBox)return;
try {
let sShell = document.getElementById("panelDownloadsContextMenu")._anchorNode._shell;
let path = sShell.download.target.path;
removeSelectFile(path);
sShell.doCommand("cmd_delete");
} catch (e) {
}
} else {
var ddBox = document.getElementById("downloadsRichListBox");
if (!(ddBox && ddBox._placesView)) {
ddBox = document.getElementById("downloadsListBox");
}
if (!ddBox) return;
var len = ddBox.selectedItems.length;
for (var i = len - 1; i >= 0; i--) {
let sShell = ddBox.selectedItems<span style="font-style: italic;">._shell;
let path = sShell.download.target.path;
removeSelectFile(path);
sShell.doCommand("cmd_delete");
}
}
};
try {
pnl.insertBefore(menuitem, rlm.nextSibling);
} catch (e) {
alert(e.message);
}
removeDownloadfile.removeStatus();
},
removeMenu1: function () {
removeDownloadfile.currentPanel = "1";
removeDownloadfile.removeMenu("downloadsContextMenu");
},
removeMenu2: function () {
removeDownloadfile.currentPanel = "2";
removeDownloadfile.removeMenu("panelDownloadsContextMenu");
},
removeMenu3: function () {
removeDownloadfile.currentPanel = "3";
removeDownloadfile.removeMenu("downloadsContextMenu");
},
inited1:false,
init1: function () {
if(removeDownloadfile.inited1)return;
removeDownloadfile.inited1 = true;
document.querySelector("#downloadsContextMenu").addEventListener("popupshowing", this.removeMenu1, false);
},
inited2:false,
init2: function () {
if(removeDownloadfile.inited2)return;
removeDownloadfile.inited2 = true;
document.querySelector("#panelDownloadsContextMenu").addEventListener("popupshowing", this.removeMenu2, false);
},
inited3:false,
init3: function () {
if(removeDownloadfile.inited3)return;
removeDownloadfile.inited3 = true;
document.querySelector("#downloadsContextMenu").addEventListener("popupshowing", this.removeMenu3, false);
},
init:function () {
if (location != "chrome://browser/content/places/places.xul") {
DownloadsPanel._openPopupIfDataReadyOrg = DownloadsPanel._openPopupIfDataReady;
DownloadsPanel._openPopupIfDataReady = function(){
DownloadsPanel._openPopupIfDataReadyOrg();
removeDownloadfile.init1();
}
var times = 0;
function checkStatus() {//等待列表弹出
let pnl = document.querySelector("#panelDownloadsContextMenu");
if (pnl && pnl.querySelector('.downloadRemoveFromHistoryMenuItem')) {
removeDownloadfile.init2()
} else {
times++;
if (times > 5) {
times = 0;
return;
}
setTimeout(checkStatus, 1000);
}
}
DownloadsSubview.showOrg = DownloadsSubview.show;
DownloadsSubview.show = async function show(anchor) {
DownloadsSubview.showOrg(anchor);
setTimeout(checkStatus, 1000);
};
} else {
//我的足迹下载项列表
removeDownloadfile.init3();
}
}
}
removeDownloadfile.init();
window.removeDownloadfile = removeDownloadfile;
}
//精确显示文件大小
function downloadFileSize() {
location.href.startsWith('chrome://browser/content/browser.x') && (DownloadUtils.convertByteUnits =
function DU_convertByteUnits(aBytes) {
let unitIndex = 0;
while ((aBytes >= 999.5) && (unitIndex < 3)) {
aBytes /= 1024;
unitIndex++;
}
return [(aBytes > 0) && (aBytes < 100) && (unitIndex != 0) ? (aBytes < 10 ? (parseInt(aBytes * 100) / 100).toFixed(2) : (parseInt(aBytes * 10) / 10).toFixed(1)) : parseInt(aBytes), ['bytes', 'KB', 'MB', 'GB'][unitIndex]];
});
}
// 自动关闭下载产生的空白标签
function autoClose_blankTab() {
eval("gBrowser.mTabProgressListener = " + gBrowser.mTabProgressListener.toString().replace(/(?=var location)/, '\
if (aWebProgress.DOMWindow.document.documentURI == "about:blank"\
&& aRequest.QueryInterface(nsIChannel).URI.spec != "about:blank" && aStatus == 0) {\
aWebProgress.DOMWindow.setTimeout(function() {\
!aWebProgress.isLoadingDocument && aWebProgress.DOMWindow.close();\
}, 100);\
}\
'));
}
// 保存并打开
function save_And_Open() {
var saveAndOpen = document.documentElement.getButton("extra2");
saveAndOpen.parentNode.insertBefore(saveAndOpen, document.documentElement.getButton("accept").nextSibling);
saveAndOpen.setAttribute("hidden", "false");
saveAndOpen.setAttribute("label", "\u4FDD\u5B58\u5E76\u6253\u5F00");
saveAndOpen.addEventListener("command", () => {
Services.wm.getMostRecentWindow("navigator:browser").saveAndOpen.urls.push(dialog.mLauncher.source.asciiSpec);
document.querySelector("#save").click();
document.documentElement.getButton("accept").disabled=0;
document.documentElement.getButton("accept").click()
});
}
//作用于 main 窗口
function saveAndOpen_on_main() {
Components.utils.import("resource://gre/modules/Downloads.jsm");
saveAndOpen = {
urls: [],
init: function() {
Downloads.getList(Downloads.ALL).then(list => {
list.addView({
onDownloadChanged: function(dl) {
if(dl.progress != 100) return;
const index = saveAndOpen.urls.indexOf(dl.source.url);
if (Convert) {
if (index > -1) {
dl.launch();
saveAndOpen.urls.splice(index, 1);
}
} else {
if (index > -1) {
(new FileUtils.File(dl.target.path)).launch();
saveAndOpen.urls.splice(index, 1);
}
}
},
onDownloadAdded: function() {},
onDownloadRemoved: function() {},
});
}).then(null, Cu.reportError);
}
}
saveAndOpen.init();
}
// 下载改名
function download_dialog_changeName() {
//注:同时关闭改名和下拉菜单会导致下载文件的文件名不显示(非要关闭请默认在28行最前面加//来注释掉该功能)
if (location != "chrome://mozapps/content/downloads/unknownContentType.xul") return;
document.querySelector("#mode").addEventListener("select", function() {
if (dialog.dialogElement("save").selected) {
if (!document.querySelector("#locationtext")) {
if (rename || encodingConvert) {
var orginalString = "";
if (encodingConvert) {
try {
orginalString = (opener.localStorage.getItem(dialog.mLauncher.source.spec) ||
dialog.mLauncher.source.asciiSpec.substring(dialog.mLauncher.source.asciiSpec.lastIndexOf("/"))).replace(/[\/:*?"<>|]/g, "");
opener.localStorage.removeItem(dialog.mLauncher.source.spec)
} catch (e) {
orginalString = dialog.mLauncher.suggestedFileName;
}
}
var location = document.querySelector("#location"), locationtext;
if (encodingConvert)
locationtext = document.createXULElement("menulist");
else
locationtext = document.createXULElement("textbox");
locationtext.id = "locationtext";
if (rename && encodingConvert)
locationtext.setAttribute("editable", "true");
locationtext.setAttribute("style", "margin-top:-2px;margin-bottom:-3px");
locationtext.setAttribute("tooltiptext", "Ctrl+\u70B9\u51FB\u8F6C\u6362url\u7F16\u7801\n\u5DE6\u952E\u003AUNICODE\n\u53F3\u952E\u003AGB2312");
location.parentNode.insertBefore(locationtext, location);
locationtext.addEventListener("click", function(e) {
if (e.ctrlKey) {
if (e.button == 0)
this.value = decodeURIComponent(this.value);
if (e.button == 2) {
e.preventDefault();
converter.charset = "GB2312";
this.value = converter.ConvertToUnicode(unescape(this.value));
}
}
}, false);
if (rename)
locationtext.value = dialog.mLauncher.suggestedFileName;
if (encodingConvert) {
locationtext.addEventListener("command", function(e) {
if (rename)
locationtext.value = e.target.value;
document.title = "Opening " + e.target.value;
});
let menupopup = locationtext.appendChild(document.createXULElement("menupopup"));
let menuitem = menupopup.appendChild(document.createXULElement("menuitem"));
menuitem.value = dialog.mLauncher.suggestedFileName;
menuitem.label = "Original: " + menuitem.value;
if (!rename)
locationtext.value = menuitem.value;
let converter = Components.classes['@mozilla.org/intl/scriptableunicodeconverter']
.getService(Components.interfaces.nsIScriptableUnicodeConverter);
function createMenuitem(encoding) {
converter.charset = encoding;
let menuitem = menupopup.appendChild(document.createXULElement("menuitem"));
menuitem.value = converter.ConvertToUnicode(orginalString).replace(/^"(.+)"$/, "$1");
menuitem.label = encoding + ": " + menuitem.value;
}
["GB18030", "BIG5", "Shift-JIS"].forEach(function(item) {
createMenuitem(item)
});
}
}
}
document.querySelector("#location").hidden = true;
document.querySelector("#locationtext").hidden = false;
} else {
document.querySelector("#locationtext").hidden = true;
document.querySelector("#location").hidden = false;
}
}, false)
if (locking)
dialog.dialogElement("save").click();
else
dialog.dialogElement("save").selected && dialog.dialogElement("save").click();
window.addEventListener("dialogaccept", function(event) {
if ((document.querySelector("#locationtext").value != dialog.mLauncher.suggestedFileName) && dialog.dialogElement("save").selected) {
event.stopPropagation();
var mainwin = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
mainwin.eval("(" + mainwin.internalSave.toString().replace("let ", "").replace("var fpParams", "fileInfo.fileExt=null;fileInfo.fileName=aDefaultFileName;var fpParams") + ")")(dialog.mLauncher.source.asciiSpec, null, document.querySelector("#locationtext").value, null, null, false, null, null, null, null, Services.prefs.getBoolPref("browser.download.useDownloadDir", false), null, mainwin.PrivateBrowsingUtils.isBrowserPrivate(mainwin.gBrowser.selectedBrowser), Services.scriptSecurityManager.getSystemPrincipal());
document.documentElement.removeAttribute("ondialogaccept");
}
}, true);
}
//作用于 main 窗口
function download_dialog_changeName_on_main() {
const obsService = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
const RESPONSE_TOPIC = 'http-on-examine-response';
var respObserver = {
observing: false,
observe: function(subject, topic, data) {
try {
let channel = subject.QueryInterface(Ci.nsIHttpChannel);
let header = channel.contentDispositionHeader;
let associatedWindow = channel.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
associatedWindow.localStorage.setItem(channel.URI.spec, header.split("=")[1]);
} catch (ex) {};
},
start: function() {
if (!this.observing) {
obsService.addObserver(this, RESPONSE_TOPIC, false);
this.observing = true;
}
},
stop: function() {
if (this.observing) {
obsService.removeObserver(this, RESPONSE_TOPIC, false);
this.observing = false;
}
}
};
respObserver.start();
addEventListener("beforeunload", function() {
respObserver.stop();
})
}
// 另存为...
function download_dialog_saveas() {
var saveas = document.documentElement.getButton("extra1");
saveas.setAttribute("hidden", "false");
saveas.setAttribute("label", "\u53E6\u5B58\u4E3A");
saveas.addEventListener("command", function() {
var mainwin = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
mainwin.eval("(" + mainwin.internalSave.toString().replace("let ", "").replace("var fpParams", "fileInfo.fileExt=null;fileInfo.fileName=aDefaultFileName;var fpParams") + ")")(dialog.mLauncher.source.asciiSpec, null, (document.querySelector("#locationtext") ? document.querySelector("#locationtext").value : dialog.mLauncher.suggestedFileName), null, null, false, null, null, null, null, false, null, mainwin.PrivateBrowsingUtils.isBrowserPrivate(mainwin.gBrowser.selectedBrowser), Services.scriptSecurityManager.getSystemPrincipal());
close();
}, false);
}
// 保存到...
function download_dialog_saveTo() {
//目录路径的反斜杠\要双写\\
//第一次使用要修改路径,否则无法下载
//如果使用Firefox3.6 + userChromeJS v1.2,则路径中的汉字要转义为\u6C49\u5B57编码类型,否则会出现乱码
var cssStr = (function() {/*
button[label="\4FDD\5B58\5230"] .box-inherit.button-box{
position: relative;
}
button[label="\4FDD\5B58\5230"] dropmarker{
position: absolute;
top: 0px;
right: 2px;
}
*/}).toString().replace(/^.+\s|.+$/g, "");
var shadowRoot = document.documentElement.shadowRoot;
if(shadowRoot){
var style = document.createElementNS('http://www.w3.org/1999/xhtml', 'html:style');
style.textContent = cssStr;
shadowRoot.insertBefore(style,shadowRoot.firstChild);
}else{
var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
document.insertBefore(style, document.firstChild);
}
var dir = [
//["D:\\下载", "压缩"],
//["D:\\软件", "软件"],
//["D:\\文档", "文档"],
//["D:\\音乐", "歌曲"],
//["D:\\下载", "其他"],
["C:\\", "C盘"],
["D:\\", "D盘"],
["E:\\", "E盘"],
["F:\\", "F盘"]
];
var saveTo = document.documentElement._buttons.cancel.parentNode.insertBefore(document.createXULElement("button"), document.documentElement._buttons.cancel);
var saveToMenu = saveTo.appendChild(document.createXULElement("menupopup"));
saveTo.classList.toggle("dialog-button");
saveTo.label = "\u4FDD\u5B58\u5230";
saveTo.type = "menu";
saveTo.querySelector('.box-inherit.button-box').appendChild(document.createXULElement('dropmarker'));
dir.forEach(function(dir) {
var [name, dir] = [dir[1], dir[0]];
var item = saveToMenu.appendChild(document.createXULElement("menuitem"));
item.setAttribute("label", (name || (dir.match(/[^\\/]+$/) || [dir])[0]));
item.setAttribute("image", "moz-icon:file:///" + dir + "\\");
item.setAttribute("class", "menuitem-iconic");
item.onclick = function() {
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
var path = dir.replace(/^\./, Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile).path);
path = path.endsWith("\\") ? path : path + "\\";
file.initWithPath(path + (document.querySelector("#locationtext") ? document.querySelector("#locationtext").value : document.querySelector("#location").value));
dialog.mLauncher.saveToDisk(file, 1);
dialog.onCancel = function() {};
close();
};
})
}
// 下载弹出窗口双击链接复制完整链接
function download_dialog_showCompleteURL() {
var s = document.querySelector("#source");
s.value = dialog.mLauncher.source.spec;
s.setAttribute("crop", "center");
s.setAttribute("tooltiptext", dialog.mLauncher.source.spec);
s.setAttribute("ondblclick", 'Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(dialog.mLauncher.source.spec)')
}
// 下载弹出窗口双击保存文件项执行下载
function download_dialog_doubleclicksaveL() {
addEventListener("dblclick", function(event) {
event.target.nodeName === "radio" && document.documentElement.getButton("accept").click()
}, false)
}
function download_speed() {
var appVersion = Services.appinfo.version.split(".")[0];
if (appVersion >= 38 && DownloadsViewItem.prototype._updateProgress) {
eval("DownloadsViewItem.prototype._updateProgress = " +
DownloadsViewItem.prototype._updateProgress.toString().replace('status.text', 'status.tip'));
} else if (appVersion < 38 && DownloadsViewItem.prototype._updateStatusLine) {
eval("DownloadsViewItem.prototype._updateStatusLine = " +
DownloadsViewItem.prototype._updateStatusLine.toString().replace('[statusTip', '[status'));
}
}
})();</span> |
|
|
1楼#
发布于:2020-01-08 22:58
// ==UserScript==
// @name downloadPlus.uc.js
// @description 从硬盘中删除+下载重命名并可转码+双击复制链接+另存为+保存并打开+完成下载提示音+自动关闭下载产生的空白标签
// @author w13998686967再次修改整合 (ywzhaiqi、黒仪大螃蟹、Alice0775、紫云飞)
// @include chrome://browser/content/browser.xhtml
// @include chrome://browser/content/places/places.xul
// @include chrome://browser/content/places/places.xhtml
// @include chrome://mozapps/content/downloads/unknownContentType.xul
// @include chrome://mozapps/content/downloads/unknownContentType.xhtml
// @include chrome://mozapps/content/downloads/downloads.xul
// @include chrome://mozapps/content/downloads/downloads.xhtml
// @version 2014.11.02 增加多个功能
// @version 2014.06.06 add delay to fix for new userChrome.js
// ==/UserScript==
(function() {
var encoding = true //true,(新建下载)弹窗 false,不弹窗
var rename = true //true,(下载改名)可改名 false,不可改
var locking = true //true,(下载改名)自动锁定保存文件 false,不锁定
var encodingConvert = false //true,(下载改名)开启下拉菜单选项 false,关闭下拉菜单选项
var Convert = true //true,(保存并打开)兼容火狐版本26+(也许会有BUG) false,火狐版本29+
if (!window.Services) Components.utils.import("resource://gre/modules/Services.jsm");
if (!window.DownloadUtils) Components.utils.import("resource://gre/modules/DownloadUtils.jsm");
switch (location.href) {
case "chrome://browser/content/browser.xhtml":
setTimeout(function() {
new_Download(); // 新建下载
downloadsPanel_removeFile(); // 从硬盘中删除
//downloadSound_Play(); // 下载完成提示音
downloadFileSize(); // 精确显示文件大小
autoClose_blankTab(); // 自动关闭下载产生的空白标签
saveAndOpen_on_main(); // 跟下面的 save_AndOpen 配合使用
download_dialog_changeName_on_main(); // 跟下面的 download_dialog_changeName 配合使用
download_speed(); //下载面板显示下载速度
}, 200);
break;
case "chrome://mozapps/content/downloads/unknownContentType.xul":
case "chrome://mozapps/content/downloads/unknownContentType.xhtml":
setTimeout(function() {
save_And_Open(); // 保存并打开
download_dialog_changeName(); // 下载改名
download_dialog_saveas(); // 另存为...
download_dialog_saveTo(); // 保存到...
download_dialog_showCompleteURL(); // 下载弹出窗口双击链接复制完整链接
download_dialog_doubleclicksaveL(); // 下载弹出窗口双击保存文件项执行下载
window.sizeToContent(); // 下载弹出窗口大小自适应(确保在添加的按钮之后加载)
}, 200);
break;
case "chrome://browser/content/places/places.xul":
case "chrome://browser/content/places/places.xhtml":
setTimeout(function() {
new_Download(); // 新建下载(我的足迹)
downloadsPanel_removeFile(); // 从硬盘中删除(我的足迹)
}, 200);
break;
}
const dialogElement = document.documentElement.getButton ? document.documentElement : document.getElementById('unknownContentType');
// 下载完成提示音
function downloadSound_Play() {
var downloadPlaySound = {
DL_START: null,
DL_DONE: "file:///C:/WINDOWS/Media/chimes.wav",
DL_CANCEL: null,
DL_FAILED: null,
_list: null,
init: function sampleDownload_init() {
XPCOMUtils.defineLazyModuleGetter(window, "Downloads",
"resource://gre/modules/Downloads.jsm");
window.addEventListener("unload", this, false);
//**** 监视下载
if (!this._list) {
Downloads.getList(Downloads.ALL).then(list => {
this._list = list;
return this._list.addView(this);
}).then(null, Cu.reportError);
}
},
uninit: function() {
window.removeEventListener("unload", this, false);
if (this._list) {
this._list.removeView(this);
}
},
onDownloadAdded: function(aDownload) {
//**** 开始下载
if (this.DL_START);
this.playSoundFile(this.DL_START);
},
onDownloadChanged: function(aDownload) {
//**** 取消下载
if (aDownload.canceled && this.DL_CANCEL)
this.playSoundFile(this.DL_CANCEL)
//**** 下载失败
if (aDownload.error && this.DL_FAILED)
this.playSoundFile(this.DL_FAILED)
//**** 完成下载
if (aDownload.succeeded && this.DL_DONE)
this.playSoundFile(this.DL_DONE)
},
playSoundFile: function(aFilePath) {
if (!aFilePath)
return;
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.createInstance(Components.interfaces["nsIIOService"]);
try {
var uri = ios.newURI(aFilePath, "UTF-8", null);
} catch (e) {
return;
}
var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file;
if (!file.exists())
return;
this.play(uri);
},
play: function(aUri) {
var sound = Components.classes["@mozilla.org/sound;1"]
.createInstance(Components.interfaces["nsISound"]);
sound.play(aUri);
},
handleEvent: function(event) {
switch (event.type) {
case "unload":
this.uninit();
break;
}
}
}
downloadPlaySound.init();
}
//新建下载
function new_Download() {
var createDownloadDialog = function() {
if (encoding)
window.openDialog("data:application/vnd.mozilla.xul+xml;charset=UTF-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPD94bWwtc3R5bGVzaGVldCBocmVmPSJjaHJvbWU6Ly9nbG9iYWwvc2tpbi8iIHR5cGU9InRleHQvY3NzIj8+Cjx3aW5kb3cgeG1sbnM9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcva2V5bWFzdGVyL2dhdGVrZWVwZXIvdGhlcmUuaXMub25seS54dWwiIHdpZHRoPSI1MDAiIGhlaWdodD0iMzAwIiB0aXRsZT0i5paw5bu65LiL6L295Lu75YqhIj4KCTxoYm94IGFsaWduPSJjZW50ZXIiIHRvb2x0aXB0ZXh0PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1sxLTEwMC0zXSAgKFvlvIDlp4st57uT5p2fLeS9jeaVsF0pIj4KCQk8bGFiZWwgdmFsdWU9IuaJuemHj+S7u+WKoSI+PC9sYWJlbD4KCQk8dGV4dGJveCBmbGV4PSIxIi8+Cgk8L2hib3g+Cgk8dGV4dGJveCBpZD0idXJscyIgbXVsdGlsaW5lPSJ0cnVlIiBmbGV4PSIxIi8+Cgk8aGJveCBkaXI9InJldmVyc2UiPgoJCTxidXR0b24gbGFiZWw9IuW8gOWni+S4i+i9vSIvPgoJPC9oYm94PgoJPHNjcmlwdD4KCQk8IVtDREFUQVsKCQlmdW5jdGlvbiBQYXJzZVVSTHMoKSB7CgkJCXZhciBiYXRjaHVybCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRib3giKS52YWx1ZTsKCQkJaWYgKC9cW1xkKy1cZCsoLVxkKyk/XF0vLnRlc3QoYmF0Y2h1cmwpKSB7CgkJCQlmb3IgKHZhciBtYXRjaCA9IGJhdGNodXJsLm1hdGNoKC9cWyhcZCspLShcZCspLT8oXGQrKT9cXS8pLCBpID0gbWF0Y2hbMV0sIGogPSBtYXRjaFsyXSwgayA9IG1hdGNoWzNdLCB1cmxzID0gW107IGkgPD0gajsgaSsrKSB7CgkJCQkJdXJscy5wdXNoKGJhdGNodXJsLnJlcGxhY2UoL1xbXGQrLVxkKygtXGQrKT9cXS8sIChpICsgIiIpLmxlbmd0aCA8IGsgPyAoZXZhbCgiMTBlIiArIChrIC0gKGkgKyAiIikubGVuZ3RoKSkgKyAiIikuc2xpY2UoMikgKyBpIDogaSkpOwoJCQkJfQoJCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3VybHMiKS52YWx1ZSA9IHVybHMuam9pbigiXG4iKTsKCQkJfSBlbHNlIHsKCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN1cmxzIikudmFsdWUgPSBiYXRjaHVybDsKCQkJfQoJCX0KCQl2YXIgb3duZXIgPSB3aW5kb3cub3BlbmVyOwoJCXdoaWxlKG93bmVyLm9wZW5lciAmJiBvd25lci5sb2NhdGlvbiAhPSAiY2hyb21lOi8vYnJvd3Nlci9jb250ZW50L2Jyb3dzZXIueHVsIil7CgkJCW93bmVyID0gb3duZXIub3BlbmVyOwoJCX0KdmFyIG1haW53aW4gPSBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9hcHBzaGVsbC93aW5kb3ctbWVkaWF0b3I7MSJdLmdldFNlcnZpY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSVdpbmRvd01lZGlhdG9yKS5nZXRNb3N0UmVjZW50V2luZG93KCJuYXZpZ2F0b3I6YnJvd3NlciIpOwkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRib3giKS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIFBhcnNlVVJMcywgZmFsc2UpOwoJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbiIpLmFkZEV2ZW50TGlzdGVuZXIoImNvbW1hbmQiLCBmdW5jdGlvbiAoKSB7CQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdXJscyIpLnZhbHVlLnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24gKHVybCkgewoJCQkJb3duZXIuc2F2ZVVSTCh1cmwgLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBtYWlud2luLmRvY3VtZW50KTsKCQkJfSk7CgkJCWNsb3NlKCkKCQl9LCBmYWxzZSk7CgkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidGV4dGJveCIpLnZhbHVlID0gb3duZXIucmVhZEZyb21DbGlwYm9hcmQoKTsKCQlQYXJzZVVSTHMoKTsKCQldXT4KCTwvc2NyaXB0Pgo8L3dpbmRvdz4=", "name", "top=" + (window.screenY + window.innerHeight / 4 - 50) + ",left=" + (window.screenX + window.innerWidth / 2 - 250));
else
window.openDialog("data:application/vnd.mozilla.xul+xml;charset=UTF-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPD94bWwtc3R5bGVzaGVldCBocmVmPSJjaHJvbWU6Ly9nbG9iYWwvc2tpbi8iIHR5cGU9InRleHQvY3NzIj8+Cjx3aW5kb3cgeG1sbnM9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcva2V5bWFzdGVyL2dhdGVrZWVwZXIvdGhlcmUuaXMub25seS54dWwiIHdpZHRoPSI1MDAiIGhlaWdodD0iMzAwIiB0aXRsZT0i5paw5bu65LiL6L295Lu75YqhIj4KCTxoYm94IGFsaWduPSJjZW50ZXIiIHRvb2x0aXB0ZXh0PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1sxLTEwMC0zXSAgKFvlvIDlp4st57uT5p2fLeS9jeaVsF0pIj4KCQk8bGFiZWwgdmFsdWU9IuaJuemHj+S7u+WKoSI+PC9sYWJlbD4KCQk8dGV4dGJveCBmbGV4PSIxIi8+Cgk8L2hib3g+Cgk8dGV4dGJveCBpZD0idXJscyIgbXVsdGlsaW5lPSJ0cnVlIiBmbGV4PSIxIi8+Cgk8aGJveCBkaXI9InJldmVyc2UiPgoJCTxidXR0b24gbGFiZWw9IuW8gOWni+S4i+i9vSIvPgoJPC9oYm94PgoJPHNjcmlwdD4KCQk8IVtDREFUQVsKCQlmdW5jdGlvbiBQYXJzZVVSTHMoKSB7CgkJCXZhciBiYXRjaHVybCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRib3giKS52YWx1ZTsKCQkJaWYgKC9cW1xkKy1cZCsoLVxkKyk/XF0vLnRlc3QoYmF0Y2h1cmwpKSB7CgkJCQlmb3IgKHZhciBtYXRjaCA9IGJhdGNodXJsLm1hdGNoKC9cWyhcZCspLShcZCspLT8oXGQrKT9cXS8pLCBpID0gbWF0Y2hbMV0sIGogPSBtYXRjaFsyXSwgayA9IG1hdGNoWzNdLCB1cmxzID0gW107IGkgPD0gajsgaSsrKSB7CgkJCQkJdXJscy5wdXNoKGJhdGNodXJsLnJlcGxhY2UoL1xbXGQrLVxkKygtXGQrKT9cXS8sIChpICsgIiIpLmxlbmd0aCA8IGsgPyAoZXZhbCgiMTBlIiArIChrIC0gKGkgKyAiIikubGVuZ3RoKSkgKyAiIikuc2xpY2UoMikgKyBpIDogaSkpOwoJCQkJfQoJCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3VybHMiKS52YWx1ZSA9IHVybHMuam9pbigiXG4iKTsKCQkJfSBlbHNlIHsKCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN1cmxzIikudmFsdWUgPSBiYXRjaHVybDsKCQkJfQoJCX0KCQl2YXIgb3duZXIgPSB3aW5kb3cub3BlbmVyOwoJCXdoaWxlKG93bmVyLm9wZW5lciAmJiBvd25lci5sb2NhdGlvbiAhPSAiY2hyb21lOi8vYnJvd3Nlci9jb250ZW50L2Jyb3dzZXIueHVsIil7CgkJCW93bmVyID0gb3duZXIub3BlbmVyOwoJCX0KdmFyIG1haW53aW4gPSBDb21wb25lbnRzLmNsYXNzZXNbIkBtb3ppbGxhLm9yZy9hcHBzaGVsbC93aW5kb3ctbWVkaWF0b3I7MSJdLmdldFNlcnZpY2UoQ29tcG9uZW50cy5pbnRlcmZhY2VzLm5zSVdpbmRvd01lZGlhdG9yKS5nZXRNb3N0UmVjZW50V2luZG93KCJuYXZpZ2F0b3I6YnJvd3NlciIpOwkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRib3giKS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIFBhcnNlVVJMcywgZmFsc2UpOwoJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJ1dHRvbiIpLmFkZEV2ZW50TGlzdGVuZXIoImNvbW1hbmQiLCBmdW5jdGlvbiAoKSB7CQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdXJscyIpLnZhbHVlLnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24gKHVybCkgewoJCQkJb3duZXIuc2F2ZVVSTCh1cmwgLCBudWxsLCBudWxsLCBudWxsLCB0cnVlLCBudWxsLCBtYWlud2luLmRvY3VtZW50KTsKCQkJfSk7CgkJCWNsb3NlKCkKCQl9LCBmYWxzZSk7CgkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidGV4dGJveCIpLnZhbHVlID0gb3duZXIucmVhZEZyb21DbGlwYm9hcmQoKTsKCQlQYXJzZVVSTHMoKTsKCQldXT4KCTwvc2NyaXB0Pgo8L3dpbmRvdz4=", "name", "top=" + (window.screenY + window.innerHeight / 4 - 50) + ",left=" + (window.screenX + window.innerWidth / 2 - 250));
}
location.href.startsWith('chrome://browser/content/browser.x') && (function() {
document.getElementById('downloads-button').parentNode.addEventListener('click', function(e) {
if (e.target.id == "downloads-button" || e.target.id == "downloads-indicator") {
if (e.button == 2) {
if (!(e.ctrlKey || e.shiftKey || e.altKey || e.metaKey)) {
createDownloadDialog();
e.stopPropagation();
e.preventDefault();
}
}
}
}, false);
})();
location.href.startsWith("chrome://browser/content/places/places.x") && (function() {
var button = document.querySelector("#placesToolbar").insertBefore(document.createXULElement("toolbarbutton"), document.querySelector("#clearDownloadsButton"));
button.id = "createNewDownload";
button.label = "新建下载";
button.style.paddingRight = "9px";
button.addEventListener("command", createDownloadDialog, false);
window.addEventListener("mouseover", function(e) {
button.style.display = (document.getElementById("searchFilter").attributes.getNamedItem("collection").value == "downloads") ? "-moz-box" : "none";
}, false);
})();
}
// 从硬盘中删除
function downloadsPanel_removeFile() {
var removeDownloadfile = {
currentPanel: 1,
removeStatus: function () {
let RMBtn = document.querySelector("#removeDownload");
if (RMBtn) {
var listbox, node;
let flag = removeDownloadfile.currentPanel;
if (flag == "1") {
listbox = document.querySelector("#downloadsListBox");
node = listbox && listbox.selectedItems && listbox.selectedItems[0];
} else if (flag == "3") {
listbox = document.querySelector("#downloadsRichListBox");
node = listbox && listbox.selectedItems && listbox.selectedItems[0];
} else {
//listbox = document.querySelector("#panelMenu_downloadsMenu");
node = document.getElementById("panelDownloadsContextMenu");
}
let state = (node && node.getAttribute('state'));
let exists = (node && node.getAttribute('exists'));
RMBtn.setAttribute("disabled", "true");
if (state != "0" && state != "4" && state != "5" && exists == "true") {
RMBtn.removeAttribute("disabled");
}
}
},
removeMenu: function (contextMenuId) {
try {
removeDownloadfile.removeStatus();
} catch (e) {
alert(e.message)
}
;
let pnl = document.querySelector("#" + contextMenuId);
if (pnl.querySelector("#removeDownload")) return;
let menuitem = document.getElementById("removeDownload") || document.createXULElement("menuitem"),
rlm = pnl.querySelector('.downloadRemoveFromHistoryMenuItem');
menuitem.setAttribute("label", rlm.getAttribute("label").indexOf("History") != -1 ? "Delete File" : "\u4ECE\u786C\u76D8\u4E2D\u5220\u9664");
menuitem.setAttribute("id", "removeDownload");
function removeSelectFile(path) {
let file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
try {
file.initWithPath(path);
} catch (e) {
}
if (!file.exists()) {
if (/\..{0,10}(\.part)$/.test(file.path))
file.initWithPath(file.path.replace(".part", ""));
else
file.initWithPath(file.path + ".part");
}
if (file.exists()) {
file.permissions |= 0666;
file.remove(0);
}
}
menuitem.onclick = function (e) {
if (e.target.disabled) return;
if (removeDownloadfile.currentPanel == "2") {
//var ddBox = document.getElementById("panelMenu_downloadsMenu");
//if(!ddBox)return;
try {
let sShell = document.getElementById("panelDownloadsContextMenu")._anchorNode._shell;
let path = sShell.download.target.path;
removeSelectFile(path);
sShell.doCommand("cmd_delete");
} catch (e) {
}
} else {
var ddBox = document.getElementById("downloadsRichListBox");
if (!(ddBox && ddBox._placesView)) {
ddBox = document.getElementById("downloadsListBox");
}
if (!ddBox) return;
var len = ddBox.selectedItems.length;
for (var i = len - 1; i >= 0; i--) {
let sShell = ddBox.selectedItems[i]._shell;
let path = sShell.download.target.path;
removeSelectFile(path);
sShell.doCommand("cmd_delete");
}
}
};
try {
pnl.insertBefore(menuitem, rlm.nextSibling);
} catch (e) {
alert(e.message);
}
removeDownloadfile.removeStatus();
},
removeMenu1: function () {
removeDownloadfile.currentPanel = "1";
removeDownloadfile.removeMenu("downloadsContextMenu");
},
removeMenu2: function () {
removeDownloadfile.currentPanel = "2";
removeDownloadfile.removeMenu("panelDownloadsContextMenu");
},
removeMenu3: function () {
removeDownloadfile.currentPanel = "3";
removeDownloadfile.removeMenu("downloadsContextMenu");
},
inited1:false,
init1: function () {
if(removeDownloadfile.inited1)return;
removeDownloadfile.inited1 = true;
document.querySelector("#downloadsContextMenu").addEventListener("popupshowing", this.removeMenu1, false);
},
inited2:false,
init2: function () {
if(removeDownloadfile.inited2)return;
removeDownloadfile.inited2 = true;
document.querySelector("#panelDownloadsContextMenu").addEventListener("popupshowing", this.removeMenu2, false);
},
inited3:false,
init3: function () {
if(removeDownloadfile.inited3)return;
removeDownloadfile.inited3 = true;
document.querySelector("#downloadsContextMenu").addEventListener("popupshowing", this.removeMenu3, false);
},
init:function () {
if (!location.href.startsWith("chrome://browser/content/places/places.x")) {
DownloadsPanel._openPopupIfDataReadyOrg = DownloadsPanel._openPopupIfDataReady;
DownloadsPanel._openPopupIfDataReady = function(){
DownloadsPanel._openPopupIfDataReadyOrg();
removeDownloadfile.init1();
}
var times = 0;
function checkStatus() {//等待列表弹出
let pnl = document.querySelector("#panelDownloadsContextMenu");
if (pnl && pnl.querySelector('.downloadRemoveFromHistoryMenuItem')) {
removeDownloadfile.init2()
} else {
times++;
if (times > 5) {
times = 0;
return;
}
setTimeout(checkStatus, 1000);
}
}
DownloadsSubview.showOrg = DownloadsSubview.show;
DownloadsSubview.show = async function show(anchor) {
DownloadsSubview.showOrg(anchor);
setTimeout(checkStatus, 1000);
};
} else {
//我的足迹下载项列表
removeDownloadfile.init3();
}
}
}
removeDownloadfile.init();
window.removeDownloadfile = removeDownloadfile;
}
//精确显示文件大小
function downloadFileSize() {
location.href.startsWith('chrome://browser/content/browser.x') && (DownloadUtils.convertByteUnits =
function DU_convertByteUnits(aBytes) {
let unitIndex = 0;
while ((aBytes >= 999.5) && (unitIndex < 3)) {
aBytes /= 1024;
unitIndex++;
}
return [(aBytes > 0) && (aBytes < 100) && (unitIndex != 0) ? (aBytes < 10 ? (parseInt(aBytes * 100) / 100).toFixed(2) : (parseInt(aBytes * 10) / 10).toFixed(1)) : parseInt(aBytes), ['bytes', 'KB', 'MB', 'GB'][unitIndex]];
});
}
// 自动关闭下载产生的空白标签
function autoClose_blankTab() {
gBrowser.addTabsProgressListener({
onStateChange (aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) {
if (!aRequest || !aWebProgress.isTopLevel) return;
let location;
try {
aRequest.QueryInterface(Ci.nsIChannel);
location = aRequest.URI;
} catch (ex) {}
if ((aStateFlags & Ci.nsIWebProgressListener.STATE_STOP) &&
(aStateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) &&
location && location.spec !== 'about:blank' &&
aBrowser.documentURI && aBrowser.documentURI.spec === 'about:blank' &&
Components.isSuccessCode(aStatus) && !aWebProgress.isLoadingDocument
) {
setTimeout(() => {
gBrowser.removeTab(gBrowser.getTabForBrowser(aBrowser));
}, 100);
}
}
});
}
// 保存并打开
function save_And_Open() {
var saveAndOpen = dialogElement.getButton("extra2");
saveAndOpen.parentNode.insertBefore(saveAndOpen, dialogElement.getButton("accept").nextSibling);
saveAndOpen.setAttribute("hidden", "false");
saveAndOpen.setAttribute("label", "\u4FDD\u5B58\u5E76\u6253\u5F00");
saveAndOpen.addEventListener("command", () => {
Services.wm.getMostRecentWindow("navigator:browser").saveAndOpen.urls.push(dialog.mLauncher.source.asciiSpec);
document.querySelector("#save").click();
dialogElement.getButton("accept").disabled=0;
dialogElement.getButton("accept").click()
});
}
//作用于 main 窗口
function saveAndOpen_on_main() {
Components.utils.import("resource://gre/modules/Downloads.jsm");
saveAndOpen = {
urls: [],
init: function() {
Downloads.getList(Downloads.ALL).then(list => {
list.addView({
onDownloadChanged: function(dl) {
if(dl.progress != 100) return;
const index = saveAndOpen.urls.indexOf(dl.source.url);
if (Convert) {
if (index > -1) {
dl.launch();
saveAndOpen.urls.splice(index, 1);
}
} else {
if (index > -1) {
(new FileUtils.File(dl.target.path)).launch();
saveAndOpen.urls.splice(index, 1);
}
}
},
onDownloadAdded: function() {},
onDownloadRemoved: function() {},
});
}).then(null, Cu.reportError);
}
}
saveAndOpen.init();
}
// 下载改名
function download_dialog_changeName() {
//注:同时关闭改名和下拉菜单会导致下载文件的文件名不显示(非要关闭请默认在28行最前面加//来注释掉该功能)
if (!location.href.startsWith("chrome://mozapps/content/downloads/unknownContentType.x")) return;
document.querySelector("#mode").addEventListener("select", function() {
if (dialog.dialogElement("save").selected) {
if (!document.querySelector("#locationtext")) {
if (rename || encodingConvert) {
var orginalString = "";
if (encodingConvert) {
try {
orginalString = (opener.localStorage.getItem(dialog.mLauncher.source.spec) ||
dialog.mLauncher.source.asciiSpec.substring(dialog.mLauncher.source.asciiSpec.lastIndexOf("/"))).replace(/[\/:*?"<>|]/g, "");
opener.localStorage.removeItem(dialog.mLauncher.source.spec)
} catch (e) {
orginalString = dialog.mLauncher.suggestedFileName;
}
}
var location = document.querySelector("#location"), locationtext;
if (encodingConvert)
locationtext = document.createXULElement("menulist");
else
locationtext = document.createElementNS("http://www.w3.org/1999/xhtml", "html:input");
locationtext.id = "locationtext";
if (rename && encodingConvert)
locationtext.setAttribute("editable", "true");
locationtext.setAttribute("style", "margin-top:-2px;margin-bottom:-3px");
locationtext.setAttribute("tooltiptext", "Ctrl+\u70B9\u51FB\u8F6C\u6362url\u7F16\u7801\n\u5DE6\u952E\u003AUNICODE\n\u53F3\u952E\u003AGB2312");
location.parentNode.insertBefore(locationtext, location);
locationtext.addEventListener("click", function(e) {
if (e.ctrlKey) {
if (e.button == 0)
this.value = decodeURIComponent(this.value);
if (e.button == 2) {
e.preventDefault();
converter.charset = "GB2312";
this.value = converter.ConvertToUnicode(unescape(this.value));
}
}
}, false);
if (rename)
locationtext.value = dialog.mLauncher.suggestedFileName;
if (encodingConvert) {
locationtext.addEventListener("command", function(e) {
if (rename)
locationtext.value = e.target.value;
document.title = "Opening " + e.target.value;
});
let menupopup = locationtext.appendChild(document.createXULElement("menupopup"));
let menuitem = menupopup.appendChild(document.createXULElement("menuitem"));
menuitem.value = dialog.mLauncher.suggestedFileName;
menuitem.label = "Original: " + menuitem.value;
if (!rename)
locationtext.value = menuitem.value;
let converter = Components.classes['@mozilla.org/intl/scriptableunicodeconverter']
.getService(Components.interfaces.nsIScriptableUnicodeConverter);
function createMenuitem(encoding) {
converter.charset = encoding;
let menuitem = menupopup.appendChild(document.createXULElement("menuitem"));
menuitem.value = converter.ConvertToUnicode(orginalString).replace(/^"(.+)"$/, "$1");
menuitem.label = encoding + ": " + menuitem.value;
}
["GB18030", "BIG5", "Shift-JIS"].forEach(function(item) {
createMenuitem(item)
});
}
}
}
document.querySelector("#location").hidden = true;
document.querySelector("#locationtext").hidden = false;
} else {
document.querySelector("#locationtext").hidden = true;
document.querySelector("#location").hidden = false;
}
}, false)
if (locking)
dialog.dialogElement("save").click();
else
dialog.dialogElement("save").selected && dialog.dialogElement("save").click();
window.addEventListener("dialogaccept", function(event) {
if ((document.querySelector("#locationtext").value != dialog.mLauncher.suggestedFileName) && dialog.dialogElement("save").selected) {
event.stopPropagation();
var mainwin = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
mainwin.eval("(" + mainwin.internalSave.toString().replace("let ", "").replace("var fpParams", "fileInfo.fileExt=null;fileInfo.fileName=aDefaultFileName;var fpParams") + ")")(dialog.mLauncher.source.asciiSpec, null, document.querySelector("#locationtext").value, null, null, false, null, null, null, null, Services.prefs.getBoolPref("browser.download.useDownloadDir", false), null, mainwin.PrivateBrowsingUtils.isBrowserPrivate(mainwin.gBrowser.selectedBrowser), Services.scriptSecurityManager.getSystemPrincipal());
document.documentElement.removeAttribute("ondialogaccept");
}
}, true);
}
//作用于 main 窗口
function download_dialog_changeName_on_main() {
const obsService = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
const RESPONSE_TOPIC = 'http-on-examine-response';
var respObserver = {
observing: false,
observe: function(subject, topic, data) {
try {
let channel = subject.QueryInterface(Ci.nsIHttpChannel);
let header = channel.contentDispositionHeader;
let associatedWindow = channel.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
associatedWindow.localStorage.setItem(channel.URI.spec, header.split("=")[1]);
} catch (ex) {};
},
start: function() {
if (!this.observing) {
obsService.addObserver(this, RESPONSE_TOPIC, false);
this.observing = true;
}
},
stop: function() {
if (this.observing) {
obsService.removeObserver(this, RESPONSE_TOPIC, false);
this.observing = false;
}
}
};
respObserver.start();
addEventListener("beforeunload", function() {
respObserver.stop();
})
}
// 另存为...
function download_dialog_saveas() {
var saveas = dialogElement.getButton("extra1");
saveas.setAttribute("hidden", "false");
saveas.setAttribute("label", "\u53E6\u5B58\u4E3A");
saveas.addEventListener("command", function() {
var mainwin = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
mainwin.eval("(" + mainwin.internalSave.toString().replace("let ", "").replace("var fpParams", "fileInfo.fileExt=null;fileInfo.fileName=aDefaultFileName;var fpParams") + ")")(dialog.mLauncher.source.asciiSpec, null, (document.querySelector("#locationtext") ? document.querySelector("#locationtext").value : dialog.mLauncher.suggestedFileName), null, null, false, null, null, null, null, false, null, mainwin.PrivateBrowsingUtils.isBrowserPrivate(mainwin.gBrowser.selectedBrowser), Services.scriptSecurityManager.getSystemPrincipal());
close();
}, false);
}
// 保存到...
function download_dialog_saveTo() {
//目录路径的反斜杠\要双写\\
//第一次使用要修改路径,否则无法下载
//如果使用Firefox3.6 + userChromeJS v1.2,则路径中的汉字要转义为\u6C49\u5B57编码类型,否则会出现乱码
var cssStr = (function() {/*
button[label="\4FDD\5B58\5230"] .box-inherit.button-box{
position: relative;
}
button[label="\4FDD\5B58\5230"] dropmarker{
position: absolute;
top: 0px;
right: 2px;
}
*/}).toString().replace(/^.+\s|.+$/g, "");
var shadowRoot = document.documentElement.shadowRoot;
if(shadowRoot){
var style = document.createElementNS('http://www.w3.org/1999/xhtml', 'html:style');
style.textContent = cssStr;
shadowRoot.insertBefore(style,shadowRoot.firstChild);
}else{
var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
document.insertBefore(style, document.firstChild);
}
var dir = [
//["D:\\下载", "压缩"],
//["D:\\软件", "软件"],
//["D:\\文档", "文档"],
//["D:\\音乐", "歌曲"],
//["D:\\下载", "其他"],
["C:\\", "C盘"],
["D:\\", "D盘"],
["E:\\", "E盘"],
["F:\\", "F盘"]
];
var saveTo = dialogElement._buttons.cancel.parentNode.insertBefore(document.createXULElement("button"), dialogElement._buttons.cancel);
var saveToMenu = saveTo.appendChild(document.createXULElement("menupopup"));
saveTo.classList.toggle("dialog-button");
saveTo.label = "\u4FDD\u5B58\u5230";
saveTo.type = "menu";
saveTo.querySelector('.box-inherit.button-box').appendChild(document.createXULElement('dropmarker'));
dir.forEach(function(dir) {
var [name, dir] = [dir[1], dir[0]];
var item = saveToMenu.appendChild(document.createXULElement("menuitem"));
item.setAttribute("label", (name || (dir.match(/[^\\/]+$/) || [dir])[0]));
item.setAttribute("image", "moz-icon:file:///" + dir + "\\");
item.setAttribute("class", "menuitem-iconic");
item.onclick = function() {
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
var path = dir.replace(/^\./, Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile).path);
path = path.endsWith("\\") ? path : path + "\\";
file.initWithPath(path + (document.querySelector("#locationtext") ? document.querySelector("#locationtext").value : document.querySelector("#location").value));
dialog.mLauncher.saveToDisk(file, 1);
dialog.onCancel = function() {};
close();
};
})
}
// 下载弹出窗口双击链接复制完整链接
function download_dialog_showCompleteURL() {
var s = document.querySelector("#source");
s.value = dialog.mLauncher.source.spec;
s.setAttribute("crop", "center");
s.setAttribute("tooltiptext", dialog.mLauncher.source.spec);
s.setAttribute("ondblclick", 'Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(dialog.mLauncher.source.spec)')
}
// 下载弹出窗口双击保存文件项执行下载
function download_dialog_doubleclicksaveL() {
addEventListener("dblclick", function(event) {
event.target.nodeName === "radio" && dialogElement.getButton("accept").click()
}, false)
}
function download_speed() {
var appVersion = Services.appinfo.version.split(".")[0];
if (appVersion >= 38 && DownloadsViewItem.prototype._updateProgress) {
eval("DownloadsViewItem.prototype._updateProgress = " +
DownloadsViewItem.prototype._updateProgress.toString().replace('status.text', 'status.tip'));
} else if (appVersion < 38 && DownloadsViewItem.prototype._updateStatusLine) {
eval("DownloadsViewItem.prototype._updateStatusLine = " +
DownloadsViewItem.prototype._updateStatusLine.toString().replace('[statusTip', '[status'));
}
}
})(); |
|
|
2楼#
发布于:2020-01-09 02:12
|
|
|
3楼#
发布于:2020-01-09 13:07
我这里没问题。
|
|
|
4楼#
发布于:2020-01-09 14:31
|
|
|
5楼#
发布于:2020-01-09 17:04
|
|
|
6楼#
发布于:2020-01-09 18:51
|
|
|
7楼#
发布于:2020-01-09 20:56
|
|
|
8楼#
发布于:2020-02-07 21:46
|
|
|
|
9楼#
发布于:2020-02-07 22:17
withero:楼主,能否把能正常UC的教程或文件分享一下吗?谢谢!回到原帖1.将config.js放在firefox的安装目录下; 2.将config-prefs.js放在“安装目录\defaults\pref”里; 3.将userChrome.js放在“配置文件夹\chrome”里,注意此userChrome.js只适用于ff73+;ff72的用这个userChrome.js |
|
|
10楼#
发布于:2020-02-12 21:49
谢谢,原来又用回之前的方法了。
|
|
|
|
11楼#
发布于:2020-02-18 21:38
lonely_8:原楼层已经改好了。回到原帖大佬您好!https://www.firefox.net.cn/read-121355 关于downloadplus还有两个问题需要修复。一个是自动关闭空白标签页,另外一个是下载框文件名改名,这两个都有点问题。您看能修复吗?谢谢! |
|
|
12楼#
发布于:2020-02-19 00:40
kidzgy:大佬您好!https://www.firefox.net.cn/read-121355 关于downloadplus还有两个问题需要修复。一个是自动关闭空白标签页,另外一个是下载框文件名改名,这两个都有点问题。您看能修复吗?谢谢!回到原帖第一个问题在1楼原楼层尝试修复了。 第二个我用72和73测试都没发现问题。 |
|
|
13楼#
发布于:2020-02-19 21:53
|
|
|
14楼#
发布于:2020-02-19 23:10
|
|
上一页
下一页