ãã³ãã³åç»ã£ã¦ãã¦ãã¼ãåºæ¥ãã®ã
UserScriptã使ãã°ãªã£!å°å³ã«ã¯ãã¹ãã¡ã¤ã³ãªæãã ã£ãã®ã§、window.postMessageã使ã£ã¦è²ã ãã£ã¦ã¿ã¾ãã。
å ãã¿ã¯、ãã³ãã³åç»ããã¦ã³ãã¼ãã§ããããã«ãªãGreasemonkeyã¹ã¯ãªããã®Operaç(管ç人æ¥è¨) - ãã ãã.jpã ã£ãã®ã§ãã、postMessageãã¼ã¹ã«ãªã£ã¦ãã¾ã£ãã®ã§、ã¾ãã¾ãæ¸ãæããã¤ã¡ã¼ã¸ã§ã(ç¬)
æ¥ä»ãè¦ãã¨、ï¼å¹´ãåã®ãã¿ãªã®ãã¼。ããã、åãã¯ãããªã(ç¬)
ã©ã¤ã»ã³ã¹ã¯ãã¤ãã©ãã、public domainã«ãã¾ã。
Safari㯅…åããã¾ãã(ç¬)
UserScriptãåããªãã°æã㯅…。
8/28追è¨
== 追è¨ãããã ==
確èªããæ、Operaã§ããåãã¾ããã§ãã……orz
ãã³å ¥ããã¾ã。
== 追è¨ããã¾ã§ ==
ããã¯ãã¼ã¯ã¬ããã§ã¯çµ¶å¯¾åãã¾ããã®ã§、ãªãã¨ããã¦ãããã¨ãæããªãã§ãã ããï½
UserScript.org
nicovideo down for Greasemonkeyhttp://userscripts.org/scripts/show/84552
Firefoxãªäººãã³ããé¢åã¨ãã人ã¯↑ãã©ãã
ã½ã¼ã¹ã³ã¼ã
ã½ã¼ã¹ã³ã¼ãã¯ä¸è¨ã®éã8/28追è¨
以ä¸ã®ã³ã¼ãã¯、ä¸å ·åãããã¾ãã®ã§、使ããªãã§ãã ãã。
ææ°çã®ã½ã¼ã¹ã¯UserScript.orgã«ã¢ãããã¦ããã¾ãã®ã§、ãã¡ãããå©ç¨ä¸ãã。
// ==UserScript== // @name nicovideo down // @namespace http://looxu.blogspot.com/ // @include http://flapi.nicovideo.jp/* // @include http://www.nicovideo.jp/watch/* // @author ArcCosine // @version 1.0 // ==/UserScript== (function(){ if( location.href.indexOf('www.nicovideo') > 0 ){ document.addEventListener('DOMContentLoaded', function(){ var video_id = ''; if(/watch\/([^/]+)$/.test(location.href)){ video_id = RegExp.$1; } var obj = document.createElement('iframe'); obj.src = 'http://flapi.nicovideo.jp/api/getflv?v='+video_id; obj.style.display = 'none'; obj.addEventListener('load',function(){ obj.contentWindow.postMessage('dummy','*'); }, false ); //post to client document.body.appendChild(obj); window.addEventListener('message',function(e){ if(e.origin !== 'http://flapi.nicovideo.jp' ) return; var text = e.data; if( /url=(.+?)&/.test(text) ){ var h1 = document.getElementsByTagName('h1')[0]; var aTag= document.createElement('a'); aTag.href = decodeURIComponent(RegExp.$1); aTag.target = '_blank'; aTag.style.marginLeft = '5px'; aTag.appendChild(document.createTextNode('[download]')); h1.parentNode.insertBefore(aTag,h1); } },false ); }, false ); }else if( location.href.indexOf('flapi') > 0 ){ window.addEventListener('message', function(e){ if(e.origin !== 'http://www.nicovideo.jp' ) return; var video_id = ''; if(/v=(.*)/.test(location.search)){ video_id = RegExp.$1; } var text = document.body.textContent; e.source.postMessage(text,'*'); //post to parent window }, false ); } })();
ããã§ã¯è¯ããã³ãã³åç»ã©ã¤ãããã·
Opera10.70Build9034、WindowsXPsp3
è¿ä¿¡åé¤(æ··éä¸ã«ããä½ç»è³ªã¢ã¼ãåç)
ãã³ãã³åç»ç¨ãã¦ã³ãã¼ãã¹ã¯ãªãããä½ã£ã¦ããã ãã¾ãã¦èª ã«ãããã¨ããããã¾ã
ãã£ãã試ãã¦ã¿ãã®ã§ãã、大å¤ç³ãè¾ãã®ã§ãã、å½ç°å¢ã§ã¯åä½ãããã¾ããã§ãã
ä¸å¿ã®ãå ±åã¾ã§ã«ãããããé¡ããããã¾ã
å¿åãã、ã³ã¡ã³ããããã¨ããããã¾ã。
è¿ä¿¡åé¤åä½ããªãã£ãç¶æ³ã¨ãæ¡ä»¶ãããããªãã®ã§ä½ã¨ãè¨ãã¾ããã、ã¨ã©ã¼ã³ã³ã½ã¼ã«çãè¦ã¦、ã¨ã©ã¼ã³ã¼ãã確èªãããªãã°、ä¿®æ£åºæ¥ãã¨æãã¾ã。
ãå ±åãããã¨ããããã¾ãã。
æªæ¤è¨¼ã§ãã、ã³ã¼ããã¿ã¦æãããã¨ã…。
è¿ä¿¡åé¤・HTMLIframeElement.contentWindow ãåç §ã§ããåä½ã Opera-UserJS ã®ç¹æ¨©ãã。
Webä¸ã«ãããJavaScriptã§ã¯ã¯ãã¹ãã¡ã¤ã³ãª HTMLIframeElement.contentWindow ã«ã¯ã¢ã¯ã»ã¹ã§ãã¾ãã。
ã§ãã®ã§、Opera以å¤ã§ HTMLIframeElement.contentWindow ã«ã¢ã¯ã»ã¹å¯è½ãã©ããã確èªããã¨ããã¨æãã¾ã。
# ã¶ã£ã¡ãã、contentWindow ãå¾ããã¦ããæç¹ã§ window.postMessage ãç¨æ¸ã¿ã«ãªã£ã¦ããæ°ããããã§ãã、æ°ã®ããã§ãããã…。
> obj.addEventListener('load',function(){ obj.contentWindow.postMessage('dummy','*'); }, false ); //post to client
ãã®ã³ã¼ãã§åä½ãã¦ãã¾ãã®ãä½ããããã…ãããª。
é常、window.postMessage ãçºè¡ããå ´åã¯、å¤é¨ãµã¼ãã«ãã®ã³ã¼ããç½®ãã¾ãã®ã§åãä»çµã¿ã«ããªããã°ãªããªãããããªãããªã¨。
ã¤ã¡ã¼ã¸ã¨ãã¦ã¯、ä¸è¨ã³ã¼ãã®ãããªæãã§ã。(å®éã«è©¦ãã¦ã¾ããã、ã¤ã¡ã¼ã¸ã ãã§ã)
---
var doc = document,
iframe = doc.createElement('iframe'),
iframeDoc = iframe.contentDocument,
script = iframeDoc.createElement('script');
iframe.src = 'http://flapi.nicovideo.jp/api/getflv?v=' + video_id;
script.appendChild(doc.createTextNode("window.postMessage('dummy', '*');")); // window.postMessage ãªã³ã¼ããæ¿å ¥ãã
iframeDoc.appendChild(script); // scriptã HTMLIframeElement.contentDocument ã«æ¿å ¥ãã
addEventListener('message', function(event) {
if(event.origin !== 'http://www.nicovideo.jp:80' ) return;
// ã¡ãã»ã¼ã¸ãåãåã
}, false);
---
Opera ã§åããå ´åã以ä¸ã®2ã¤ã®ç¹ã注æããªããã°ãªããªãããã§ã。
è¿ä¿¡åé¤・æ¡å¼µå㯠.user.js ã§ã¯ãªã、.js ã使ã(DOMContentLoadedå¨ã)
・ãã³ãã³åç»ã®「詳細æ å ±・ã¡ãã¥ã¼」ã表示ãã
ã㨠contentWindow ãåç §ã§ãããªã postMessage ã¯ãããªãã¨ãã話ã¯
http://d.hatena.ne.jp/edvakf/20081117/1226955208
ãè¦ãéã、contentWindow.postMessage ã®å ´åã ã
ã¨ã©ã¼ã«ãªããªãã¿ããã§ã(æªç¢ºèª)
åèã¾ã§。
>thinkãã
è¿ä¿¡åé¤ã³ã¡ã³ããããã¨ããããã¾ã。
è²ã 試ããã®ã§ãã、
contentDocumentã«ã¯æ®å¿µãªããã¢ã¯ã»ã¹ãããã¨ãåºæ¥ã¾ããã§ãã……。
mallowlabsããããªã³ã¯ãæãã¦ãã、ãã¡ãã®è¨äºãåèã«ãã¦ãã ãã。(ãåç¥ããããã¾ããã)
ã¯ãã¹ãã¡ã¤ã³ãªiframeã®contentWindowã«ã¢ã¯ã»ã¹ã§ããªã (Opera) →ã¨ããã®ã¯ä¸é¨èª¤ãã§ãã - by edvakf in hatena
http://d.hatena.ne.jp/edvakf/20081117/1226955208
>mallowlabsãã
ã³ã¡ã³ããããã¨ããããã¾ã。
確ãã«、DOMContentLoadedã¯、user.jsã§ã¯åºãªãã§ããã。
ãã¨、詳細æ å ±・ã¡ãã¥ã¼ã表示ããªãã¨é§ç®ã£ã¦ã®ã¯é©ãã§ã。ã¡ãã£ã¨ãã¨ã§å¯¾å¿ãããã¨æãã¾ã。
Arc Cosine ããè¿ä¿¡ãããã¨ããããã¾ã。
è¿ä¿¡åé¤ãããããã£ã¦ããã¡ã«downloadãªã³ã¯ãåºãããã«ãªãã¾ãã
ãªã³ã¯ã®åºãåç»ã¨åºãªãåç»ãããããã§ã
ãã¼ã¸ã®èªã¿è¾¼ã¿ãå®äºããã¾ã§ã¯å½ç¶ãªã³ã¯ã¯åºã¦ãã¾ãã
ã©ãããé¨ãããã¾ããm(_ _)m
>å¿åãã
è¿ä¿¡åé¤ã³ã¡ã³ããããã¨ããããã¾ã。
åãå¹¾ã¤ããªã³ã¯ã®ã§ãªãåç»ãè¦ã¾ããã、ã©ããããã¿ã¼ã³ãè¦åããããªãã®ã§、ä»å¾æ°ã¥ãããä¿®æ£ãããã¨æãã¾ã。
8å²ãããã¯ã«ãã¼åºæ¥ã¦ãã¨æããã§ããã©ã……。
ç²¾é²ãã¾ã。