2012-04-28 2 views
2

Это мой первый раз, снимая JavaScript, поэтому извините меня, если это кажется немного грубым.Как запустить функцию на новой вкладке с помощью букмарклета?

Этот веб-сайт http://www.keepvid.com/ предоставляет закладку с помощью JavaScript, которая позволяет загружать видео с YouTube и других медиа-сайтов, нажимая на него, когда на странице мультимедиа. Однако я обнаружил, что вместо того, чтобы открывать страницу загрузки на новой вкладке, она открывается в текущем, прерывая медиа (возможно, чтобы побудить вас купить их версию pro).

Увидев это как возможность опробовать 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

Если это невозможно сделать, это их способ иметь букмарклет в панели инструментов, который делает копию исходной страницы, а затем указывает на ab ookmarklet в меню закладок, которое содержит перенаправление на страницу загрузки?

+0

Не имеет техническое решение для вас, но, насколько лучше букмарклета для скачивания видео, вы можете проверить это: http://deturl.com/bookmarklet-to -directly-download-videos-from-youtube.asp –

+0

Еще один комментарий. Ваш первый букмарклер работал для меня, когда я тестировал на YouTube с помощью Firefox. Обратите внимание, что в Firefox вы не можете вставить код букмарклета в URL-адрес для проверки того, как вы могли это сделать. Сначала вы должны ввести его в фактическую закладку. В Chrome вы можете сделать это, только если вручную введите «javascript:». Если вы попытаетесь вставить код букмарклета, часть «javascript:» будет удалена. –

+0

Прежде всего, я только что проверил ссылку, которую вы мне дали, и это похоже на очень хороший букмарклет для загрузки видео на YouTube. Но на данный момент я действительно хочу решить эту проблему, чтобы посмотреть, что я могу сделать с JavaScript. Во-вторых, просто чтобы уточнить, всякий раз, когда я редактировал JavaScript, я бы вставлял его в закладку, а не в URL. И о первом рабочем закладе, я брошу вам сравнение изображений, которое я дал «mplungjan». [(Изображение KeepVid Code)] (http://i.imgur.com/77g5f.png) | [(Изображение моего кода)] (http://i.imgur.com/GuxYo.png). Обратите внимание на разницу в списке загрузок? – Ylj

ответ

3

Скопируйте этот текст: 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)); 
+0

Спасибо, код букмарклета, который вы предоставили, отлично работает. Тем не менее, поскольку для меня больше всего полезно узнать, как работает JavaScript, не могли бы вы объяснить, как вы могли сжать код в букмарклет? – Ylj

+0

Используя ссылку, которую я дал. Я заметил, что одна точка с запятой была одна. –

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')"; 
+0

Код, который я использовал, открыл новую вкладку и загрузил страницу загрузки: (keepvid.com/?url=http%3A//www.youtube.com/...). Однако этот метод не показывал доступные загрузки на загруженной странице. Буклетк из KeepVid.com загрузил страницу загрузки, а затем отобразил список доступных загрузок на выбор (относительно качества видео). Вот сравнение изображений, чтобы сделать его более понятным.[(Изображение KeepVid Code)] (http://i.imgur.com/77g5f.png) | [(Изображение моего кода)] (http://i.imgur.com/GuxYo.png) Обратите внимание на тот же URL-адрес с разными результатами. – Ylj

+0

Ах, я не понимал, что вы на самом деле должны использовать Keepvid, а не использовать свои собственные. - это может быть по многим причинам. Возможно, какой-то параметр был установлен в первом скрипте, который вы не поймали. Мне уже слишком поздно смотреть - возможно, вы можете сказать мне, какой конечный результат вы ищете? Обратное проектирование или что? – mplungjan

+0

Это просто практика для меня, чтобы познакомиться с JavaScript. Результат, который я ищу, заключается в том, чтобы функция запускалась на новой вкладке, которая создается вместо первой вкладки, в которую была запущена закладка. Итак, если я разместил «Script 1» на сервере, дал ему команды для открытия дублированную вкладку, а затем завершить ее и загрузить «Script 2», который будет содержать код KeepVid, загрузит ли она страницу загрузки во вторую вкладку вместо первой, так как она была запущена на второй вкладке? Так будет ли эта работа - Tab 1 загружает Script 1; Сценарий 1 создает вкладку 2; Вкладка 2 загружает Script 2; Сценарий 2 загрузки Скачать страницу – Ylj

0

Этот вопрос немного старый, но мой маленький букмарклет, чтобы открыть 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/