Chrome クリックすると勝手にリンクに飛ばされるやつをなんとかする

FUMILOG ブログ

最近、特定のサイトを見てると、クリックすると勝手にリンクに飛ばされる感じになることがあります。

例を挙げると、KissAnime。英語字幕でアニメが見れるサイトで、僕のお気に入り。

新規タブにてサイト訪問した場合や、しばらく時間をおいてクリックした際に、別の関係ないサイトに飛ばされ、いわゆるフィッシングとか、Googleのラッキーユーザーに当選したとか、アラートが耳障りなMicrosoftの偽サイトとかに飛ばされるわけなのです。

…うざすぎる。

サーバーサイドの問題なのか、クライアントサイドの問題なのか、わかりませんが、(十中八九サーバーサイドの問題)そこは別にどうでもいいのです。

ちょっと検索しても、これといった解決法が見当たらなかったので、自分で解決することにしました。

苦戦した理由

IT

それと、これ、実は僕、どういう仕組みになっているんだが、さっぱりで。

ずっとイライラしつつ我慢してたんですけど、遂に我慢できなくなって、徹底抗戦してやろうと思ってデベロッパーツールを開いたら、直ぐに解決した、という感じなんですけど。

どうしてわからなかったかといいますと、

これ、ソースを見ても、出てこないんです。

ctrl+Uでソースが見れます。ここに、HTMLとか、JavaScriptとか、まぁ、つまり、ページの情報が全てあるわけです。

普通なら、ここで、例のクリックすると勝手に飛ぶリンク先を、ctrl+Fで検索すれば、ひっかかるはずなんですね。

でも、出てこない。

出てこないもんだから、もうお手上げで。

でも、改めて考えて、わかりました。

推察するに、おそらくJavaScriptで、時間経過後に動的にHTMLを生成するようになっていたんですね。

chromeのソースを見る機能では、ページを読み込んだ状態のソースが表示されるようで、現在の状態のソースではないわけです。

どうりで、一度リロードすると、クリックしても飛ばないようになるわけです。

本当に意地が悪い。

デベロッパーツールを開くか、JavaScriptを解析するかしないと、原因がわからないようになっていたんですね。

解決法

IT

ブックマークレットを使用して、HTMLを動的に変更することによって、クリックでリンクに飛ばされる状態を無効にすることができます。

JavaScript書いたので使ってください。場合によっては買い替えて使用してください。

// おすすめ
$("div").last().attr('style', '');

// こっちでもおk
$("div").last().remove()

ちなみに見てわかるとおりJqueryなので、サイトによっては動作しません。
kissanimeならJquery呼び出してるみたいなので、使えます。
使えなかったら、別途記事”ブックマークレットでjqueryを使う”を参照のほど。

解説

IT

解説をします。

こいつのコードはまず、こういう感じになっています。

<div id="bmh9aru" style="position: fixed; top: 0px; bottom: 0px; left: 0px; right: 0px; z-index: 2147483647; background: black; opacity: 0.01; height: 644px; width: 1593px;"><a id="lk8f5" href="http://www.hicpm10.com/play?bver=1&amp;refer=http%3A%2F%2Fkissanime.ru" target="_blank" style="display: block; height: inherit;"></a></div>

ここで、削除するべきなのは、z-index要素です。
z-indexで、ページの一番上のレイヤーに、HTMLを移動しています。
これさえ無くせば良いわけです。
まぁ、ホントはJavaScript本体を駆逐してやるのが一番なのですが、解析するのも面倒なので…。

では、JavaScript。

まず、これじゃだめでした。

$("#bmh9aru").attr('style', '');

IDを動的に変えられるので、これじゃあ意味がない。

それで、少し調べるとlast()っていうのがあるみたいで。

JavaScriptで生成されたHTMLは、bodyの一番最後に追加されます。なので、last()で削除してやることが一番理にかなっています。

それで、これ。

$("div").last().attr('style', '');

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です