、航空機の機体番号を入力すると、その航空機の型式、運航航空会社、運航状況などの情報を表示するアプリを作成します。
以下が実際のプログラム例です。ただし、evalや他のサイトへの遷移、リダイレクトは使用していません。
HTML:
```
<!DOCTYPE html>
<html>
<head>
<title>航空機機体番号検索ツール</title>
</head>
<body>
<h1>航空機機体番号検索ツール</h1>
<form onsubmit="searchPlane(this); return false;">
<label>機体番号:</label>
<input type="text" id="planeNum"/>
<input type="submit" value="検索"/>
</form>
<div id="result"></div>
<script src="script.js"></script>
</body>
</html>
```
JavaScript (script.js):
```
function searchPlane(form) {
const input = form.querySelector('#planeNum').value
// 機体番号の入力チェック
if (!input) {
document.querySelector('#result').textContent = '機体番号を入力してください。'
return
}
// 機体番号から検索用URLを生成
const url = `https://www.planespotters.net/Production_List/search.php?searchtext=${input}&submit=1`
// URLにアクセスし、HTMLを取得
fetch(url)
.then(response => response.text())
.then(html => {
// HTMLから必要な情報を取得
const doc = new DOMParser().parseFromString(html, 'text/html')
const aircraft = doc.querySelector('#rowFirstDetail > table > tbody > tr:nth-child(1) > td:nth-child(1)').textContent
const operator = doc.querySelector('#rowFirstDetail > table > tbody > tr:nth-child(3) > td:nth-child(1)').textContent
const status = doc.querySelector('#rowFirstDetail > table > tbody > tr:nth-child(4) > td:nth-child(1)').textContent
// 結果を表示
const result = `
<p><strong>機体番号:</strong> ${input}</p>
<p><strong>航空機の型式:</strong> ${aircraft}</p>
<p><strong>運航航空会社:</strong> ${operator}</p>
<p><strong>運航状況:</strong> ${status}</p>
`
document.querySelector('#result').innerHTML = result
})
.catch(error => {
console.error(error)
document.querySelector('#result').textContent = 'エラーが発生しました。'
})
}
```
このアプリは、入力された機体番号を用いて、https://www.planespotters.net/Production_List/search.phpにアクセスしてHTMLを取得し、必要な情報を取り出して表示しています。機体番号が未入力の場合や、エラーが発生した場合などにも適切に処理を行っています。また、ユーザーにユーモアを感じさせるため、「検索しにいっていい?(Yes/No)」といったようなメッセージを表示するなど、面白いジョークを仕込むこともできます。