【问题标题】:Javascript not working when accessing from remote computer从远程计算机访问时Javascript不起作用
【发布时间】:2013-05-04 04:39:19
【问题描述】:

我使用此链接访问了我的客户页面

http://XX.XX.XX.XX/project/client.php 

。它只有几行 javascript 和 html,但它根本不起作用。但是当我使用这个链接访问我的客户页面时

http://localhost/project/client.php 

,它的工作原理。我知道我应该在 javascript 代码中更改一些内容,但我不知道是什么。所以请告诉我。这是我的客户代码:

<html>
<head>


<style>

#chatlog {width:440px; height:200px; border:1px solid;overflow:auto;}
  #userslog {width:440px; height:200px; border:1px solid;overflow:auto;}
#msg {width:330px; height:100px;}
</style>

<script>



function initialize(){
  var host = "ws://localhost:12345/project/server3z.php";
  try{
    socket = new WebSocket(host);
    chatlog('WebSocket - status '+socket.readyState);
    socket.onopen    = function(event){chatlog("WebSocket status "+this.readyState); };
    socket.onmessage = function(event){ chatlog(event.data); };
    socket.onclose   = function(){ chatlog("WebSocket  status "+this.readyState); };
socket.onerror    = function(event){chatlog("Error :"+event.data); };
  }
  catch(err){ chatlog(err); }

}

function send()
{
  var chat;

  chat= document.getElementById("msg").value;
  if(!chat){ alert("Message can not be empty"); return; }

  try{ socket.send(chat); chatlog('Sent: '+chat); } catch(err){ log(err); }
  document.getElementById("msg").value = "";
}
function quit(){
  chatlog("closed!");
  socket.close();
  chatlog("WebSocket  status "+socket.readyState);

}



function chatlog(msg)
{
var match=msg.match(/10101010101010/g);
if(match)
{
var msg=msg.split("10101010101010");
document.getElementById("userslog").innerHTML+="<br>"+msg[0];
}
else
{
document.getElementById("chatlog").innerHTML+="<br>"+msg;
}
}

function onkey(event){ if(event.keyCode==13){ send(); } }

</script>

</head>
<body onload="initialize()">
<center>
<div id="chatlog"></div>
<input id="msg" type="textbox" onkeypress="onkey(event)"/>
<button onclick="send()">Send</button>
<button onclick="quit()">Stop</button>
<div id="userslog"></div>
</center>
</body>
</html>

【问题讨论】:

  • 不工作是什么意思???你有任何错误吗?

标签: javascript xampp


【解决方案1】:

不要将主机硬编码为localhost,而是使用location.hostname

var host = "ws://" + location.hostname + ":12345/project/server3z.php";

【讨论】:

  • 嘿,location.hostname 是什么?你能举个例子吗?
  • @AnubhavJhalani location.hostname 是当前 URL 在方案之后、第一个斜杠之前的部分,不包括端口。示例:www.google.comstackoverflow.com。在您的情况下,当您通过http://localhost:80/ 访问页面时,location.hostname 将是“localhost” - 没问题。 但是,当您通过http://192.168.1.0/ 访问该页面时,您当前的方法将失败(因为您已硬编码http://localhost:12345)。如果您使用location.hostname,您的代码将再次开始工作。
  • 所以你想说我应该使用 var host = "ws://192.168.1.0:12345/project/server3z.php" ??我说的对吗?
  • @AnubhavJhalani 不,一点也不。我说您应该将文字 local URL 放在字符串中,而是使用 location.hostname 属性,如我的回答中所示。如果您使用host = "ws://192.168.1.0:12345/,您会发现当您移动到不同的网络时您的代码会中断。
  • 哦,我明白了。非常感谢您 。我会检查它,稍后会回复你:)
【解决方案2】:

您正在使用 WebSocket,您确定您在另一台 PC 上的浏览​​器支持 HTML5 和 WebsoCKET?

WebSocket 很早就引入

【讨论】:

  • 我的意思是为什么要投反对票?标题说:“从远程计算机访问”……所以远程计算机上的浏览器可能不支持 WebSocket。
  • 你解决了吗?我不是要你投票。我只是对投票失败感到失望。所以..至少让我知道是否是因为这个原因:-)
  • 是的,你猜对了。我使用的是不支持 websocket 的浏览器
【解决方案3】:

这行是问题var host = "ws://localhost:12345/project/server3z.php"; 默认情况下,localhost 表示您的本地计算机。因此,当您从本地计算机访问它时,它会映射到正确的计算机,但是当您从远程服务器访问它时,它只会搜索该服务器,因为现在 localhost 已更改

【讨论】:

    【解决方案4】:

    在您的代码中,您对本地主机上的 url 有一个硬编码的引用:

    var host = "ws://localhost:12345/project/server3z.php";
    

    如果您想从另一台计算机访问它,您需要将其替换为远程客户端可以解析的域或 IP 地址。

    【讨论】:

      【解决方案5】:

      感谢您的回答! :)

      madthew 是对的。我使用的是不支持 websocket 的 IE。它现在在我的 mozila 中工作。

      【讨论】:

        猜你喜欢
        • 2014-05-21
        • 1970-01-01
        • 2018-01-30
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        • 2013-05-03
        相关资源
        最近更新 更多