3

这是我第一次尝试 JavaScript,如果看起来有点粗糙,请原谅。

该网站http://www.keepvid.com/提供了一个带有 JavaScript 的书签,允许您通过在媒体页面上单击它来从 YouTube 和其他媒体网站下载视频。但是,我发现不是在新选项卡中打开下载页面,而是在当前选项卡中打开它,中断了媒体(可能是为了鼓励你购买他们的专业版)。

将其视为尝试 JavaScript 的机会(因为我之前只使用过小书签),我一直在寻找答案,但我发现的答案似乎只适用于旧版本的网站,因为 JavaScript 似乎已更新。

我一直在尝试制作一个打开新页面的书签,然后加载媒体的下载页面。

我作为解决方案遇到的第一个代码是:javascript:void(window.open('http://keepvid.com/?url='+escape(window.location)));

但这不起作用,当我注意到书签的最终 URL 添加&bm=y到 URL 的末尾时,我将其编辑为:
javascript:void(window.open('http://keepvid.com/?url='+escape(window.location)+'&bm=y'));

然后我查看了书签的原始代码::
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

如果这是不可能的,他们是否可以在工具箱中创建一个小书签来复制原始页面,然后指向包含重定向到下载页面的书签菜单中的小书签?

4

3 回答 3

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));
于 2012-04-29T12:14:43.350 回答
3

这个问题有点老了,但是我在新标签页中打开 dict.cc 的小书签非常适合问题标题。

javascript:(function(){window.open("http://www.dict.cc/?s="+encodeURIComponent(prompt("Enter word to look for:")))})();

我不确定包装函数的作用,但没有它,当前选项卡将被清除。

来源:https ://www.mattcutts.com/blog/javascript-bookmarklet-basics/

于 2015-01-25T16:51:12.890 回答
0

作为解决方案,我遇到的第一个代码是: javascript:void(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')";
于 2012-04-28T12:18:15.807 回答