// ==UserScript== // @name nico user video search link // @namespace us0305 // @include http://www.nicovideo.jp/user/* // @version 0.0.0.1 // @grant none // ==/UserScript== (function () { var patURI = 'nicovideo'; var repURI = 'nicochart'; var tergetID = 'watchRegisterBtn'; var ElmAnc = document.createElement('a'); var AddBase = document.getElementById(tergetID); if (AddBase) { ElmAnc.text = '◆ユーザーIDで動画を検索する(nico chart)'; ElmAnc.id = 'openNicoChart'; ElmAnc.href = location.href.replace(patURI, repURI).replace(/\?.*$/,''); AddBase.parentNode.insertBefore(ElmAnc, AddBase.nextSibling); } })();
リンクをすっきりした別窓で開くやつ グリモン
WEBコミック等をよく見るけど
リンクを新しいタブで開く設定になっているときに
ツールバーやアドオンのせいでページの高さが窮屈になることが多いので
新しくツールバー等を取り去ったウィンドウを開くスクリプトを書いてみる
リンクはa(アンカー)タグを使っている場合、限定。
// ==UserScript== // @name リンクをすっきりした別窓で開くやつ // @namespace http://honjarake.hatenablog.jp/ // @include !ここに適応するurl!例:http://comic-walker.com/contents/detail/* // @version 0.0.1 // @grant none // ==/UserScript== $("a[href*='/viewer']").click(function (e) { e.preventDefault(); window.open($(this).attr('href'), 'comic_viewer', 'fullscreen=1, menubar=no, toolbar=no, scrollbars=yes'); });
jqueryなので、簡素な作り
$("a[href*='/viewer']").click
↑aタグのhrefに/viewer(別窓で開くリンクを限定する為のキーワード)を含むリンクをクリックした場合
e.preventDefault();
↑aタグ本来のイベントをキャンセルして
window.open($(this).attr('href'), 'comic_viewer', 'fullscreen=1, menubar=no, toolbar=no, scrollbars=yes');
↑フルスクリーンでメニューバー・ツールバーなしのウィンドウを開く
Javascriptあれこれ - Javascriptでのクラス?
月日が経つのは早い
ここ数ヶ月、たまに自分で書いたスクリプトのソースコードを見つつ
これからどうやって書いていこうかなと思って放置していた
いくつか気になる記事があったので、記録しておく
- newを封印して、JavaScriptでオブジェクト指向する(1) - 泥のように
- や...やっと理解できた!JavaScriptのプロトタイプチェーン - maeharinの日記
- JavaScriptはいかにしてprototypeを捨てクラスベース継承を得るのか - なんたらノート第三期ベータ
調べていると、prototypeの記述を良く見かける
相変わらず、基本的なことがわかってない状態だけど…
現状、greasemonkey用のコードしか書かないとはいえ
publicで書いていて他のスクリプトの変数・関数名と衝突することがあるのかとか
色々と気になってはいるけど、unsafeWindow等使わなければ、この場合は問題起こらないのかな
データベース設計で言うなら、第一正規化に入ったぐらいどころか
そもそも非正規形状の項目の把握があやふやな段階のなのかもしれない
ニコニコ動画概要から動画リンクだけ抽出して表示するスクリプト
ノートPC買おう…
前回のスクリプトと同時進行で作っていたモノ(暫定
これからの課題
- windowのresize(拡大縮小を交互に速めに行う)で動画プレイヤーが右にずれていく問題
- 現時点で、ブラウザの全画面表示、サイズ変更でリセットされるのを確認
最悪、ツールチップやメッセージでその旨を表示して対応
- 現時点で、ブラウザの全画面表示、サイズ変更でリセットされるのを確認
- 疑似クラス化
- 今は困難。一個、一から作って試す必要あり。
- 次の動画、前の動画の表示が実際のpart数と異なるパターンが存在する
- 動画が修正版や再アップの場合は正確に取得できない('/watch/sm数字'の数字部分の大小だけで表示する動画を決定している為)
動画説明の動画すべて載せるように修正した方が早い
- 動画が修正版や再アップの場合は正確に取得できない('/watch/sm数字'の数字部分の大小だけで表示する動画を決定している為)
以下、ソースコード
ウィンドウサイズを変えたとき
[jQuery] ウインドウのリサイズ操作が終わった時にだけ処理を実行する | CreativeStyle
この前、$(window).resize に body内に追加した要素のtopを変更する処理を追加したら画面が大幅に崩れたんだけど
ついでにこれを入れてみようと思う
top位置変えてるだけなんだけどなあ
もしかしたら、サイトのcssの問題かもしれないのでそっちも調査
ソースあったのではっつけ
var resizeDisp = (function () { try { $(window).resize(function () { var list = document.getElementById('scroll_parts'); var wih = window.innerHeight - (list.clientHeight + 30); list.style.top = wih + 'px'; }); } catch (e) { console.log('resizeDisp:' + e); } }) ();
↓こんな感じか
var resizeDisp = (function () { try { var timer = false; $(window).resize(function () { if (timer !== false) { clearTimeout(timer); } timer = setTimeout(function () { var list = document.getElementById('scroll_parts'); var wih = window.innerHeight - (list.clientHeight + 30); list.style.top = wih + 'px'; }, 200); }); } catch (e) { console.log('resizeDisp:' + e); } }) ();
iframe.contentDocument.location.replace
インラインフレーム(iframe)の参照(src)を書き換えるとブラウザの履歴に残る
iframe.src = url;
同じページ内のiframeにサムネを表示するスクリプトを作ったときに発覚
(iframe表示しているページが履歴に何個も残っていた)
解決方法
iframeのlocationをreplaceで変更する
【(location.replace(replace_path)でページ移動すると実行したページが履歴に残らない】
$('#N2GNV_list a').hover(function () { var iframe = document.getElementById('target'); var src = 'http://target.co.jp/' + tail; //履歴残さない iframe.contentDocument.location.replace(src); } samne.style.display = 'block'; }, function () { samne.style.display = 'none'; } );
だが、しかし!
これだとhover一回目は正常に処理されるのに、hover二回目にエラーが発生してしまった
エラー:「iframe.contentDocument が null」
…なんでだ?
(ちなみにこのとき、iframe 自体は null じゃありませんでした)
どういうこと?
解決方法
$('#N2GNV_list a').hover(function () { var iframe = document.getElementById('target'); <~省略~> if (iframe.contentDocument == null) { var iframed = (iframe.contentWindow || iframe.contentDocument); iframed.location.replace(src); } else { iframe.contentDocument.location.replace(src); } samne.style.display = 'block'; }, function () { samne.style.display = 'none'; } );
※if文はデバッグの名残
var iframed = (iframe.contentWindow || iframe.contentDocument);
iframed.location.replace(src);
こうすれば問題なく動いたがよくわからない
追記
本来はクロスブラウザ用の対策なんだと思う…
関係ありそうなページ?
local MDC: chrome コードでウィンドウを取り扱う (/ja/working_with_windows_in_chrome_code)
そのドキュメントには browser.contentDocument を、そのドキュメントの Window オブジェクトには browser.contentWindow を使ってアクセスできます。
二回目のresizeではドキュメントを参照できず、ウィンドウオブジェクトを参照しないといけないのか?
※環境:firefox 32.0 greasemonkey2.2