ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
JavaScript を HTML に埋め込む 3 つの方法
1. インライン (script タグ内に直接記述)
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
</head>
<body>
<h1 id="title">Hello</h1>
<script>
// ここに JavaScript を直接書く
document.getElementById('title').textContent = 'Hello, World!';
console.log('inline script executed');
</script>
</body>
</html>
2. 外部ファイル (推奨)
<!-- 同じディレクトリの app.js を読み込み -->
<script src="app.js"></script>
<!-- 絶対パス -->
<script src="/js/app.js"></script>
<!-- CDN -->
<script src="https://cdn.jsdelivr.net/npm/vue@3"></script>
<!-- 整合性ハッシュ + crossorigin(推奨セキュリティ設定) -->
<script
src="https://cdn.example.com/lib.js"
integrity="sha384-..."
crossorigin="anonymous"></script>
3. インライン属性 (非推奨)
<!-- ❌ 非推奨(XSS リスク、CSP 違反、保守性低い) -->
<button onclick="alert('clicked')">Click</button>
<!-- ✅ addEventListener 推奨 -->
<button id="btn">Click</button>
<script>
document.getElementById('btn').addEventListener('click', () => {
alert('clicked');
});
</script>
script タグの属性 (defer / async / type)
| 属性 | ダウンロード | 実行タイミング | 順序 | 用途 |
|---|---|---|---|---|
| なし | 同期、HTML パース停止 | 即時 | HTML 内記述順 | 互換性、最終手段 |
defer | 非同期 | HTML パース完了後、DOMContentLoaded 前 | HTML 内記述順 | ★通常のアプリスクリプト |
async | 非同期 | ダウンロード完了次第 | 不定 | 独立した解析タグ等 |
type="module" | 非同期 | defer 相当 | 記述順 | ES Modules |
<!DOCTYPE html>
<html>
<head>
<!-- ★推奨: head に defer 付きで読み込み -->
<script src="app.js" defer></script>
<!-- 独立した広告/解析: async -->
<script src="https://www.googletagmanager.com/gtag/js?id=GA_ID" async></script>
<!-- ES Modules: 自動で defer 動作 -->
<script src="main.js" type="module"></script>
<!-- 旧ブラウザフォールバック: module 非対応で読まれる -->
<script src="main-legacy.js" nomodule></script>
</head>
<body>
<!-- body 末尾配置でも defer/async 不要だが、defer のほうが体感速い -->
</body>
</html>
ES Modules
<!-- index.html -->
<script type="module" src="main.js"></script>// main.js
import { greet } from './utils.js'; // 拡張子必須
greet('World');
// utils.js
export function greet(name) {
console.log(`Hello, ${name}`);
}
module は CORS / MIME (application/javascript) / 厳格モードが強制されるため、HTTP サーバ経由でアクセスする必要があります(file:// 直接開きは不可)。
DOM 操作の基本
<div id="app">Hello</div>
<ul class="list">
<li>A</li>
<li>B</li>
</ul>
<script>
// 要素取得
const app = document.getElementById('app');
const items = document.querySelectorAll('.list li');
const first = document.querySelector('.list li:first-child');
// テキスト書き換え
app.textContent = 'World';
// HTML として埋め込み(XSS 注意)
app.innerHTML = '<strong>Bold</strong>';
// 属性
app.setAttribute('data-id', '42');
app.dataset.id = '42';
// クラス
app.classList.add('active');
app.classList.toggle('hidden');
// スタイル
app.style.color = 'red';
// イベント
app.addEventListener('click', (e) => {
console.log('clicked', e.target);
});
// 子要素追加
const li = document.createElement('li');
li.textContent = 'C';
document.querySelector('.list').appendChild(li);
</script>
innerText / textContent / innerHTML の違い
| プロパティ | HTML タグ | 非表示要素 | パフォーマンス | XSS |
|---|---|---|---|---|
textContent | 取得・設定とも文字列扱い(エスケープ済) | 含む | ★高速 | 安全 |
innerText | 表示テキストのみ | 含まない | 遅い(レイアウト必要) | 安全 |
innerHTML | HTML として解釈 | 含む | 遅い(パース必要) | ★危険 |
XSS (クロスサイトスクリプティング) 対策
// ❌ 危険: ユーザー入力を innerHTML に直接
const userInput = '
';
element.innerHTML = userInput; // → スクリプト実行される
// ✅ textContent で文字列扱い
element.textContent = userInput; // → "
"']/g, m => ({
'&': '&', '<': '<', '>': '>', '"': '"', "'": '''
}[m]));
}
element.innerHTML = escapeHtml(userInput);
DOMContentLoaded と load イベント
| イベント | 発火タイミング | 用途 |
|---|---|---|
DOMContentLoaded | HTML パース + defer スクリプト完了時 | ★ DOM 操作開始 |
load | 画像/CSS/iframe 含め全リソース完了 | サイズ計算等、画像確認 |
document.addEventListener('DOMContentLoaded', () => {
// ここから安全に DOM 操作可能
init();
});
window.addEventListener('load', () => {
// 画像 size などの最終確認
});
// 既に発火済みかチェック
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init(); // 既に発火後なら即実行
}
FAQ
Q: defer と body 末尾配置、どちらが良い?
A: 機能的にはほぼ同じですが、defer + head 配置のほうが「ダウンロードが HTML パースと並行して始まる」ぶん体感が速くなります。
Q: document.write は?
A: 非推奨。HTML パース後に呼ぶとページ全体を破壊します。広告タグ等の互換目的以外は使わないこと。
Q: jQuery の $(function(){}) と DOMContentLoaded の違いは?
A: 同じです。jQuery 内部でも DOMContentLoaded を待つ実装になっています。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?