it-swarm.com.de

Relative URL zu einer anderen Portnummer in einem Hyperlink?

Gibt es eine Möglichkeit ohne Javascript/serverseitiges Scripting, eine Verbindung zu einer anderen Portnummer in derselben Box herzustellen, wenn ich den Hostnamen nicht kenne?

z.B.:

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

(Dieses Beispiel funktioniert nicht, da es nur Folgendes behandelt: 8080 als eine Zeichenfolge, zu der ich navigieren möchte.)

113
Ciaran McNulty

Es wäre schön, wenn dies funktionieren könnte, und ich kann nicht verstehen, warum dies nicht der Fall ist, da : ein reserviertes Zeichen für die Porttrennung innerhalb der URI-Komponente ist. Der Browser könnte dies realistisch als Port relativ zu dieser URL interpretieren Es gibt keine Möglichkeit, das zu tun.

Dafür benötigen Sie 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);

Getestet in Firefox 4

Geige:http://jsfiddle.net/JtF39/79/


Update: Fehler behoben, durch den ein Port an das Ende der URL angehängt wurde. Außerdem wurde die Unterstützung für relative und absolute URLs hinzugefügt, die an das Ende angehängt werden sollten:

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

Wie wäre es mit diesen:

Ändern Sie die Portnummer bei Klick:

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

Wenn Sie jedoch mit der Maus über den Link fahren, wird der Link nicht mit der neuen Portnummer angezeigt. Erst wenn Sie darauf klicken, wird die Portnummer hinzugefügt. Wenn der Benutzer mit der rechten Maustaste auf den Link klickt und "Link-Standort kopieren" verwendet, erhält er die unveränderte URL ohne die Portnummer. Das ist also nicht ideal.

Hier ist eine Methode zum Ändern der URL unmittelbar nach dem Laden der Seite. Wenn Sie den Mauszeiger über den Link bewegen oder "Link-Standort kopieren" verwenden, wird die aktualisierte URL mit der Portnummer angezeigt:

<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>
71
Craig McQueen

Sie können dies leicht mit document.write tun und die URL wird korrekt angezeigt, wenn Sie mit der Maus darüber fahren. Sie benötigen mit dieser Methode auch keine eindeutige ID, und sie funktioniert mit Chrome, FireFox und IE ..__ Da wir nur auf Variablen verweisen und keine externen Skripts laden, wirkt sich die Verwendung von document.write hier nicht auf die Seitenladeleistung aus.

<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>
46
Kurt Schultz

Ändern Sie die Portnummer bei Mouseover:

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

Dies ist eine Verbesserung von https://stackoverflow.com/a/13522508/1497139 , die nicht den Nachteil hat, den Link nicht korrekt anzuzeigen. 

8
Wolfgang Fahl

Ohne JavaScript müssen Sie sich auf serverseitige Skripte verlassen. Zum Beispiel, wenn Sie ASP verwenden, so etwas wie ...

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

sollte arbeiten. Das genaue Format hängt jedoch von der verwendeten Technologie ab.

4
gdt

Nachdem ich damit gerungen hatte, stellte ich fest, dass SERVER_NAME eine reservierte Variable ist. Wenn Sie also auf der Seite (www.example.com:8080) sind, sollten Sie die 8080 löschen und einen anderen Port aufrufen können. Dieser modifizierte Code hat zum Beispiel für mich funktioniert und bewegt mich von einem beliebigen Basis-Port zu Port 8069 (ersetzen Sie Ihren Port nach Bedarf).

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

Es ist besser, die URL serverseitig zu generieren: 

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

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

Kein kompliziertes Javascript erforderlich: Fügen Sie einfach einen Skriptknoten hinter Ihrem Anker ein, rufen Sie den Knoten in Javascript auf und ändern Sie die Eigenschaft href mit der Methode window.location.Origin

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

Die id -Eigenschaft muss auf der gesamten Seite eindeutig sein. Daher möchten Sie möglicherweise eine andere Methode verwenden, um Knotenobjekte abzurufen.

Getestet mit Apache und Firefox unter Linux.

1
MUY Belgium

Basierend auf Gary Holes Antwort , ändert aber URLs beim Laden der Seite statt Klick.

Ich wollte die URL mit css anzeigen:

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

Ich brauchte also die Href des Ankers, um die tatsächliche URL zu enthalten, die besucht werden sollte.

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>
    }
  }
}

Rufen Sie die obige Funktion beim Laden der Seite auf.

oder in einer Zeile:

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];}}

(Ich verwende for anstelle von forEach, damit es in IE7 funktioniert.)

1
Sam Hasler

Diese Lösung sieht für mich sauberer aus

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