Relative URL to a different port number in a hyperlink?

前端 未结 11 1802
心在旅途
心在旅途 2020-11-27 15:13

Is there a way without Javascript / server-side scripting to link to a different port number on the same box, if I don\'t know the hostname?

e.g.:

&l         


        
相关标签:
11条回答
  • 2020-11-27 15:55

    You can do it easily using document.write and the URL will display correctly when you hover over it. You also do not need a unique ID using this method and it works with Chrome, FireFox and IE. Since we are only referencing variables and not loading any external scripts, using document.write here will not impact the page load performance.

    <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>
    
    0 讨论(0)
  • 2020-11-27 15:55

    Modify the port number on mouseover:

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

    This is an improvement of https://stackoverflow.com/a/13522508/1497139 which doesn't have the draw back of not showing the link correctly.

    0 讨论(0)
  • 2020-11-27 15:56

    Based on Gary Hole's answer, but changes urls on page load instead of on click.

    I wanted to show the url using css:

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

    So I needed the anchor's href to be converted to contain the actual url that would be visited.

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

    Call the above function on page load.

    or on one line:

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

    (I'm using for instead of forEach so it works in IE7.)

    0 讨论(0)
  • 2020-11-27 15:56

    None of the answers I looked at (and I will say, I didn't read them all) adjust the URL such that a middle click or "open in new tab" would function properly -- only a regular click to follow the link. I borrowed from Gary Greene's answer, and instead of adjusting the URL on-the-fly, we can adjust it when the page loads:

    ...
    <script>
    function rewriteRelativePortUrls() {
        var links = document.getElementsByTagName("a");
        for (var i=0,max=links.length; i<max; i++)
        {
            var port = links[i].getAttribute("href").match(/^:(\d+)(.*)/);
            if (port)
            {
                newURL = window.location.origin + port[0]
                links[i].setAttribute("href",newURL)
            }    
        }
    }
    
    </script>
    <body onload="rewriteRelativePortUrls()">
    ...
    
    0 讨论(0)
  • 2020-11-27 16:00

    This solution looks cleaner to me

    <a href="#"  
        onclick="window.open(`${window.location.hostname}:8080/someMurghiPlease`)">
        Link to some other port on the same host
      </a>
    
    0 讨论(0)
  • 2020-11-27 16:06

    Without JavaScript, you'll have to rely on some server side scripting. For example, if you're using ASP, something like ...

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

    should work. However, the exact format will depend on the technology you are using.

    0 讨论(0)
提交回复
热议问题