1. ホーム
  2. html

[解決済み] ハイパーリンクで異なるポート番号への相対的なURL?

2022-05-05 14:41:29

質問

ホスト名がわからない場合、Javascriptやサーバーサイドスクリプトを使わずに、同じ箱の別のポート番号にリンクする方法はありますか?

<a href=":8080">Look at the other port</a>

(この例では、:8080 をナビゲートしたい文字列として扱ってしまうので、うまくいきません)

解決方法は?

これがうまくいけばいいのですが、なぜうまくいかないのか、それは : はURIコンポーネント内のポート分離のための予約文字なので、ブラウザは現実的にこれをこのURLからの相対的なポートとして解釈することができますが、残念ながらそうではなく、そのための方法はありません。

したがって、これを行うにはJavascriptが必要です。

// delegate event for performance, and save attaching a million events to each anchor
document.addEventListener('click', function(event) {
  var target = event.target;
  if (target.tagName.toLowerCase() == 'a')
  {
      var port = target.getAttribute('href').match(/^:(\d+)(.*)/);
      if (port)
      {
         target.href = window.location.origin;
         target.port = port[1];
      }
  }
}, false);

Firefox 4でテスト済み

フィドル http://jsfiddle.net/JtF39/79/


更新情報 : urlの末尾にportを付加するバグを修正し、末尾に付加する相対URLと絶対URLのサポートを追加しました。

<a href=":8080/test/blah">Test absolute</a>
<a href=":7051./test/blah">Test relative</a>