Подтвердить что ты не робот

Относительный URL-адрес другого номера порта в гиперссылке?

Есть ли способ без скриптов Javascript/server-side для ссылки на другой номер порта в том же поле, если я не знаю имя хоста?

например:.

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

(Этот пример не работает, поскольку он будет просто обрабатывать: 8080 как строку, к которой я хочу перейти)

4b9b3361

Ответ 1

Было бы хорошо, если бы это могло работать, и я не понимаю, почему не потому, что : это зарезервированный символ для разделения портов внутри компонента 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, а также добавлена поддержка относительных и абсолютных URL, добавляемых в конец:

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

Ответ 2

Как насчет этих:

Измените номер порта при нажатии:

<a href="/other/" onclick="javascript:event.target.port=8080">Look at another port</a>

Однако, если вы наведите указатель мыши на ссылку, она не покажет ссылку с новым номером порта. Пока вы не нажмете на него, что он добавит номер порта. Кроме того, если пользователь щелкает правой кнопкой мыши по ссылке и выполняет "Копировать местоположение ссылки", они получают неизмененный URL-адрес без номера порта. Так что это не идеально.

Вот способ изменения URL-адреса сразу после загрузки страницы, поэтому при наведении указателя мыши на ссылку или "Копировать местоположение ссылки" вы получите обновленный URL-адрес с номером порта:

<html>
<head>
<script>
function setHref() {
document.getElementById('modify-me').href = window.location.protocol + "//" + window.location.hostname + ":8080/other/";
}
</script>
</head>

<body onload="setHref()">
<a href="/other/" id="modify-me">Look at another port</a>
</body>
</html>

Ответ 3

Вы можете сделать это легко, используя document.write, и URL будет отображаться правильно, когда вы наводите на него курсор. Этот метод также не нужен, и он работает с Chrome, FireFox и IE. Поскольку мы ссылаемся только на переменные и не загружаем внешние скрипты, использование здесь document.write не будет влиять на производительность загрузки страницы.

<script language="JavaScript">
document.write('<a href="' + window.location.protocol + '//' + window.location.hostname + ':8080' + window.location.pathname + '" >Link to same page on port 8080:</a> ' );
</script>

Ответ 4

Измените номер порта при наведении курсора мыши:

<a href="/other/" onmouseover="javascript:event.target.port=8080">Look at another port</a>

Это улучшение fooobar.com/questions/58674/..., у которого нет возврата к неправильной ссылке.

Ответ 5

Без JavaScript вам придется полагаться на некоторые скрипты на стороне сервера. Например, если вы используете ASP, что-то вроде...

<a href="<%=Request.ServerVariables("SERVER_NAME")%>:8080">Look at the other port</a>

должен работать. Однако точный формат будет зависеть от технологии, которую вы используете.

Ответ 6

После борьбы с этим я обнаружил, что SERVER_NAME является зарезервированной переменной. Итак, если вы находитесь на странице (www.example.com:8080), вы можете удалить 8080 и вызвать другой порт. Например, этот модифицированный код просто сработал у меня и переместил меня с любого базового порта на порт 8069 (замените порт по мере необходимости)

<div>
    <a href="http://<?php print
    $_SERVER{'SERVER_NAME'}; ?>:8069"><img
    src="images/example.png"/>Example Base (http)</a>
</div>

Ответ 7

Лучше получить URL-адрес из переменных сервера:

// PHP:
<a href="<?=$_SERVER['SERVER_NAME']?>:8080/index.php">

// ASP.net
<a href='<%=Request.ServerVariables("SERVER_NAME")%>:8080/index.asp'>

Ответ 8

Нет необходимости в сложном javascript: просто вставьте script node после вашего якоря, затем получите node в javascript и измените его свойство href с помощью метода window.location.origin.

 <a id="trans">Look at the other port</a>
 <script>
      document.getElementById('trans').href='http://'+window.location.origin+':8081';
 </script>

Свойство id должно быть уникальным для всей страницы, поэтому вы можете использовать другой метод для извлечения объектов node.

Протестировано с помощью apache и Firefox в Linux.

Ответ 9

На основе Gary Hole answer, но изменяет URL-адреса на загрузку страницы, а не на клик.

Я хотел показать URL-адрес, используя css:

a:after {
  content: attr(href);
}

Поэтому мне понадобилось, чтобы привязка href была преобразована, чтобы содержать фактический URL-адрес, который будет посещен.

function fixPortUrls(){
  var nodeArray = document.querySelectorAll('a[href]');
  for (var i = 0; i < nodeArray.length; i++) {
    var a = nodeArray[i];
    // a -> e.g.: <a href=":8080/test">Test</a>
    var port = a.getAttribute('href').match(/^:(\d+)(.*)/);
    //port -> ['8080','/test/blah']
    if (port) {
      a.href = port[2]; //a -> <a href="/test">Test</a>
      a.port = port[1]; //a -> <a href="http://localhost:8080/test">Test</a>
    }
  }
}

Вызовите вышеуказанную функцию при загрузке страницы.

или в одной строке:

function fixPortUrls(){var na=document.querySelectorAll('a[href]');for(var i=0;i<na.length;i++){var a=na[i];var u=a.getAttribute('href').match(/^:(\d+)(.*)/);u&&a.href=u[2]&&a.port=u[1];}}

(Я использую for вместо forEach, поэтому он работает в IE7.)

Ответ 10

Это решение выглядит чище для меня

<a href="#"  
    onclick="window.open('${window.location.hostname}:8080/someMurghiPlease')">
    Link to some other port on the same host
  </a>