LoginSignup
4
1

More than 3 years have passed since last update.

ブックマークレット(JavaScript)で湯婆婆を実装してみる

Last updated at Posted at 2020-11-16

書いたあとで見つけたんですが、同じjs実装で圧倒的にスマートな例が別の湯婆婆のコメント欄にありました。
https://qiita.com/TD12734/items/743e90fb867fee8c562e#comment-5abe544380a4b2d29af3
上記、@shinji709様のコードが先となりますorz

はじめに

Javaで湯婆婆を実装してみる」のフォロワーネタです。
JavaScript版は既出なので、ブックマークレットにしました。

ブックマークレットは昔ゲーム・オブ・スローンズの画面が(演出上)暗くて見えにくい事にイライラして、アマプラの動画の輝度を調整するChromeExtensionを作ろうとした時にちょっと勉強した記憶があります。
(輝度調整のChrome拡張機能は既にあった)

コード

javascript:(function(){let n=window.prompt("契約書だよ。そこに名前を書きな。");if (!n.trim()) n=null;window.alert(`フン。${n}というのかい。贅沢な名だねぇ。`);n=n.substr(Math.floor(Math.random() * Math.floor(n.length)), 1);window.alert(`今からお前の名前は${n}だ。いいかい、${n}だよ。分かったら返事をするんだ、${n}!!`)})()

適当なサイトなどでブックマークを作り、リンク先を上記コードに置き換えるとブックマークレットとして動作します。
image.png
faviconを湯婆婆に変えるとよりそれっぽくなるかもしれません。

注記

ブックマークレットは、開いているページ内容(タブ)に影響します。
(文字列置換ブックマークレットとかありますよね)
Chromeの「新しいタブ」など、サイトではなくChromeシステム配下のページではJavaScriptは動作しないようです。
参考:http://mk.miko.jp/blog/archives/4497
yahooやqiitaなど適当なサイトを開き、そのタブで実行してください。

コードの解説

// ブックマークレットは今開いているサイトのスコープと干渉するので即時関数にする
(
  function(){
    let n=window.prompt("契約書だよ。そこに名前を書きな。");

    // 名無しの場合は異常終了させるためにnullを代入。Cannot read property 'substr' of nullで落ちます。
    if (!n.trim()) n=null;
    window.alert(`フン。${n}というのかい。贅沢な名だねぇ。`);

    // 抽選。先に抽選すればダイアログ2個で済みますが、あえて分けました。
    n=n.substr(Math.floor(Math.random() * Math.floor(n.length)), 1);
    window.alert(`今からお前の名前は${n}だ。いいかい、${n}だよ。分かったら返事をするんだ、${n}!!`)
  }
)()

実行結果

image.png

最後に

大昔にいじったDelphiとか引っ張り出そうかと思いましたが流石にめんどうでやめましたw

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1