如何使用JavaScript确定用户是在内部还是外部网络?

时间:2016-04-06 11:47:04

标签: javascript php networking

我有一个带有JavaScript的按钮,可以调用'一个php文件。 该网站可从内部网络和万维网访问。

如果我点击www中的按钮,php无效,因为JavaScript中的地址是内部192.168.x.x地址。

function doSomething(id)
{
            var url ="http://192.168.1.1/phpfile.php?id" +id;

            var win = window.open(url, '_blank');
                if(win){
                    //Browser has allowed it to be opened
                    win.focus();
                }
                else
                {
                    //Broswer has blocked it
                    alert('Please allow popups for this site');
                }
}

是否可以区分呼叫是来自内部还是其他网络?

在另一种情况下(php)我使用if-else来解决问题

((substr($_SERVER['REMOTE_ADDR'],0,8) == "192.168.") ||($_SERVER['REMOTE_ADDR'] == "127.0.0.1")) 
? 'http://internal/address/' : 'http://my.external.de/''

2 个答案:

答案 0 :(得分:0)

如果按钮和JavaScript代码驻留在从同一服务器发送的HTML页面中,它可以在发送此页面之前测试并设置正确的值。

$PREFIX = ((substr($_SERVER['REMOTE_ADDR'],0,8) == "192.168.") ||($_SERVER['REMOTE_ADDR'] == "127.0.0.1")) ? 'http://internal/address/' : 'http://my.external.de/''

function doSomething(id) { var url ="<?=PREFIX?>phpfile.php?id" +id; ....

答案 1 :(得分:0)

据我所知,您希望您的网站在本地使用localhost / 192.168.x.x / 127.0.0.1或在远程Web服务器上工作,并区分您拥有的配置,以便您的javascript正确地从一个切换到另一个。

首先,您无法直接从javascript获取IP地址,您需要使用中继网站:请参阅this thread以获取答案。

但是,在你的情况下,我相信有更简单的方法可以继续进行,没有任何'如果'。 Javascript(或浏览器)非常智能,可以为您路由呼叫。将您的代码更改为:

function doSomething(id)
{
        var url ="/phpfile.php?id" +id;

        var win = window.open(url, '_blank');
            if(win){
                //Browser has allowed it to be opened
                win.focus();
            }
            else
            {
                //Broswer has blocked it
                alert('Please allow popups for this site');
            }
}

如果从localhost加载了运行脚本的页面,则客户端浏览器会自动将调用路由到localhost。如果从my.external.de加载了运行脚本的页面,则路由到my.external.de。