|
阅读:3487回复: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 |
|
|