| この記事の要点 |
|
基本: window.location.origin
ブラウザ JavaScript で「プロトコル + ホスト + ポート」のベース URL を取得するには window.location.origin を使います。
// 例: 現在 http://127.0.0.1:8000/users/123 にいる場合
const baseUrl = window.location.origin;
console.log(baseUrl);
// → "http://127.0.0.1:8000"
// URL を結合する場合(末尾スラッシュなしなので / を付ける)
const apiUrl = baseUrl + '/api/users';
console.log(apiUrl);
// → "http://127.0.0.1:8000/api/users"
location オブジェクトの全プロパティ
用途に応じて使い分けます。例として https://example.com:8080/users/123?tab=profile#info にいる場合:
| プロパティ | 値 | 説明 |
|---|---|---|
location.href | https://example.com:8080/users/123?tab=profile#info | URL 全体 |
location.origin | https://example.com:8080 | プロトコル + ホスト + ポート |
location.protocol | https: | 末尾コロン込み |
location.host | example.com:8080 | ホスト + ポート |
location.hostname | example.com | ホストのみ(ポートなし) |
location.port | 8080 | ポート番号(デフォルトポートは空) |
location.pathname | /users/123 | パス |
location.search | ?tab=profile | クエリ文字列(? 込み) |
location.hash | #info | フラグメント(# 込み) |
SSR (Next.js / Nuxt) では window が undefined
Next.js の getServerSideProps やコンポーネントの最上位、Nuxt の setup で window.location.origin を呼ぶと ReferenceError: window is not defined になります。
// ❌ NG: SSR でエラー
const baseUrl = window.location.origin;
// ✅ OK: typeof でガード
const baseUrl = typeof window !== 'undefined'
? window.location.origin
: process.env.NEXT_PUBLIC_BASE_URL;
// ✅ OK: useEffect 内で取得(クライアントのみ実行される)
useEffect(() => {
setBaseUrl(window.location.origin);
}, []);
サーバ側で URL を組み立てたいときは、環境変数 NEXT_PUBLIC_BASE_URL / NUXT_PUBLIC_BASE_URL 等にベース URL を入れておくのが定石です。
IE11 対応のポリフィル
window.location.origin は IE11 で未サポート。レガシー対応が必要なら以下のポリフィルを入れます:
if (!window.location.origin) {
window.location.origin = window.location.protocol + '//' +
window.location.hostname +
(window.location.port ? ':' + window.location.port : '');
}
サブパス配下のアプリケーション
例えば https://example.com/myapp/ 配下にデプロイしたアプリで API パスを組み立てる場合、origin だけでは /myapp が抜けます。HTML の <base href="/myapp/"> や、ビルド時にベースパスを埋め込む方式で対応:
// Vite: import.meta.env.BASE_URL を使う
const baseUrl = window.location.origin + import.meta.env.BASE_URL;
// → "https://example.com/myapp/"
// Vue Router / React Router でも同じ思想
// 環境変数からベースパスを取り、location.origin と結合する
新しい URL API
URL の組み立てや解析には URL コンストラクタが便利です。手動の文字列結合より安全:
const u = new URL(window.location.href);
console.log(u.origin); // "https://example.com:8080"
console.log(u.searchParams.get('tab')); // "profile"
// API URL を組み立てる
const apiUrl = new URL('/api/users/123', window.location.origin);
apiUrl.searchParams.set('fields', 'id,name');
console.log(apiUrl.toString());
// → "https://example.com:8080/api/users/123?fields=id%2Cname"
よくあるハマりどころ
- 末尾スラッシュ:
originは末尾なし、hrefはパス次第。結合時の重複に注意 - localhost と 127.0.0.1: ブラウザは別オリジン扱い。CORS 設定ではどちらも許可するか統一する
- http と https の混在: HTTPS ページから HTTP API を叩くと Mixed Content でブロック
- ポート省略時: デフォルトポート (80/443) なら
location.portは空文字 - iframe の中:
window.location.originは親ではなく iframe 自身の origin を返す
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38