这是我第一次尝试使用JavaScript,请原谅我是否有点粗糙。
此网站http://www.keepvid.com/提供了一个包含JavaScript的书签,您可以通过在媒体页面上点击该视频,从YouTube和其他媒体网站下载视频。但是,我发现不是在新选项卡中打开下载页面,而是在当前打开它,打断媒体(可能是为了鼓励您购买他们的专业版)。
将其视为尝试使用JavaScript的机会(因为之前我只使用过bookmarklet),我一直在寻找答案,但我发现的答案似乎只适用于旧版本的网站,因为JavaScript似乎更新。
我一直在尝试创建一个打开新页面的书签,然后加载媒体的下载页面。
我遇到的第一个代码是:javascript:void(window.open('http://keepvid.com/?url='+escape(window.location)));
但这不起作用,当我注意到bookmarklet的最终URL将&bm=y
添加到URL的末尾时,我将其编辑为:
javascript:void(window.open('http://keepvid.com/?url='+escape(window.location)+'&bm=y'));
然后我查看了bookmarklet的原始代码::
javascript:
(a%20=%20(b%20=%20document).createElement('script')).src%20=%20'http://keepvid.com/js/bm.js',%20b.body.appendChild(a);void(0);
并意识到它正在调用外部脚本(我相信)并且它必须保持原样。
从他们那里我一直在尝试各种方法来实现这一点,到目前为止,这就是我所拥有的:
javascript:void(window.open(window.location));void((a%20=%20(b%20=%20document).createElement('script')).src%20=%20'http://keepvid.com/js/bm.js',%20b.body.appendChild(a));
此脚本会打开一个新标签页,但新标签页只会是YouTube视频的副本,原始标签页会加载下载页面,该页面仍会中断媒体,如果稍微方便一点,我的作品也会无用。
我一直在尝试各种方式,但似乎我不能在同一个书签中有第二个脚本而不指向它所调用的原始标签。
所以,我一直想知道我需要做什么才能: 1.创建一个新选项卡 2.让新标签加载下载页面(而不是原始标签) 3.单独保留原始选项卡,仅使用它来捕获window.location
如果这是不可能的,那么他们是否可以在工具箱中创建一个书签,制作原始页面的副本,然后指向包含重定向到下载页面的书签菜单中的书签?
答案 0 :(得分:4)
复制此文字:http://keepvid.com/js/bm.js
更改
<form method='post'
到
<form method='post' target='_blank'
您可以在自己的服务器上托管该文件,并以与原始书签相同的方式附加脚本,或者您可以将代码压缩为这样的独立书签
javascript:eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return%20r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new%20RegExp('\\b'+e(c)+'\\b','g'),k[c]);return%20p}('o%20i(a,b,c){N{7%20u=a.v(b);7%20w=u[1].v(c);x%20w[0]}O(P){x\'\'}}o%20p(){7%20q=d.Q("R");q.9="<z%20S=\'T\'%20U=\'V\'%20W=\'r://A.g/?B="+C(h.j)+"&X=y\'%20Y=\'D\'><k%20l=\'s\'%20t=\'Z\'%20m=\'"+8+"\'%20/><k%20l=\'s\'%20t=\'2\'%20m=\'"+2+"\'%20/><k%20l=\'s\'%20t=\'5\'%20m=\'"+5+"\'%20/><k%2010=\'11-12-E%20F-G-13%20F-G-14\'%20l=\'H\'%20m=\'15%2016%2017\'%20/></z>";d.e.19(q);h.1a["D"].H()}7%20d=h;6(d.j.I.1b(/J.g/i)){7%208=i(d.e.9,\';8=\',\'&\');6(8==\'\')8=i(d.e.9,\'"8":%20"\',\'"\');7%202=i(d.e.9,\'2"%201c="\',\'"\');6(2==\'\')2=i(d.e.9,\'1d"%202="\',\'"\');7%205=i(d.e.9,\'n=\',\'&\');6(5==\'\')5=i(3.f,\'n":%20"\',\'"\').K("\\\\/","/");6(5==\'\'){7%203=1e;6(!3&&1f%20L!=\'1g\'){3=E%20L()}3.1h("1i","r://1j.J.g/1k?8="+8+"&5=18",1l);3.1m=o(){6(3.1n==4){2=i(3.f,\'&2=\',\'&\');6(2==\'\')2=i(3.f,\'2=\',\'&\');5=i(3.f,\'n=\',\'&\');6(5==\'\')5=i(3.f,\'n":%20"\',\'"\').K("\\\\/","/");p()}};3.1o()}M{p()}}M{h.j.I=\'r://A.g/?B=\'+C(1p.j)}',62,88,'||title|kvajax||fmt|if|var|video_id|innerHTML|||||body|responseText|com|document||location|input|type|value|fmt_stream_map|function|finishkv|gd|http|hidden|name|a1|split|a2|return||form|keepvid|url|escape|kvdl|new|yt|uix|submit|href|youtube|replace|XMLHttpRequest|else|try|catch|err|createElement|div|method|post|target|blank|action|bm|id|vid|class|master|sprite|button|tooltip|Download|with|KeepVid||appendChild|forms|match|content|ltr|false|typeof|undefined|open|GET|www|get_video_info|true|onreadystatechange|readyState|send|window'.split('|'),0,{}))
我用它打包了它:http://javascriptcompressor.com/
以相同方式处理非YouTube网站,也请更改
document.location.href='http://keepvid.com/?url='+escape(window.location);
到
window.open('http://keepvid.com/?url='+escape(window.location));
答案 1 :(得分:2)
这个问题有点旧,但我在新标签中打开dict.cc的小书签非常适合问题标题。
javascript:(function(){window.open("http://www.dict.cc/?s="+encodeURIComponent(prompt("Enter word to look for:")))})();
我不确定包装器功能是做什么的,但没有它,当前选项卡将被清除。
Src:https://www.mattcutts.com/blog/javascript-bookmarklet-basics/
答案 2 :(得分:0)
我作为解决方案遇到的第一个代码是: 的javascript:无效(window.open('http://keepvid.com/?url='+escape(window.location的)));
但这不起作用
没有以什么方式工作?如果浏览器阻止弹出窗口,则不会成功。 如果没有,该方法应该有效。
这是一种可能的其他方法 - 仍然无法保证更好地工作
您需要在服务器上存储脚本。 使用
将脚本加载到当前窗口中(function() {var scr=document.createElement('script');scr.src='http://www.yourserver.com/yourserverprocess.php?loc=escape(window.location.href;document.getElementByTagname('head')[0].appendChild(scr); })();
然后在你的服务器上你可以返回(假设php)
header("content-type: text/javascript");
echo "window.open('http://yourserver.com/convert.php?loc=".$_GET["loc"],'_blank')";