JScriptではてなアンテナリダイレクト失敗を何とかする
このあいだのはてなアンテナは調子が悪かった!
アンテナの表示が遅いこともあったけど、
http://a.hatena.ne.jp/go?ほにゃらら
からまったくリダイレクトされないこともあったり!
ということで、
趣味のJScriptで
http://a.hatena.ne.jp/go?ほにゃらら
のリダイレクトに失敗したブラウザ上のアドレスを強引に
ほにゃらら
にしてしまおう!おう!
//void delayedSendKeys(キーストロークの配列) //アクティブなウィンドウにキーストロークを送信する // //配列の1要素をキーストローク送信するごとに、時間を空ける。 //キーストロークのアプリケーションでの処理を確実に行うようにする措置。 var delayedSendKeys = function(astrKeys) { var oSh = new ActiveXObject("WScript.Shell"); var l = astrKeys.length; for (var i = 0; i < l; i++) { oSh.SendKeys(astrKeys[i]); WScript.Sleep(100); } return; } //String getClipString(void) //クリップボードのテキストを文字列で返す。 // //InternetExplorerアプリを生成するやり方は嫌だったので、 //メモ帳に張り付けて一時ファイル保存し読み込んでいる。 //IEでクリップボードを操作することに気持ち悪さを感じる。 //パスワードをコピーした状態で悪意のサイトを開いたらパスワード送信されてしまうがな。 //だからIEは使わないでみた(意味不明)。かなりぱたぱたうごく。 var getClipString = function() { var oSh = new ActiveXObject("WScript.Shell"); var oFS = new ActiveXObject("Scripting.FileSystemObject"); var strTemp = oFS.GetDriveName(oFS.GetSpecialFolder(2)) + "\\" + oFS.GetTempName() + ".txt"; oSh.Run("notepad.exe"); while (oSh.AppActivate("無題")==false) { WScript.Sleep(100); } delayedSendKeys(["^v","%f","a","%n",strTemp,"{ENTER}","%f","x"]); while (oFS.FileExists(strTemp)!=true) { WScript.Sleep(100); } var oTS = oFS.OpenTextFile(strTemp); var strRet = oTS.ReadAll(); oTS.close(); while (oFS.FileExists(strTemp)!=true) { WScript.Sleep(100); } oFS.DeleteFile(strTemp); return strRet; } //void setClipString(String) //クリップボードに文字列をセットする。 // //上と同様、InternetExplorerアプリを生成するやり方でなく、 //一時ファイルに保存してメモ帳で開きコピーしている。 //これもぱたぱたうごく。 var setClipString = function(strArg) { var oSh = new ActiveXObject("WScript.Shell"); var oFS = new ActiveXObject("Scripting.FileSystemObject"); var strTempBase = oFS.GetTempName(); var strTemp = oFS.GetDriveName(oFS.GetSpecialFolder(2)) + "\\" + strTempBase + ".txt"; var oTS = oFS.CreateTextFile(strTemp); oTS.Write(strArg); oTS.close(); while (oFS.FileExists(strTemp)!=true) { WScript.Sleep(100); } oSh.Run("notepad.exe "+ strTemp); while (oSh.AppActivate(strTempBase)==false) { WScript.Sleep(100); } delayedSendKeys(["^a","^c","%f","x"]); oFS.DeleteFile(strTemp); return; } //ここまで昨日と同じ //はてなアンテナリダイレクトURL除去をしてみる //String removeHatenaRedirect(String) //引数:"http://a.hatena.ne.jp/go?http://d.hatena.ne.jp/xxxxx/p2" とかなんとか //返値:"http://d.hatena.ne.jp/xxxxx" var removeHatenaRedirect = function(strBefore) { var strAfter = strBefore.split("?")[1]; var astrAfter = strAfter.split("/"); astrAfter.pop(); strAfter = astrAfter.join("/"); return strAfter; } var oSh = new ActiveXObject("WScript.Shell"); //リダイレクト失敗したウィンドウをアクティベイト oSh.AppActivate("http://a.hatena"); WScript.Sleep(100); //URLをクリップボードにコピー delayedSendKeys(["%d","^c"]); WScript.Sleep(100); //クリップボードから取り出す var strBefore = getClipString(); //a.hatena.ne.jp/go?なんかを取り除く strAfter = removeHatenaRedirect(strBefore); //取り除いたURLをクリップボードにセット setClipString(strAfter); //もう一度ブラウザをアクティベイト oSh.AppActivate("http://a.hatena"); WScript.Sleep(100); //URLをクリップボードからペースト delayedSendKeys(["%d","^v","{ENTER}"]);
やりたかったことはこのスクリプトの一部でしたが、クリップボードをJScriptで直接扱えなかったので、
なんかいきり立ってしまいました!