以下が直交表を作成するアプリの例です。セキュリティに配慮し、evalやサイト遷移、リダイレクトの機能は含まれていません。また、今回はジョークは盛り込まれていません。
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>直交表を作るアプリ</title>
</head>
<body>
<h1>直交表を作るアプリ</h1>
<label for="factors">因子の数:</label>
<input type="number" id="factors" name="factors"><br><br>
<label for="levels">水準の数:</label>
<input type="number" id="levels" name="levels"><br><br>
<button onclick="makeOrthogonalTable()">直交表を作成する</button><br><br>
<div id="result"></div>
<script>
function makeOrthogonalTable() {
let numFactors = parseInt(document.getElementById("factors").value);
let numLevels = parseInt(document.getElementById("levels").value);
let tableData = [];
for (let i = 0; i < numLevels; i++) {
let row = [];
for (let j = 0; j < numFactors; j++) {
row.push(i % numLevels);
i++;
}
i--;
tableData.push(row);
}
let table = document.createElement("table");
let trHeader = document.createElement("tr");
let thBlank = document.createElement("th");
trHeader.appendChild(thBlank);
for (let i = 1; i <= numFactors; i++) {
let thCol = document.createElement("th");
thCol.innerText = "factor " + i;
trHeader.appendChild(thCol);
}
table.appendChild(trHeader);
for (let i = 0; i < numLevels; i++) {
let tr = document.createElement("tr");
let tdRow = document.createElement("td");
tdRow.innerText = "level " + (i + 1);
tr.appendChild(tdRow);
for (let j = 0; j < numFactors; j++) {
let td = document.createElement("td");
td.innerText = " " + tableData[i][j] + " ";
tr.appendChild(td);
}
table.appendChild(tr);
}
let resultDiv = document.getElementById("result");
resultDiv.innerHTML = "";
resultDiv.appendChild(table);
}
</script>
</body>
</html>
```
このアプリでは、ユーザーが因子の数と水準の数を入力すると、直交表が生成されます。生成された表は、HTMLのtable要素を使って表示されます。ユーザーが新しい表を作成するたびに、前の表は消去され、新しい表が生成されます。間違った入力に対するエラー処理は含まれていませんので、改善する場合は追加する必要があります。