pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
阅读:3040回复:8

[求助] 请教 flash-video-downloader 扩展代码修改问题,谢谢

楼主#
更多 发布于:2015-07-17 09:31
[求助] 请教 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 下面不继续判断了。请教大大们帮忙看看是什么原因。如何添加修改。谢谢。。
闲云潭影日悠悠。物换星移几度秋了
taoww
非常火狐
非常火狐
  • UID39284
  • 注册日期2013-03-18
  • 最后登录2025-04-21
  • 发帖数662
  • 经验607枚
  • 威望0点
  • 贡献值110点
  • 好评度114点
1楼#
发布于:2015-07-17 11:52
因为你用的是赋值
if (ext = '.m4a') {
不是比较判断
if (ext == '.m4a') {

if (ext === '.m4a') {
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
2楼#
发布于:2015-07-17 13:16
taoww:因为你用的是赋值
if (ext = '.m4a') {不是比较判断
if (ext == '.m4a') {或
if (ext === '.m4a') {
回到原帖
用了==   或者 ===    

直接都是这个了。
else {
                            fp.appendFilters(fp.filterAll);
                            break;
前面条件都好像跳过了。
闲云潭影日悠悠。物换星移几度秋了
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
3楼#
发布于:2015-07-18 19:17
taoww:因为你用的是赋值
if (ext = '.m4a') {不是比较判断
if (ext == '.m4a') {或
if (ext === '.m4a') {
回到原帖
这是现在改的,还是不行。
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(自己后来添加的) 的第一个可以,就是没法继续判断。
闲云潭影日悠悠。物换星移几度秋了
taoww
非常火狐
非常火狐
  • UID39284
  • 注册日期2013-03-18
  • 最后登录2025-04-21
  • 发帖数662
  • 经验607枚
  • 威望0点
  • 贡献值110点
  • 好评度114点
4楼#
发布于:2015-07-20 09:28
你不懂switch+case+default语句的执行流程?只有当所有case都不满足时才会去执行default,你在case里都符合了,当然不会再去执行default
另外fvd.single.sfd.formats.m4a.title.txt这类资源字符串你在fvd.single.download.properties里加上没有?
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
5楼#
发布于:2015-07-20 13:01
taoww:你不懂switch+case+default语句的执行流程?只有当所有case都不满足时才会去执行default,你在case里都符合了,当然不会再去执行default
另外fvd.single.sfd.formats.m4a.title....
回到原帖
添加了,知道,就是在全屏上可以按CASE实现,菜单右键,CASE就不能用了(不知是否要改其它的地方。),自己也不知道有没有找对。还是写错了。
闲云潭影日悠悠。物换星移几度秋了
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
6楼#
发布于:2015-07-20 13:02
那我去把CASE 添加的删除看看能用不能用。。
闲云潭影日悠悠。物换星移几度秋了
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
7楼#
发布于:2015-07-20 13:15
找错了文件应该是,调用就找错了。在去找找试试。。
闲云潭影日悠悠。物换星移几度秋了
pingfan5888
小狐狸
小狐狸
  • UID50491
  • 注册日期2015-07-15
  • 最后登录2015-11-18
  • 发帖数20
  • 经验30枚
  • 威望0点
  • 贡献值24点
  • 好评度1点
  • 社区居民
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
闲云潭影日悠悠。物换星移几度秋了
游客

返回顶部