piapia123
ja

ポップアップウィンドウのコード生成

Web

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

URL を入れてサイズ・位置とスイッチを調整すると、そのまま貼れるコードが出ます。このツールの価値の半分はもう効かないパラメータを教えることです:`menubar`・`toolbar`・`location`・`status` は現代のブラウザでは無視されます(Chrome も Firefox もスクリプトにアドレスバーを隠させません —— フィッシング対策の設計です)。「menubar=no」を写しても効いたつもりになるだけです。もう半分は安全な既定値です:`window.open` で同一オリジンのページを開くと、新しいウィンドウは `window.opener` を通じて開いた側のページを操作できるため、生成するコードは `noopener` を付け `opener` を消します。

機能

  • window.open のコード、または `<a target="_blank">` リンクを出力
  • サイズ・位置・サイズ変更の可否・スクロールバーを調整可能。範囲外の値は丸めます
  • 無視される menubar / toolbar / location / status は出力せず、理由を画面に書きます
  • 既定で noopener を付け、`window.opener` を消します
  • noopener の代償を明示的に扱います:features に含めると window.open は null を返します
  • URL はリテラルとしてエスケープし、含まれる引用符で文字列が切れないようにします
  • javascript: / data: などの擬似プロトコルは拒否します —— ページを開くものではないからです
  • 出力は JS / HTML で、シンタックスハイライト付き

使い方

  1. 開く URL を入力します
  2. サイズ・位置とスイッチを調整します
  3. 出力の形を選びます:window.open のコードか、リンクタグか
  4. 結果をコピー —— そのまま使えます

よくある質問

「アドレスバーを隠す」指定がないのはなぜですか?
現代のブラウザが許さないからです。`location`・`menubar`・`toolbar`・`status` は Chrome と Firefox では無視されます —— アドレスバーは表示され続けなければならず、そうでなければフィッシングページがアドレスバーのない信頼できそうな画面を装えてしまいます。ブラウザの手抜きではなく安全のための設計なので、このツールはそれらを出力せず、「できるように見える」誤解も与えません。
noopener は何をして、なぜ既定でオンなのですか?
`window.open` で開いた同一オリジンのページは `window.opener` を通じて開いた側のページに触れ、別の場所へ遷移させられます —— 小さなウィンドウを開いてメインのページをログイン画面に差し替える、フィッシングの定番手法です。`noopener` はその参照を切り、生成するコードはさらに `win.opener` を空にして両側を塞ぎます。新しいウィンドウから親を操作する必要が本当にある場合以外、切る理由はありません。
noopener をオンにすると、なぜ `const win = window.open(...)` がないのですか?
features に `noopener` があると `window.open` は null を返すからです。その場合 `if (win) win.opener = null` は決して実行され(エラーにはなりませんが無意味です)、`window.open(...).focus()` のような書き方はその場で例外になります。そこでその形ではハンドルを一切受け取らないコードを生成し、理由をコメントに書きます —— 「この書き方ではウィンドウを操作できない」と一目で分かるようにするためです。
ポップアップが出ないのはなぜですか?
多くの場合ポップアップブロッカーです。ユーザー操作(クリックやキー入力)から直接呼ばれた `window.open` だけが許可されます。`setTimeout` の中、ページ読み込み時、`await` の後で呼ぶと「ユーザー操作ではない」と判定されて遮断され、関数は正常に戻るのにウィンドウは出ません。クリックハンドラの中で直接呼んでください。

関連ツール