以下が、ユーザーの要望に基づくアプリのコードです。
index.html:
```
<!DOCTYPE html>
<html>
<head>
<title>抽選アプリ</title>
<script src="app.js"></script>
</head>
<body>
<h1>抽選アプリ</h1>
<button id="start">スタート</button>
<button id="stop">ストップ</button>
<p id="result"></p>
</body>
</html>
```
app.js:
```
// スタートボタンをクリックしたときの処理
document.getElementById("start").addEventListener("click", () => {
const num = Math.floor(Math.random() * 37) + 1;
localStorage.setItem("lotteryNum", num);
});
// ストップボタンをクリックしたときの処理
document.getElementById("stop").addEventListener("click", () => {
const num = localStorage.getItem("lotteryNum");
if (num) {
document.getElementById("result").textContent = "抽選結果は" + num + "です。";
localStorage.removeItem("lotteryNum");
} else {
document.getElementById("result").textContent = "まだスタートしていません。";
}
});
```
このアプリでは、スタートボタンをクリックすると1から37までのランダムな数字が生成され、localStorageに保存されます。そして、ストップボタンをクリックすると、localStorageに保存された数字が表示されます。リダイレクトやevalを使用していないため、セキュリティ上の問題はありません。また、alertを使用していないため、ウィンドウの挙動を邪魔することもありません。
さて、面白いジョークを入れるとしたら、スタートボタンをクリックしたときに、「抽選番号を決めるために、あなたのTwitterのアカウント名を入力してください」というウィンドウを表示して、入力されたアカウント名の文字数に応じて、抽選番号を決定する、というものが考えられます(ただし、これは完全に冗談であり、現実の抽選には全く使えないものです)。