📄 fdm_ffext.js
字号:
var fdm_FDM = Components.classes["@freedownloadmanager.org/FDMForFirefox;1"].createInstance ();
fdm_FDM = fdm_FDM.QueryInterface (Components.interfaces.IFDMForFirefox);
var fdm_hoverElement = null;
var fdm_lastClickCaptureTime = 0;
function fdm_gatherCookieForHost (_host, _cookieWeHave)
{
var fdm_cookieManager =
Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);
var _cookie = _cookieWeHave;
for (var iter = fdm_cookieManager.enumerator; iter.hasMoreElements();)
{
if ((objCookie = iter.getNext()) instanceof Components.interfaces.nsICookie)
{
var cookieHost = objCookie.host;
if (cookieHost.charAt(0) == ".")
cookieHost = cookieHost.substring (1);
if (cookieHost == _host || _host.indexOf ("." + cookieHost) != -1)
{
if (_cookie.indexOf (objCookie.name + "=" + objCookie.value) == -1)
{
if (_cookie.length)
_cookie += "; ";
_cookie += objCookie.name + "=" + objCookie.value;
}
}
}
}
return _cookie;
}
function fdm_dlURL (strUrl)
{
var url = Components.classes["@freedownloadmanager.org/FDMUrl;1"].createInstance ();
url = url.QueryInterface (Components.interfaces.IFDMUrl);
url.Url = strUrl;
url.Referer = document.commandDispatcher.focusedWindow.document.URL;
url.Cookies = fdm_gatherCookieForHost (document.commandDispatcher.focusedWindow.document.location.hostname, document.commandDispatcher.focusedWindow.document.cookie);
var urlRcvr = Components.classes["@freedownloadmanager.org/FDMUrlReceiver;1"].createInstance ();
urlRcvr = urlRcvr.QueryInterface (Components.interfaces.IFDMUrlReceiver);
urlRcvr.SetUrl (url);
urlRcvr.ShowAddDownloadDialog ();
}
function fdm_dlHoverElem()
{
var strUrl = fdm_getURL (fdm_hoverElement);
if (strUrl == null)
return false;
fdm_dlURL (strUrl);
return true;
}
// remember the current hover element here
window.addEventListener("mouseover", function(ev)
{
fdm_hoverElement = ev.target;
}, false);
window.addEventListener("mouseup", function(ev)
{
if(ev.altKey && !(ev.ctrlKey || ev.metaKey || ev.shiftKey) &&
fdm_FDM.IsALTShouldBePressed())
{
if(fdm_dlHoverElem())
{
ev.preventDefault();
ev.stopPropagation();
fdm_lastClickCaptureTime = new Date().getTime();
return;
}
}
}, false);
window.addEventListener("click",function(ev)
{
if(ev.altKey && new Date().getTime()-fdm_lastClickCaptureTime < 100)
{
// catch click on a link
ev.preventDefault();
ev.stopPropagation();
}
}, true);
var fdm_LastPost = null;
var fdm_Observer = {
observe: function (channel, topic, data)
{
if(channel instanceof Components.interfaces.nsIUploadChannel) {
var fdm_Ext = Components.classes["@freedownloadmanager.org/FDMFirefoxExtension;1"].createInstance ();
fdm_Ext = fdm_Ext.QueryInterface (Components.interfaces.IFDMFirefoxExtension);
fdm_LastPost = channel;
fdm_Ext.LastPost = fdm_LastPost;
}
},
QueryInterface: function (aIID)
{
if (!aIID.equals (Components.interfaces.nsISupports) && !aIID.equals (Components.interfaces.nsIObserver))
throw Components.result.NS_ERROR_NO_INTERFACE;
return this;
}
};
const fdm_FFObsrv = Components.classes['@mozilla.org/observer-service;1'].getService(
Components.interfaces.nsIObserverService);
fdm_FFObsrv.addObserver (fdm_Observer, "http-on-modify-request", false);
window.addEventListener("load", fdm_initOverlay, false);
function fdm_initOverlay ()
{
var menu = document.getElementById("contentAreaContextMenu");
menu.addEventListener("popupshowing", fdm_contextPopupShowing, false);
}
function fdm_checkHasVideo ()
{
if (document.commandDispatcher.focusedWindow.document.domain == null)
return false;
return fdm_FDM.IsDomainSupportedForVideoDownloads (document.commandDispatcher.focusedWindow.document.domain);
}
// handler. will be called by browser
function fdm_contextPopupShowing ()
{
var menuitem = document.getElementById("fdm-context-item-dllink");
menuitem.label = fdm_FDM.GetLngString ("dllink");
menuitem.hidden = fdm_FDM.IsContextMenuItemShouldBeHidden ("dllink") ||
!fdm_checkURL (fdm_getURL (document.popupNode));
menuitem = document.getElementById("fdm-context-item-dlall");
menuitem.label = fdm_FDM.GetLngString ("dlall");
menuitem.hidden = fdm_FDM.IsContextMenuItemShouldBeHidden ("dlall");
menuitem = document.getElementById("fdm-context-item-dlselected");
menuitem.label = fdm_FDM.GetLngString ("dlselected");
menuitem.hidden = fdm_FDM.IsContextMenuItemShouldBeHidden ("dlselected") ||
document.commandDispatcher.focusedWindow.getSelection().isCollapsed;
menuitem = document.getElementById("fdm-context-item-dlvideo");
menuitem.label = fdm_FDM.GetLngString ("dlvideo");
menuitem.hidden = fdm_FDM.IsContextMenuItemShouldBeHidden ("dlvideo") ||
fdm_checkHasVideo () == false;
menuitem = document.getElementById("fdm-context-item-separator");
menuitem.hidden = fdm_FDM.IsContextMenuItemShouldBeHidden ("separator1");
}
function fdm_getURL (node)
{
if (node instanceof HTMLImageElement &&
!((node.parentNode instanceof HTMLAnchorElement) || (node.parentNode instanceof HTMLAreaElement)))
return node.src;
if ((node instanceof HTMLAnchorElement) || (node instanceof HTMLAreaElement))
return node.href;
return node.parentNode ? fdm_getURL (node.parentNode) : null;
}
function fdm_checkURL (url)
{
return url ? true : false;
}
function fdm_dllink ()
{
fdm_dlURL (fdm_getURL (document.popupNode));
}
function fdm_dlvideo ()
{
/*fdm_FDM.ProcessVideoDocument (document.commandDispatcher.focusedWindow.document.domain,
"", document.commandDispatcher.focusedWindow.document.documentElement.innerHTML);*/
fdm_FDM.CreateVideoDownloadFromUrl (document.commandDispatcher.focusedWindow.document.URL);
}
// add urls of all or selected only elements of current web page to fdm
function fdm_gatherElements (url, urlListRcvr, elements, bSelectedOnly)
{
const selection = document.commandDispatcher.focusedWindow.getSelection();
if (bSelectedOnly && selection.isCollapsed)
return;
for (var i = 0; i < elements.length; i++)
{
const elem = elements.item (i);
if (bSelectedOnly == false || selection.containsNode (elem, true))
{
var strUrl = fdm_getURL (elem);;
if (fdm_checkURL (strUrl))
{
url.Url = strUrl;
urlListRcvr.AddUrl (url);
}
}
}
}
function fdm_gatherAllElements (bSelectedOnly, cookie)
{
var url = Components.classes["@freedownloadmanager.org/FDMUrl;1"].createInstance ();
url = url.QueryInterface (Components.interfaces.IFDMUrl);
url.Referer = document.commandDispatcher.focusedWindow.document.URL;
url.Cookies = cookie;
var urlListRcvr = Components.classes["@freedownloadmanager.org/FDMUrlListReceiver;1"].createInstance ();
urlListRcvr = urlListRcvr.QueryInterface (Components.interfaces.IFDMUrlListReceiver);
fdm_gatherElements (url, urlListRcvr,
document.commandDispatcher.focusedWindow.document.links, bSelectedOnly);
fdm_gatherElements (url, urlListRcvr,
document.commandDispatcher.focusedWindow.document.images, bSelectedOnly);
urlListRcvr.ShowAddUrlListDialog ();
}
function fdm_dlall ()
{
fdm_gatherAllElements (false, fdm_gatherCookieForHost (document.commandDispatcher.focusedWindow.document.location.hostname, document.commandDispatcher.focusedWindow.document.cookie));
}
function fdm_dlselected ()
{
fdm_gatherAllElements (true, fdm_gatherCookieForHost (document.commandDispatcher.focusedWindow.document.location.hostname, document.commandDispatcher.focusedWindow.document.cookie));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -