阅读:3039回复:8
[求助] 请教 flash-video-downloader 扩展代码修改问题,谢谢
[求助] 请教 flash-video-downloader 扩展代码修改问题,谢谢
https://addons.mozilla.org/zh-CN/firefox/addon/flash-video-downloader/?src=search 因为,上网听歌,会经常听歌,要用到,下载功能,保存窗口的扩展名,不尽如意,就mp3的格式,会默认。 像 m4a , aac mp4 格式经常没有扩展名,要手动修改,很懒,所以试着。改了下代码。 chrome://fvd.single/content/fvd_download.js this.downloadByWindow = function (url, name, ext, referer, callback) { var bundle = Components.classes['@mozilla.org/intl/stringbundle;1'].getService(Components.interfaces.nsIStringBundleService).createBundle('chrome://fvd.single/locale/fvd.single.download.properties'); var fp = Components.classes['@mozilla.org/filepicker;1'].createInstance(Components.interfaces.nsIFilePicker); var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); var window = windowMediator.getMostRecentWindow("navigator:browser"); try { fp.init(window, bundle.GetStringFromName('fvd.single.sfd.title.txt'), fp.modeSave); } catch (ex) { // fails in fennec } if (!ext) ext = '.flv'; if (!name) name = this.md5(url); switch (ext) { case '.mp4': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.mp4.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.mp4.value.txt')); break; } case '.mp3': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.mp3.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.mp3.value.txt')); break; } case '.m4a': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.m4a.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.m4a.value.txt')); break; } case '.aac': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.aac.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.aac.value.txt')); break; } case '.3gp': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.3gp.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.3gp.value.txt')); break; } case '.flv': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.flv.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.flv.value.txt')); break; } case '.webm': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.webm.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.webm.value.txt')); break; } default: { if (ext = '.m4a') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.m4a.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.m4a.value.txt')); } else if (ext = '.mp4') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.mp4.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.mp4.value.txt')); } else if (ext = '.aac') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.aac.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.aac.value.txt')); } else { fp.appendFilters(fp.filterAll); break; } } } if (ext) { try { fp.defaultExtension = ext; } catch (ex) {} } this.load_save_folder(); 原本没有 aac m4a 的,自己添加了上面两处。 default: { fp.appendFilters(fp.filterAll); break; } 这默认是这样的 现在是 default: { if (ext = '.m4a') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.m4a.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.m4a.value.txt')); } else if (ext = '.mp4') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.mp4.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.mp4.value.txt')); } else if (ext = '.aac') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.aac.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.aac.value.txt')); } else { fp.appendFilters(fp.filterAll); break; } 代码只会执行到 .m4a 下面不继续判断了。请教大大们帮忙看看是什么原因。如何添加修改。谢谢。。 |
|
|
1楼#
发布于:2015-07-17 11:52
因为你用的是赋值
if (ext = '.m4a') {不是比较判断 if (ext == '.m4a') {或 if (ext === '.m4a') { |
|
2楼#
发布于:2015-07-17 13:16
|
|
|
3楼#
发布于:2015-07-18 19:17
taoww:因为你用的是赋值这是现在改的,还是不行。 this.downloadByWindow = function (url, name, ext, referer, callback) { var bundle = Components.classes['@mozilla.org/intl/stringbundle;1'].getService(Components.interfaces.nsIStringBundleService).createBundle('chrome://fvd.single/locale/fvd.single.download.properties'); var fp = Components.classes['@mozilla.org/filepicker;1'].createInstance(Components.interfaces.nsIFilePicker); var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); var window = windowMediator.getMostRecentWindow("navigator:browser"); try { fp.init(window, bundle.GetStringFromName('fvd.single.sfd.title.txt'), fp.modeSave); } catch (ex) { // fails in fennec } if (!ext) ext = '.flv'; var extkz = ext; // 自己添加的 if (!name) name = this.md5(url); switch (ext) { case '.mp4': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.mp4.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.mp4.value.txt')); break; } case '.mp3': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.mp3.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.mp3.value.txt')); break; } case '.m4a': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.m4a.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.m4a.value.txt')); // 自己添加的 break; } case '.aac': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.aac.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.aac.value.txt')); // 自己添加的 break; } case '.3gp': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.3gp.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.3gp.value.txt')); break; } case '.flv': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.flv.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.flv.value.txt')); break; } case '.webm': { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.webm.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.webm.value.txt')); break; } default: {// 自己添加的 这边就不能判断了,直接到 tp.filterAll 了。↓ if (extkz == '.m4a') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.m4a.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.m4a.value.txt')); } else if (extkz == '.mp4') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.mp4.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.mp4.value.txt')); } else if (extkz == '.aac') { fp.appendFilter(bundle.GetStringFromName('fvd.single.sfd.formats.aac.title.txt'), bundle.GetStringFromName('fvd.single.sfd.formats.aac.value.txt')); } else {// 自己添加的↑ fp.appendFilters(fp.filterAll); break; } } } if (ext) { try { fp.defaultExtension = ext; } catch (ex) {} } this.load_save_folder(); name = this.escapeFileName(name); try { if (osString == "Android") { throw "Android"; } fp.defaultString = name + ext; fp.displayDirectory = this.folder.clone(); var show_res = fp.show(); if ((show_res == fp.returnOK) || (show_res == fp.returnReplace)) { this.start_download_url(url, fp.fileURL, referer, function (id) { callback(id); }); this.update_save_folder(fp.displayDirectory.path); } } catch (ex) { // fails on fennec var dm = Components.classes['@mozilla.org/download-manager;1'].createInstance(Components.interfaces.nsIDownloadManager); var file = dm.defaultDownloadsDirectory; file = file.QueryInterface(Components.interfaces.nsIFile); var incr = 0; var newName = name; do { if (incr) { newName = name + "-" + incr; } var checkFile = file.clone(); checkFile.append(newName + ext); incr++; } while (checkFile.exists()); file.append(newName + ext); dump("Download to " + file.path + "\n"); var iOService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); var uri = iOService.newFileURI(file); var id = this.start_download_url(url, uri, referer, function (id) { callback(id); }); } return null; };我想应该是找对了 this.downloadByWindow() 这个调用。 在全屏下载上的下载按钮,可以根据 case 的格式选择, 就是用简洁右键菜单时,CASE 不大起作用了(自己添加的),倒是在 default 下 if(自己后来添加的) 的第一个可以,就是没法继续判断。 |
|
|
4楼#
发布于:2015-07-20 09:28
你不懂switch+case+default语句的执行流程?只有当所有case都不满足时才会去执行default,你在case里都符合了,当然不会再去执行default
另外fvd.single.sfd.formats.m4a.title.txt这类资源字符串你在fvd.single.download.properties里加上没有? |
|
5楼#
发布于:2015-07-20 13:01
|
|
|
6楼#
发布于:2015-07-20 13:02
那我去把CASE 添加的删除看看能用不能用。。
|
|
|
7楼#
发布于:2015-07-20 13:15
找错了文件应该是,调用就找错了。在去找找试试。。
|
|
|
8楼#
发布于:2015-07-20 14:22
fvd_single.xul的命令是要对应找 fvd_single.js 的吗。
<?xml version="1.0"?> <?xml-stylesheet href="chrome://fvd.single/skin/fvd.single.css" type="text/css"?> <!DOCTYPE overlay [ <!ENTITY % fvd.singleDTD SYSTEM "chrome://fvd.single/locale/fvd.single.dtd"> %fvd.singleDTD; ]> <overlay id="fvd-single-Overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml"> <script type="application/x-javascript" src="chrome://fvd.single/content/fvd_single.js" /> <script type="application/x-javascript" src="chrome://fvd.single/content/fvd_download.js" /> <script type="application/x-javascript" src="chrome://fvd.single/content/include/yt_button.js" /> <script type="application/x-javascript" src="chrome://fvd.single/content/include/vk_button.js" /> <script type="application/x-javascript" src="chrome://fvd.single/content/include/dm_button.js" /> <script type="application/x-javascript" src="chrome://fvd.single/content/include/rkmMessage.js" /> <script type="application/x-javascript" src="chrome://fvd.single/content/include/ext_api.js" /> <popupset id="mainPopupSet"> <!-- Prototype for fast menu item --> <menupopup> <menu id="fvd_single_fast_menu_item_prototype" class="menu-iconic fvd_speed_dial_FastMenuItem" crop="center" download_state="not"> <menupopup> <menuitem class="download" label="&txt.download;" /> <!--<menuitem class="quick_download" label="&txt.quick_download;"/> --> <menuitem class="pause" disabled="true" label="&txt.pause;" onclick="fvd_single.pauseDownload( this.parentNode.parentNode.getAttribute( 'urlHash' ) );event.stopPropagation();" /> <menuitem class="resume" disabled="true" label="&txt.resume;" onclick="fvd_single.resumeDownload( this.parentNode.parentNode.getAttribute( 'urlHash' ) );event.stopPropagation();" /> <menuitem class="cancel" disabled="true" label="&txt.cancel;" onclick="fvd_single.cancelDownload( this.parentNode.parentNode.getAttribute( 'urlHash' ) );event.stopPropagation();" /> <menuitem class="copy" label="&txt.copy_to_clipboard;" onclick="fvd_single.downloadInstance.copyToClipBoard( this.parentNode.parentNode.getAttribute( 'url' ) );event.stopPropagation();" /> </menupopup> </menu> </menupopup> <menupopup> <menu id="fvd_single_fast_menu_fullHD_prototype" class="menu-iconic fvd_speed_dial_FastMenuItem" crop="center" download_state="not"> <menupopup> <menuitem class="download" label="&txt.download;" /> <menuitem class="cancel" disabled="true" label="&txt.cancel;" onclick="fvd_single.cancelDownload( this.parentNode.parentNode.getAttribute( 'urlHash' ) );event.stopPropagation();" /> </menupopup> </menu> </menupopup> <menupopup id="fvd_single_popup_menu"> <menu id="fvd_single_tools_menu" label="&txt.popup.tools.title;" class="menu-iconic"> <menupopup id="fvd_single_tools_popup_menu" onpopupshowing="fvd_single.tools_menu_showing(event)" oncommand="fvd_single.tools_menu_command(event)"> <menuitem id="fvd_single_tools_js_enabled" type="checkbox" autocheck="false" label="&txt.tools_popup.javascript.title;" /> <menuitem id="fvd_single_tools_check_ip" label="&txt.tools_popup.check_ip.title;" /> <menuitem id="fvd_single_tools_speed_test" label="&txt.tools_popup.speed_test.title;" /> </menupopup> </menu> <menuseparator /> <menuitem label="&txt.popup.settings.title;" oncommand="fvd_single.display_settings(event)" /> </menupopup> <menupopup id="fvd_single_streams_menu"> <menuitem class="fullmode" label="&txt.popup.switch_to_full_mode.title;" oncommand="fvd_single.showDownloadWindow(event)" /> <menuitem label="&txt.set_file_types.title;" oncommand="fvd_single.set_file_types(event);" class="set menuitem-iconic" /> <menuseparator /> </menupopup> </popupset> <toolbarpalette id="BrowserToolbarPalette"> <toolbarbutton class="toolbarbutton-1 chromeclass-toolbar-additional" id="fvd_single_button" label="&txt.main_button.title;" type="menu-button" oncommand="fvd_single.main_button_click(event)" tooltiptext="Flash Video Downloader" /> <!--<toolbarbutton id="fvd_single_status" class="toolbarbutton-1 chromeclass-toolbar-additional" type="button" context="fvd_single_popup_menu" oncommand="fvd_single.status_button_click(event)" />--> </toolbarpalette> </overlay><menuitem class="download" label="&txt.download;" /> 想找这个download ,js 上找不到this.dowload 只有 this.download_default 晕,附件上传不了,只能用百度网盘了。 http://pan.baidu.com/s/1jGlaC7c |
|
|