javascript - 如何使用小书签在新选项卡中启动功能?

标签 javascript function firefox tabs bookmarklet

这是我第一次接触 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.保留原来的tab,只用它来捕捉window.location

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

最佳答案

复制此文本: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));

关于javascript - 如何使用小书签在新选项卡中启动功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362659/

相关文章:

javascript - 如何在组件中将 ".json"文件显示为文本,以便可以复制和粘贴?

javascript - 修复不正确的嵌套

javascript - XULRunner 忽略已编辑文件的更新

javascript - jQuery .data() 火狐浏览器

html - Firefox 中宽度和边距的不同行为

javascript - 切换 - 隐藏和显示

javascript - 为什么 Math.pow(1, Infinity) 返回 NaN?

javascript - 为什么在 React Hooks 中排序后数组不更新?

jQuery - 停止函数

c++ - C++ 中的引用函数