aachyeeのブログ

備忘録的メモ。主にIT(プログラミング、電子工作)、DIY、アウトドアネタ。詳細はaboutを。

X-Frame-Optionsによるページ内フレームの制限を回避して一定間隔でリロードするBookmarklet

はじめに書いておきますが、このページはX-Frame-Options制限を回避してクリックジャッキングを可能にするものではありません。X-Frame-Options制限がかかったページでBookmarkletからフレームを操作して一定間隔でページのリロードを行うものです。
また、ここで紹介するリロードするBookmarkletはリロードに時間がかるので同様の機能を持ったアドオンの利用をおすすめします。
試行錯誤の末、以下のような奇っ怪なBookmarkletになりました。1時間の間、1分おきにリロードします。おそらくFirefoxでしか動きません。

javascript:(function(){I=60,T=3600,M=T/I;D=document;D.write('<html><script>C='+M+';X=new%20XMLHttpRequest();X.onreadystatechange=function(){if(X.readyState==4&&(X.status==200||X.status==304)){G=frames[1].document;G.open();G.write(X.responseText);G.close()};};function%20R(){X.open("GET",location,false);X.send();X.abort();if(C<=0)clearInterval(T);F=frames[0].document;F.open();F.write("<html><body%20style=\\"margin:0;\\">Auto%20reload%20at%20'+I+'%20seconds%20interval.%20"+(C--)+"%20times%20left.</body></html>");F.close();};T=setInterval("R()",'+I*1000+');setTimeout("R()",50);</script><frameset%20rows="20,*"><frame><frame></frameset></html>');D.close();})();

 


ページの文字コードUTF-8でない場合は文字化けするので以下ようにしてみて下さい。

javascript:(function(){I=60,T=3600,M=T/I;D=document;D.write('<html><script>C='+M+';X=new%20XMLHttpRequest();X.overrideMimeType("text/html;%20charset='+document.characterSet+'");X.onreadystatechange=function(){if(X.readyState==4&&(X.status==200||X.status==304)){G=frames[1].document;G.open();G.write(X.responseText);G.close()};};function%20R(){X.open("GET",location,false);X.send();X.abort();if(C<=0)clearInterval(T);F=frames[0].document;F.open();F.write("<html><body%20style=\\"margin:0;\\">Auto%20reload%20at%20'+I+'%20seconds%20interval.%20"+(C--)+"%20times%20left.</body></html>");F.close();};T=setInterval("R()",'+I*1000+');setTimeout("R()",50);</script><frameset%20rows="20,*"><frame><frame></frameset></html>');D.close();})();

以上、あくまでお遊び&実験です。実用にはなりません。